PyPop7 黑箱优化 (BBO) 文档
“负责适应、优化和创新生物世界,进化执行了一个简单的多样化和自然选择的算法,这个算法在所有复杂性层次上都能工作,从单个蛋白质分子到整个生态系统。”— 来自加州理工学院弗朗西斯·H·阿诺德的诺贝尔演讲
PyPop7 是一个用于单目标、实参数、黑箱问题的纯Python库,专注于基于种群的优化。其设计目标是提供一个统一的接口和一组优雅的实现,特别是针对黑箱优化器(BBO),尤其是基于种群的优化器(包括进化算法、基于群体的随机方法和模式搜索),以便于研究的可重复性、BBO的基准测试,特别是实际应用。
具体来说,为了缓解BBO中众所周知的(“臭名昭著的”)维度诅咒, PyPop7的主要重点是尽可能覆盖其大规模优化(LSO)的最先进(SOTA)实现, 尽管这里也包括了许多它们的中规模或小规模版本和变体(一些主要用于理论目的, 一些主要用于教育目的,一些主要用于基准测试目的,还有一些主要用于应用目的, 特别是在中低维度上)。

注意
这个开源的Python库用于连续BBO,目前仍在积极维护中。 未来,我们计划添加一些新的BBO和一些现有BBO家族的最新版本,以使这个库尽可能保持最新。 对于这个开源的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: 一个用于基于群体的黑盒优化的纯Python库。arXiv预印本 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 作为 PCP7),
对于噪声优化(PyNoPop7 作为 PNP7),
通过并行和分布式优化进行增强(PyPop77 作为 PP77),
通过基于元进化的优化增强(PyMePop7 作为 PMP7)。
PyPop7 的内容:
- 安装
- 用户指南
- 在线教程
- 进化策略(ES)
ES
- 有限内存协方差矩阵适应(LMCMA)
- 基于混合模型的进化策略 (MMES)
- Diagonal Decoding Covariance Matrix Adaptation (DDCMA)
- 有限内存矩阵自适应进化策略 (LMMAES)
- Rank-M Evolution Strategy (RMES)
- Rank-One Evolution Strategy (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)
- Derandomized Self-Adaptation Evolution Strategy (DSAES)
- Schwefel的自适应进化策略(SSAES)
- Rechenberg的(1+1)-进化策略 (RES)
- 自然进化策略 (NES)
- 分布估计算法 (EDA)
- 交叉熵方法 (CEM)
- 差分进化算法 (DE)
- 粒子群优化算法 (PSO)
- 协同进化 (CC)
- 模拟退火 (SA)
- 遗传算法 (GA)
- 进化编程 (EP)
- 直接/模式搜索 (DS)
- 随机搜索 (RS)
- 贝叶斯优化 (BO)
- 黑箱优化 (BBO)
- BBO的基准测试函数
- BBO的实用函数
- 开发指南
- 应用程序
- 赞助商
- 设计理念
- 更改日志
- 软件摘要