基于 Python 的粒子群优化 (PSO) 库。
项目描述
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_history
和optimizer.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 目前由一个小而专注的团队维护:
- 莱斯特詹姆斯诉米兰达 ( @ljvmiranda921 )
- Siobhán K. Cronin ( @SioKCronin )
- 亚伦莫泽(@whzup)
- 史蒂文·比尔德威尔 ( @stevenbw )
如果您能提供以下帮助,我们将不胜感激:
- 发现错误并修复它们
- 更新文档字符串中的文档
- 为我们的集合实施新的优化器
- 使效用函数更健壮。
我们还要感谢我们所有的贡献者,过去和现在,使这个项目成功!
如果您想投稿,请查看我们的投稿指南。此外,您还可以在我们的问题页面中查看需要帮助的功能列表 。
最重要的是,欢迎首次投稿者加入!我尽我所能帮助你开始并让你提出你的第一个 Pull Request!让我们互相学习!
学分
该项目的灵感来自pyswarm模块,该模块在受限支持下执行 PSO。该包是使用Cookiecutter和
audreyr/cookiecutter-pypackage
项目模板创建的。
引用我们
您是否在项目或研究中使用 PySwarms?请引用我们!
- 米兰达 LJ,(2018 年)。PySwarms:Python 中粒子群优化的研究工具包。开源软件杂志, 3(21), 433, https://doi.org/10.21105/joss.00433
@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以表达您的感激之情!
贡献者
感谢这些了不起的人(表情符号键):
亚伦 |