Skip to main content

基于 Python 的粒子群优化 (PSO) 库。

项目描述

PySwarm 徽标

PyPI 版本 构建状态 文件状态 执照:麻省理工学院 DOI 代码风格:黑色 吉特聊天

PySwarms 是 Python 中用于粒子群优化 (PSO) 的可扩展研究工具包。

它适用于群体智能研究人员、从业者和学生,他们更喜欢在他们的问题中实现 PSO 的高级声明式接口。PySwarms 支持使用 PSO 进行基本优化,并与群优化进行交互。在下面查看更多功能!

  • 免费软件:麻省理工学院许可证
  • 文档: https ://pyswarms.readthedocs.io 。
  • Python版本: 3.5及以上

特征

  • 粒子群优化的高级模块。有关所有优化器的列表,请查看此链接
  • 用于测试优化算法的内置目标函数。
  • 成本历史和粒子运动的绘图环境。
  • 用于优化群体行为的超参数搜索工具。
  • (针对开发人员和研究人员):用于实现您自己的技术的高度可扩展的 API。

安装

要安装 PySwarms,请在终端中运行以下命令:

$ pip install pyswarms

这是安装 PySwarms 的首选方法,因为它将始终安装最新的稳定版本。

如果您想安装最新版本,请克隆此 repo:

$ git clone -b development https://github.com/ljvmiranda921/pyswarms.git

然后运行

$ cd pyswarms
$ python setup.py install

在流浪盒中奔跑

要在 Vagrant Box 中运行 PySwarms,请访问 https://www.vagrantup.com/downloads.html并从 Hashicorp 网站下载正确的打包文件来安装 Vagrant。

之后,在项目目录中运行以下命令:

$ vagrant provision
$ vagrant up
$ vagrant ssh

现在您已准备好在预制的虚拟环境中开发您的贡献。

基本用法

PySwarms 提供了各种粒子群优化算法的高级实现。因此,它的目标是用户友好和可定制。此外,支持模块可用于帮助您解决优化问题。

优化球体函数

您可以将 PySwarms 作为任何其他 Python 模块导入,

import pyswarms as ps

假设我们想找到f(x) = x^2使用全局最佳 PSO 的最小值,只需导入内置的 sphere 函数 pyswarms.utils.functions.sphere()和必要的优化器:

import pyswarms as ps
from pyswarms.utils.functions import single_obj as fx
# Set-up hyperparameters
options = {'c1': 0.5, 'c2': 0.3, 'w':0.9}
# Call instance of PSO
optimizer = ps.single.GlobalBestPSO(n_particles=10, dimensions=2, options=options)
# Perform optimization
best_cost, best_pos = optimizer.optimize(fx.sphere, iters=100)

球体优化

这将运行优化器进行100迭代,然后返回 swarm 找到的最佳成本和最佳位置。此外,您还可以通过调用类的属性来访问各种历史记录:

# Obtain the cost history
optimizer.cost_history
# Obtain the position history
optimizer.pos_history
# Obtain the velocity history
optimizer.velocity_history

同时,您还可以获得本地最佳 PSO 实施的平均个人最佳和平均邻居历史。只需分别调用optimizer.mean_pbest_historyoptimizer.mean_neighbor_history

超参数搜索工具

PySwarms 实现了网格搜索和随机搜索技术来为优化器找到最佳参数。设置它们很容易。在这个例子中,让我们尝试使用pyswarms.utils.search.RandomSearch来找到LocalBestPSO优化器的最佳参数。

在这里,我们输入一个包含在元组中的范围,以定义将在其中找到参数的空间。因此,(1,5)属于从 1 到 5 的范围。

import numpy as np
import pyswarms as ps
from pyswarms.utils.search import RandomSearch
from pyswarms.utils.functions import single_obj as fx

# Set-up choices for the parameters
options = {
    'c1': (1,5),
    'c2': (6,10),
    'w': (2,5),
    'k': (11, 15),
    'p': 1
}

# Create a RandomSearch object
# n_selection_iters is the number of iterations to run the searcher
# iters is the number of iterations to run the optimizer
g = RandomSearch(ps.single.LocalBestPSO, n_particles=40,
            dimensions=20, options=options, objective_func=fx.sphere,
            iters=10, n_selection_iters=100)

best_score, best_options = g.search()

然后返回优化期间找到的最佳分数,以及启用它的超参数选项。

>>> best_score
1.41978545901
>>> best_options['c1']
1.543556887693
>>> best_options['c2']
9.504769054771

群体可视化

为了格式化,也可以绘制优化器性能。绘图仪模块建立在 . 之上matplotlib,使其高度可定制。

import pyswarms as ps
from pyswarms.utils.functions import single_obj as fx
from pyswarms.utils.plotters import plot_cost_history, plot_contour, plot_surface
import matplotlib.pyplot as plt
# Set-up optimizer
options = {'c1':0.5, 'c2':0.3, 'w':0.9}
optimizer = ps.single.GlobalBestPSO(n_particles=50, dimensions=2, options=options)
optimizer.optimize(fx.sphere, iters=100)
# Plot the cost
plot_cost_history(optimizer.cost_history)
plt.show()

成本历史

我们还可以绘制动画...

from pyswarms.utils.plotters.formatters import Mesher, Designer
# Plot the sphere function's mesh for better plots
m = Mesher(func=fx.sphere,
           limits=[(-1,1), (-1,1)])
# Adjust figure limits
d = Designer(limits=[(-1,1), (-1,1), (-0.1,1)],
             label=['x-axis', 'y-axis', 'z-axis'])

在二维中,

plot_contour(pos_history=optimizer.pos_history, mesher=m, designer=d, mark=(0,0))

轮廓

或者在 3D 中!

pos_history_3d = m.compute_history_3d(optimizer.pos_history) # preprocessing
animation3d = plot_surface(pos_history=pos_history_3d,
                           mesher=m, designer=d,
                           mark=(0,0,0))    

表面

贡献

PySwarms 目前由一个小而专注的团队维护:

如果您能提供以下帮助,我们将不胜感激:

  • 发现错误并修复它们
  • 更新文档字符串中的文档
  • 为我们的集合实施新的优化器
  • 使效用函数更健壮。

我们还要感谢我们所有的贡献者,过去和现在,使这个项目成功!

如果您想投稿,请查看我们的投稿指南此外,您还可以在我们的问题页面中查看需要帮助的功能列表 。

最重要的是,欢迎首次投稿者加入!我尽我所能帮助你开始并让你提出你的第一个 Pull Request!让我们互相学习!

学分

该项目的灵感来自pyswarm模块,该模块在受限支持下执行 PSO。该包是使用Cookiecutteraudreyr/cookiecutter-pypackage项目模板创建的。

引用我们

您是否在项目或研究中使用 PySwarms?请引用我们!

@article{pyswarmsJOSS2018,
    author  = {Lester James V. Miranda},
    title   = "{P}y{S}warms, a research-toolkit for {P}article {S}warm {O}ptimization in {P}ython",
    journal = {Journal of Open Source Software},
    year    = {2018},
    volume  = {3},
    issue   = {21},
    doi     = {10.21105/joss.00433},
    url     = {https://doi.org/10.21105/joss.00433}
}

引用 PySwarms 的项目

不在名单上?在问题跟踪器中 ping 我们!

  • 古西斯,乔治斯。代尔夫特理工大学 TI3110TU 课程算法和数据结构的讲义。2018 年 5 月 22 日访问。http: //gousios.org/courses/algo-ds/book/string-distance.html#sop-example-using-pyswarms
  • Nandy、Abhishek 和 Manisha Biswas.,“将 Python 应用于强化学习”。强化学习。Apress,加利福尼亚州伯克利,2018. 89-128。
  • Benedetti、Marcello 等人,“用于基准测试和训练浅量子电路的生成建模方法”。arXiv 预印本 arXiv:1801.07686 (2018)。
  • Vrbančič 等人,“NiaPy:用于构建自然启发算法的 Python 微框架”。开源软件杂志, 3(23), 613, https://doi.org/10.21105/joss.00613
  • Häse、弗洛里安等人。“Phoenics:化学的贝叶斯优化器。” ACS中央科学。4.9(2018):1134-1145。
  • 辛凯维奇,帕维尔。“PSO 和 CMA-ES 算法在黑盒优化基准上的比较研究。” 电信与信息技术杂志4 (2018): 5.
  • 米斯特里、米滕等人。“嵌入梯度提升树的混合整数凸非线性优化。” 伦敦帝国理工学院(2018 年)。
  • Vishwakarma,高拉夫。机器学习模型选择用于预测高折射率聚合物论文的性质。纽约州立大学布法罗分校,2018 年。
  • 乌鲁图尔克·伊斯梅尔等人。“空中无线网络中接入点的高效 3D 放置。” 2019 第 16 届 IEEE 年度消费者通信和网络会议 (CCNC) IEEE (2019):1-7。
  • 唐尼 A.、泰森 C. 等人。“用于结构控制的基于凸轮的被动可变摩擦装置。” 工程结构爱思唯尔(2019):430-439。
  • Thaler S.、Paehler L.、Adams、NA “截断错误的稀疏识别”。爱思唯尔计算物理杂志(2019):第一卷。397
  • Lin, YH, He, D., Wang, Y. Lee, LJ “最后一英里交付:多项 Logit 选择模型下的最佳储物柜位置” https://arxiv.org/abs/2002.10153
  • Park J.、Kim S.、Lee、J.“自由形式等离子体波导中终极光捕获的补充材料”KAIST、剑桥大学和康奈尔大学http://www.jlab.or.kr/documents/publications /2019PRApplied_SI.pdf
  • Pasha A.,Latha PH,“帕金森病分类的仿生降维”,健康信息科学与系统,施普林格 (2020)。
  • Carmichael Z.、Syed、H. 等人。“用于多尺度时空时间序列预测的广泛和深度回波状态网络分析” ,第七届年度神经启发计算元素ACM 会议记录(2019 年),nb。7:1-10 https://doi.org/10.1145/3320288.3320303
  • Klonowski, J. “优化航空电子全双工交换以太网中虚拟链路分配的消息” Proquest
  • 海达尔,A.,扬,ZM。“进化的一维深度卷积神经网络:基于 Swarm 的方法”,IEEE 进化计算大会(2019 年)https://doi.org/10.1109/CEC.2019.8790036
  • Shang, Z. “OpenFlow 网络中控制平面的性能评估”,柏林自由大学(2020 年)
  • Linker, F. “模糊粒子群强化学习的工业基准”,列兹皮克大学(2020 年)
  • 维特,A. Yan,C. 等人。“基于计算规则的方法,用于掩模对准器光刻中非曼哈顿几何形状的角校正,”光学(2019 年)。卷。27,第 22 期:32523-32535 https://doi.org/10.1364/OE.27.032523
  • Wang, Q., Megherbi, N., Breckon TP,“在 3D X 射线计算机断层扫描体积内合理的线程图像投影 (TIP) 的参考架构” https://arxiv.org/abs/2001.05459
  • 门克、蒂姆、哈斯、弗洛里安等人。“超导电路的自动发现及其在 4 局部耦合器设计中的应用”,arxiv 预印本:https ://arxiv.org/abs/1912.03322

其他

喜欢它?爱它?在Github上给我们一个 star以表达您的感激之情!

贡献者

感谢这些了不起的人(表情符号键):


亚伦