雷肯伯格的 (1+1)-演化策略 (RES)
- class pypop7.optimizers.es.res.RES(problem, options)[源代码]
采用 1/5 成功法则的雷肯伯格 (1+1)-演化策略 (RES)。
“在所有方差和协方差给定的情况下,正态(高斯)分布在所有分布中熵最大。”——[Hansen, N., 2023]
注意
RES 是第一个具有全局步长自适应的演化策略(由雷肯伯格设计,他是 2002 年 IEEE 演化计算先驱奖的两位获奖者之一),最初是为实验性优化而提出的。正如他在柏林工业大学的开创性博士论文中从理论上研究的那样,狭窄的演化窗口的存在解释了为了最大化局部收敛进程,进行全局步长自适应的必要性。请注意,一个类似的理论研究也由自动控制领域独立进行([Schumer&Steiglitz, 1968, IEEE-TAC])。
由于每一代(迭代)只有一个父代和一个子代,RES 在大规模黑盒优化中通常表现出有限的探索能力。因此,建议首先尝试更高级的 ES 变体(例如 LMCMA、LMMAES)来解决大规模黑盒优化问题。我们在此处包含 RES(也称为双成员 ES)主要是为了基准测试和理论目的。有趣的是,由于其普及性,RES 如今有时仍在使用,例如 [Williams&Li, 2024, NeurIPS]。
“作为一种实践中的控制机制,1/5 成功法则在很大程度上已被更复杂的方法所取代。然而,其概念上的洞见仍然非常有价值。”——[Hansen 等人, 2015]
- 参数:
problem (dict) –
- 问题参数,包含以下通用设置 (键)
'fitness_function' - 需要被最小化的目标函数 (func),
'ndim_problem' - 维度数量 (int),
'upper_boundary' - 搜索范围的上边界 (array_like),
'lower_boundary' - 搜索范围的下边界 (array_like).
options (dict) –
- 优化器选项,包含以下通用设置 (键)
'max_function_evaluations' - 函数评估的最大次数 (int, 默认: np.inf),
'max_runtime' - 允许的最大运行时间 (float, 默认: np.inf),
'seed_rng' - 随机数生成器的种子,需要明确设置 (int);
- 以及以下特定设置 (键)
‘sigma’ - 初始全局步长,也称为变异强度 (float),
‘mean’ - 初始(起始)点,也称为高斯搜索分布的均值 (array_like),
如果未提供,它将从一个均匀分布中随机抽取一个样本,该分布的搜索范围由 problem[‘lower_boundary’] 和 problem[‘upper_boundary’] 限定。
“lr_sigma” - 全局步长自适应的学习率(浮点型,默认值:1.0/np.sqrt(problem[‘ndim_problem’] + 1.0))。
示例
使用黑盒优化器 RES 来最小化著名的测试函数 Rosenbrock
1>>> import numpy # engine for numerical computing 2>>> from pypop7.benchmarks.base_functions import rosenbrock # function to be minimized 3>>> from pypop7.optimizers.es.res import RES 4>>> problem = {'fitness_function': rosenbrock, # to define problem arguments 5... 'ndim_problem': 2, 6... 'lower_boundary': -5.0*numpy.ones((2,)), 7... 'upper_boundary': 5.0*numpy.ones((2,))} 8>>> options = {'max_function_evaluations': 5000, # to set optimizer options 9... 'seed_rng': 2022, 10... 'mean': 3.0*numpy.ones((2,)), 11... 'sigma': 3.0} # global step-size may need to be tuned for optimality 12>>> res = RES(problem, options) # to initialize the black-box optimizer class 13>>> results = res.optimize() # to run its optimization/evolution process 14>>> print(f"RES: {results['n_function_evaluations']}, {results['best_so_far_y']}") 15RES: 5000, 0.0001
关于其 Python 编码的正确性检查,请参阅这份基于代码的可复现性报告以获取所有细节。对于基于 pytest 的自动化测试,请参见 test_res.py。
- best_so_far_x
在整个优化过程中找到的迄今为止最优的解。
- 类型:
array_like
- best_so_far_y
在整个优化过程中找到的迄今为止最优的适应度。
- 类型:
array_like
- lr_sigma
全局步长自适应的学习率。
- 类型:
float
- mean
初始(起始)点,也即高斯搜索分布的均值。
- 类型:
array_like
- sigma
最终的全局步长,也称为变异强度(在优化过程中更新)。
- 类型:
float
参考文献
Auger, A., Hansen, N., López-Ibáñez, M. and Rudolph, G., 2022. 纪念 Ingo Rechenberg (1934–2021)。 ACM SIGEVOlution, 14(4), pp.1-4.
Agapie, A., Solomon, O. and Giuclea, M., 2021. 关于 RIDGE 上的 (1+1) ES 理论。 IEEE Transactions on Evolutionary Computation, 26(3), pp.501-511.
Hansen, N., Arnold, D.V. and Auger, A., 2015. Evolution strategies. In Springer Handbook of Computational Intelligence (pp. 871-898). Springer, Berlin, Heidelberg.
Kern, S., Müller, S.D., Hansen, N., Büche, D., Ocenasek, J. and Koumoutsakos, P., 2004. Learning probability distributions in continuous evolutionary algorithms–a comparative review. Natural Computing, 3, pp.77-112.
Beyer, H.G. and Schwefel, H.P., 2002. 演化策略——全面介绍。 Natural Computing, 1(1), pp.3-52.
Rechenberg, I., 2000. 演化实验与计算案例研究。 Computer Methods in Applied Mechanics and Engineering, 186(2-4), pp.125-140.
Rechenberg, I., 1989. 演化策略:自然的优化之道。 In Optimization: Methods and Applications, Possibilities and Limitations (pp. 106-126). Springer, Berlin, Heidelberg.
Rechenberg, I., 1984. 演化策略:达尔文演化的数学模型。 In Synergetics—from Microscopic to Macroscopic Order (pp. 122-132). Springer, Berlin, Heidelberg.
Rechenberg, I., 1973. Evolutionsstrategie: Optimierung technischer systeme nach prinzipien der biologischen evolution. Frommann-Holzboog Verlag, Stuttgart. (注意,我们没有阅读这篇开创性的博士论文,因为它最初是用德语写的。我们在此仍将其列出,因为它对演化计算和黑盒优化做出了具有历史意义的重大贡献。)
Schumer, M.A. and Steiglitz, K., 1968. 自适应步长随机搜索。 IEEE Transactions on Automatic Control, 13(3), pp.270-276.