Rechenberg的(1+1)-进化策略 (RES)

class pypop7.optimizers.es.res.RES(problem, options)[source]

Rechenberg的(1+1)-进化策略,采用1/5成功规则(RES)。

“给定所有方差和协方差,正态(高斯)分布在所有分布中具有最大的熵。”—[Hansen, N., 2023]

注意

RES 是第一个具有全局步长自适应的进化策略(由Rechenberg设计,他是2002年IEEE进化计算先锋奖的获得者之一),最初是为实验优化提出的。正如他在柏林工业大学的开创性博士论文中所理论研究的,狭窄的进化窗口的存在解释了全局步长自适应的必要性,以尽可能最大化局部收敛进度。需要注意的是,自动控制领域也独立进行了类似的理论研究([Schumer&Steiglitz, 1968, IEEE-TAC])。

由于每一代(迭代)只有一个父代和一个后代,RES通常在大规模黑箱优化中表现出有限的探索能力。因此,建议首先尝试更高级的ES变体(例如,LMCMALMMAES)进行大规模黑箱优化。这里我们包含RES(又名双成员ES)主要是为了基准测试理论目的。有趣的是,由于其受欢迎程度,有时RES现在仍然被使用,例如,[Williams&Li, 2024, NeurIPS]

“作为一种实践中的控制机制,1/5成功规则大多已被更复杂的方法所取代。然而,其概念上的洞察力仍然非常有价值。”—[Hansen et al., 2015]

Parameters:
  • 问题 (字典) –

    问题参数包含以下常见设置 ():
    • ’fitness_function’ - 需要最小化的目标函数 (函数),

    • ’ndim_problem’ - 维度数 (整数),

    • ’upper_boundary’ - 搜索范围的上限 (类数组),

    • ’lower_boundary’ - 搜索范围的下限 (类数组).

  • options (dict) –

    具有以下常见设置的优化器选项 (keys):
    • ’max_function_evaluations’ - 函数评估的最大次数 (int, 默认: np.inf),

    • ’max_runtime’ - 允许的最大运行时间 (float, 默认: np.inf),

    • ’seed_rng’ - 随机数生成的种子,需要显式设置 (int);

    以及以下特定设置 (keys):
    • ’sigma’ - 初始全局步长,也称为变异强度 (float),

    • ’mean’ - 初始(起始)点,也称为高斯搜索分布的均值 (array_like),

      • 如果未给出,它将从均匀分布中随机抽取一个样本,其搜索范围由 problem[‘lower_boundary’]problem[‘upper_boundary’] 限定。

    • ’lr_sigma’ - 全局步长自适应的学习率 (float, 默认: 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

在整个优化过程中找到的最终最佳解决方案。

Type:

array_like

best_so_far_y

在整个优化过程中找到的最终最佳适应度。

Type:

array_like

lr_sigma

全局步长自适应的学习率。

Type:

float

mean

初始(起始)点,也称为高斯搜索分布的平均值。

Type:

array_like

sigma

最终的全局步长,也称为变异强度(在优化过程中更新)。

Type:

float

参考文献

奥格,A.,汉森,N.,洛佩斯-伊巴涅斯,M. 和鲁道夫,G.,2022年。 向英戈·雷兴贝格(1934–2021)致敬。 ACM SIGEVOlution,14(4),第1-4页。

Agapie, A., Solomon, O. 和 Giuclea, M., 2021. Theory of (1+1) ES on the RIDGE. IEEE 进化计算汇刊, 26(3), 第501-511页.

Hansen, N., Arnold, D.V. 和 Auger, A., 2015. 进化策略. 在 Springer 计算智能手册中 (第 871-898 页). Springer, 柏林, 海德堡.

Kern, S., Müller, S.D., Hansen, N., Büche, D., Ocenasek, J. 和 Koumoutsakos, P., 2004. 学习连续进化算法中的概率分布——比较综述。 自然计算, 3, 第77-112页。

Beyer, H.G. 和 Schwefel, H.P., 2002. 进化策略——全面介绍。 自然计算, 1(1), 第3-52页。

Rechenberg, I., 2000. 进化实验与计算案例研究。 计算机方法在应用力学与工程中的应用, 186(2-4), pp.125-140.

Rechenberg, I., 1989. 进化策略:自然的优化方式。 在《优化:方法与应用,可能性与限制》(第106-126页)中。 Springer, 柏林, 海德堡。

Rechenberg, I., 1984. 进化策略。达尔文进化的数学模型。 在《协同作用——从微观到宏观秩序》(第122-132页)中。Springer, Berlin, Heidelberg.

Rechenberg, I., 1973. Evolutionsstrategie: Optimierung technischer systeme nach prinzipien der biologischen evolution. Frommann-Holzboog Verlag, Stuttgart. (请注意,这篇开创性的博士论文我们并未阅读,因为它最初是用德语撰写的。我们仍然将其添加在这里,因为它对进化计算和黑箱优化领域具有历史性的重要贡献。)

舒默,M.A. 和 斯泰格利茨,K.,1968年。 自适应步长随机搜索。 IEEE自动控制汇刊,13(3),第270-276页。

https://visitor-badge.laobi.icu/badge?page_id=Evolutionary-Intelligence.pypop