PyPop7 黑箱优化 (BBO) 文档
[新闻!] 最近,PyPop7 已被一篇 Nature 论文使用和/或引用:[Veenstra 等人, Nature, 2025] 等。
PyPop7 是一个用于单目标、实参数、黑箱问题的纯 Python 基于种群的优化库。其设计目标是为黑箱优化器 (BBO),特别是基于种群的优化器(包括演化算法、基于群体的随机方法和模式搜索),提供统一的接口和一系列优雅的实现,以促进研究的可重复性、BBO 的基准测试,尤其是实际应用。
具体而言,为缓解众所周知的(“臭名昭著的”)BBO 维度灾难问题,PyPop7 的主要重点是尽可能多地涵盖其针对大规模优化 (LSO) 的最先进 (SOTA) 实现,尽管这里也包含了许多它们的中等或小规模版本和变体(一些主要用于理论目的,一些主要用于教育目的,一些主要用于基准测试目的,还有一些主要用于中低维度的应用目的)。

注意
这个用于连续 BBO 的开源 Python 库仍在积极维护中。未来,我们计划添加一些新的 BBO 算法和现有 BBO 家族的一些 SOTA 版本,以使该库尽可能保持最新。我们非常欢迎对这个开源 Python 库的任何建议、扩展、改进、使用和测试(甚至是批评)!
如果在您的论文或项目中使用此开源纯 Python 库 PyPop7,我们非常欢迎(但非强制)您引用以下 arXiv 预印本论文:Duan, Q., Zhou, G., Shao, C., Wang, Z., Feng, M., Huang, Y., Tan, Y., Yang, Y., Zhao, Q. and Shi, Y., 2024. PyPop7: A pure-Python library for population-based black-box optimization. arXiv preprint arXiv:2212.05652.(目前这篇 arXiv 论文已提交至 JMLR,并于 2024 年 10 月 11 日星期五在经历了从 2023 年 3 月 28 日星期二到 2023 年 11 月 1 日星期三再到 2024 年 7 月 5 日星期五的三轮评审后被接受。)
快速入门
在许多(虽然不是全部)情况下,通常只需三个步骤即可利用 PyPop7 在 BBO 方面的潜力。
有关多种安装方式的详细信息,请参阅此在线文档。
为您手头的复杂优化问题定义/编写您自己的目标(也称为成本或适应度)函数(待最小化)
1>>> import numpy as np # for numerical computation, which is also the computing engine used by PyPop7 2>>> def rosenbrock(x): # one notorious test function in the optimization community 3... return 100.0*np.sum(np.square(x[1:] - np.square(x[:-1]))) + np.sum(np.square(x[:-1] - 1.0)) 4>>> ndim_problem = 1000 # problem dimension 5>>> problem = {'fitness_function': rosenbrock, # fitness function to be minimized 6... 'ndim_problem': ndim_problem, # problem dimension 7... 'lower_boundary': -5.0*np.ones((ndim_problem,)), # lower search boundary 8... 'upper_boundary': 5.0*np.ones((ndim_problem,))} # upper search boundary
有关问题定义的详细信息,请参阅此在线文档。请注意,任何最大化问题都可以通过简单取反轻松转换为最小化问题。
有关 PyPop7 提供的来自不同应用领域的大量基准测试函数,请参阅此在线文档。
在上述优化问题上运行一个或多个来自 PyPop7 的黑箱优化器 (BBO)
1>>> from pypop7.optimizers.es.lmmaes import LMMAES # or to choose any black-box optimizer you prefer in PyPop7 2>>> options = {'fitness_threshold': 1e-10, # terminate when the best-so-far fitness is lower than 1e-10 3... 'max_runtime': 3600, # terminate when the actual runtime exceeds 1 hour (i.e., 3600 seconds) 4... 'seed_rng': 0, # seed of random number generation (which should be set for repeatability) 5... 'x': 4.0*np.ones((ndim_problem,)), # initial mean of search/mutation/sampling distribution 6... 'sigma': 3.0, # initial global step-size of search distribution (to be fine-tuned for optimality) 7... 'verbose': 500} 8>>> lmmaes = LMMAES(problem, options) # initialize the black-box optimizer (a unified interface for all optimizers) 9>>> results = lmmaes.optimize() # run its (time-consuming) optimization/evolution/search process 10>>> # print best-so-far fitness and used function evaluations returned by the used black-box optimizer 11>>> print(results['best_so_far_y'], results['n_function_evaluations']) 129.948e-11 2973386
有关优化器设置的详细信息,请参阅此在线文档。以下 API 内容主要针对这个似乎日益流行的开源 Python 库中当前所有可用的 BBO。
注意
总共有四个 PyPop7 (PP7) 的扩展版本正在开发或计划中,如下所示:
用于约束优化 (PyCoPop7 as PCP7),
用于噪声优化 (PyNoPop7 as PNP7),
通过并行和分布式优化增强 (PyPop77 as PP77),
通过基于元演化的优化增强 (PyMePop7 as PMP7)。
PyPop7 内容
- 安装
- 用户指南
- 在线教程
- 演化策略 (ES)
演化策略
- 有限内存协方差矩阵自适应 (LMCMA)
- 基于混合模型的演化策略 (MMES)
- 对角解码协方差矩阵自适应 (DDCMA)
- 有限内存矩阵自适应演化策略 (LMMAES)
- Rank-M 演化策略 (RMES)
- Rank-One 演化策略 (R1ES)
- 有限内存协方差矩阵自适应演化策略 (LMCMAES)
- 快速矩阵自适应演化策略 (FMAES)
- 矩阵自适应演化策略 (MAES)
- Cholesky-CMA-ES 2016 (CCMAES2016)
- (1+1)-Active-CMA-ES 2015 (OPOA2015)
- (1+1)-Active-CMA-ES 2010 (OPOA2010)
- Cholesky-CMA-ES 2009 (CCMAES2009)
- (1+1)-Cholesky-CMA-ES 2009 (OPOC2009)
- 可分离协方差矩阵自适应演化策略 (SEPCMAES)
- (1+1)-Cholesky-CMA-ES 2006 (OPOC2006)
- 协方差矩阵自适应演化策略 (CMAES)
- 自适应矩阵自适应演化策略 (SAMAES)
- 自适应演化策略 (SAES)
- 累积步长自适应演化策略 (CSAES)
- 去随机化自适应演化策略 (DSAES)
- Schwefel 的自适应演化策略 (SSAES)
- Rechenberg 的 (1+1)-演化策略 (RES)
- 参考文献
- 加权复合
- 自然演化策略 (NES)
- 分布估计算法 (EDA)
- 交叉熵方法 (CEM)
- 差分演化 (DE)
- 粒子群优化器 (PSO)
- 协同演化 (CC)
- 模拟退火 (SA)
- 遗传算法 (GA)
- 演化规划 (EP)
- 直接/模式搜索 (DS)
- 随机搜索 (RS)
- 贝叶斯优化 (BO)
- 黑盒优化 (BBO)
- BBO 基准测试函数
- BBO 实用函数
- 开发指南
- 应用
- 赞助商
- 设计理念
- 更新日志
- 软件摘要