PyPop7 黑箱优化 (BBO) 文档

https://img.shields.io/badge/GitHub-PyPop7-red.svg https://img.shields.io/badge/PyPI-pypop7-yellowgreen.svg https://img.shields.io/badge/license-GNU%20GPL--v3.0-green.svg https://img.shields.io/badge/OS-Linux%20%7C%20Windows%20%7C%20MacOS%20X-orange.svg https://static.pepy.tech/badge/pypop7 https://static.pepy.tech/badge/pypop7/month https://visitor-badge.laobi.icu/badge?page_id=Evolutionary-Intelligence.pypop https://img.shields.io/badge/arxiv-2212.05652-red https://img.shields.io/badge/JMLR-2024-red https://readthedocs.org/projects/pypop/badge/?version=latest

“负责适应、优化和创新生物世界,进化执行了一个简单的多样化和自然选择的算法,这个算法在所有复杂性层次上都能工作,从单个蛋白质分子到整个生态系统。”— 来自加州理工学院弗朗西斯·H·阿诺德的诺贝尔演讲

PyPop7 是一个用于单目标、实参数、黑箱问题的纯Python库,专注于基于种群的优化。其设计目标是提供一个统一的接口和一组优雅的实现,特别是针对黑箱优化器(BBO),尤其是基于种群的优化器(包括进化算法、基于群体的随机方法和模式搜索),以便于研究的可重复性、BBO的基准测试,特别是实际应用。

具体来说,为了缓解BBO中众所周知的(“臭名昭著的”)维度诅咒PyPop7的主要重点是尽可能覆盖其大规模优化(LSO)的最先进(SOTA)实现, 尽管这里也包括了许多它们的中规模或小规模版本和变体(一些主要用于理论目的, 一些主要用于教育目的,一些主要用于基准测试目的,还有一些主要用于应用目的, 特别是在中低维度上)。

_images/logo.png

注意

这个开源的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. 使用 pip 通过 PyPI 自动安装 pypop7

    $ pip install pypop7
    

请参考此在线文档了解多种安装方式的详细信息。

  1. 定义/编写你自己的目标(也称为成本或适应度)函数(需要最小化)以应对当前的复杂优化问题:

    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提供的来自不同应用领域的大量基准测试函数。

  1. 在上述优化问题上运行一个或多个来自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 的内容:

https://hits.seeyoufarm.com/api/count/incr/badge.svg?url=https%3A%2F%2Fgithub.com%2FEvolutionary-Intelligence%2Fpypop&count_bg=%2379C83D&title_bg=%23555555&icon=&icon_color=%23E7E7E7&title=hits&edge_flat=false