pyswarms

GitHub
1.4k 339 非常简单 1 次阅读 昨天MIT开发框架Agent
AI 解读 由 AI 自动生成,仅供参考

pyswarms 是一个专为 Python 打造的粒子群优化(PSO)研究工具包,旨在帮助用户轻松解决复杂的非线性优化问题。它通过模拟鸟群或鱼群的集体智慧行为,自动寻找函数的全局最优解,特别适用于传统数学方法难以处理的场景。

这款工具非常适合科研人员、工程师以及学习 swarm intelligence(群体智能)的学生使用。对于希望快速验证算法的研究者,pyswarms 提供了声明式的高级接口,无需编写底层代码即可调用多种 PSO 变体;对于开发者,其高度可扩展的 API 允许自定义优化策略和目标函数。

pyswarms 的技术亮点在于其“开箱即用”的生态设计:内置了多种标准测试函数供算法评估,集成了可视化工具以直观展示成本历史和粒子运动轨迹,并提供了超参数搜索功能来辅助调整群体行为。尽管目前作者已转向其他研究方向并推荐替代方案如 scikit-opt,但 pyswarms 凭借其清晰的架构和丰富的文档,依然是理解和学习粒子群算法的优质入门资源。用户只需几行代码即可完成从参数设置到优化执行的全过程,让复杂的优化任务变得简单高效。

使用场景

某无人机编队控制算法工程师正在调试多旋翼无人机的飞行路径规划,需要在复杂风场环境下快速找到能耗最低且避障安全的飞行参数组合。

没有 pyswarms 时

  • 工程师需从零手写粒子群优化(PSO)的核心迭代逻辑,包括速度更新、位置边界处理及全局最优值追踪,代码量大且极易引入隐蔽的数学错误。
  • 缺乏内置的标准测试函数(如 Sphere、Rastrigin),难以在真实部署前验证算法收敛性,导致调试周期被迫拉长。
  • 无法直观观测粒子群的动态演化过程,只能依靠打印枯燥的数值日志来猜测参数设置是否合理,调参如同“盲人摸象”。
  • 每次尝试新的变体策略(如改变惯性权重策略)都需要重构大量底层代码,严重阻碍了科研实验的快速迭代。

使用 pyswarms 后

  • 直接调用 GlobalBestPSO 等高级接口,仅需三行代码即可实例化优化器并执行搜索,将核心精力聚焦于业务目标函数而非底层算法实现。
  • 利用库中预置的单目标与多目标测试函数集,瞬间完成算法基准测试,确保在投入实际风场数据前逻辑无误。
  • 借助内置的可视化模块,实时生成成本历史曲线和粒子运动轨迹图,直观判断收敛趋势并精准调整超参数。
  • 基于其高扩展性 API,轻松自定义特殊的粒子行为或混合策略,无需改动框架源码即可高效开展对比实验。

pyswarms 将复杂的群体智能算法封装为声明式接口,让工程师从繁琐的底层造轮子中解放出来,实现了从“写算法”到“用算法解决难题”的效率飞跃。

运行环境要求

操作系统
  • Linux
  • macOS
  • Windows
GPU

未说明

内存

未说明

依赖
notes该工具主要用于粒子群优化算法研究,不依赖 GPU 加速。作者声明不再积极维护此仓库,建议用户考虑使用 scikit-opt 作为替代方案。支持通过 Vagrant 构建虚拟开发环境。
python3.5+
numpy
matplotlib
pyswarms hero image

快速开始

PySwarms Logo

PyPI version Build Status Documentation Status License: MIT DOI Code style: black Gitter Chat

注意:我目前已不再积极维护此仓库。过去几年我的研究兴趣发生了变化。 我强烈推荐大家使用 scikit-opt,它提供了包括PSO在内的多种元启发式优化方法。

PySwarms 是一个用 Python 实现的、可扩展的粒子群优化(PSO)研究工具包。

它面向群体智能领域的研究人员、从业者以及学生,为他们提供了一个高层次的声明式接口,以便在各自的问题中轻松实现 PSO。PySwarms 不仅支持基本的 PSO 优化,还允许用户与群体优化过程进行交互。更多功能请见下文!

功能特性

  • 高层次的粒子群优化模块。有关所有优化器的列表,请参阅 [此链接]。
  • 内置目标函数,可用于测试优化算法。
  • 用于绘制代价历史和粒子运动轨迹的绘图环境。
  • 超参数搜索工具,帮助优化群体行为。
  • (面向开发者和研究人员):高度可扩展的 API,方便实现自定义技术。

安装

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

$ pip install pyswarms

这是推荐的安装方式,因为它会始终安装最新的稳定版本。

如果您想安装开发中的最新版本,可以克隆此仓库:

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

然后执行:

$ cd pyswarms
$ python setup.py install

在 Fedora 系统上安装 PySwarms 的命令如下:

$ dnf install python3-pyswarms

在 Vagrant 虚拟机中运行

要在 Vagrant 虚拟机中运行 PySwarms,首先访问 https://www.vagrantup.com/downloads.html 下载 Hashicorp 官网提供的合适安装包来安装 Vagrant。

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

$ vagrant provision
$ vagrant up
$ vagrant ssh

现在您就可以在一个预配置的虚拟环境中开始贡献代码了。

基本用法

PySwarms 提供了多种粒子群优化算法的高层实现,旨在让用户友好且易于定制。此外,配套模块也能帮助您解决优化问题。

优化球形函数

您可以像导入其他 Python 模块一样导入 PySwarms:

import pyswarms as ps

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

import pyswarms as ps
from pyswarms.utils.functions import single_obj as fx
# 设置超参数
options = {'c1': 0.5, 'c2': 0.3, 'w':0.9}
# 创建 PSO 实例
optimizer = ps.single.GlobalBestPSO(n_particles=10, dimensions=2, options=options)
# 执行优化
best_cost, best_pos = optimizer.optimize(fx.sphere, iters=100)

球形函数优化

这段代码将运行优化器 100 次迭代,最终返回群体找到的最优代价和最优位置。此外,您还可以通过调用类的属性来获取各种历史数据:

# 获取代价历史
optimizer.cost_history
# 获取位置历史
optimizer.pos_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

# 设置参数选择范围
options = {
    'c1': (1,5),
    'c2': (6,10),
    'w': (2,5),
    'k': (11, 15),
    'p': 1
}

# 创建随机搜索对象
# n_selection_iters 是搜索器运行的迭代次数
# iters 是优化器运行的迭代次数
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
# 设置优化器
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_cost_history(optimizer.cost_history)
plt.show()

代价历史

我们还可以绘制动画……

from pyswarms.utils.plotters.formatters import Mesher, Designer
# 为更好地绘图,先绘制球形函数的网格
m = Mesher(func=fx.sphere,
           limits=[(-1,1), (-1,1)])

# 调整图形范围
d = Designer(limits=[(-1,1), (-1,1), (-0.1,1)],
             label=['x轴', 'y轴', 'z轴'])

在二维中,

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

等高线

或者在三维中!

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

曲面

贡献说明

PySwarms 目前由一支虽小但充满热情的团队维护:

我们非常欢迎你的参与,具体可以从以下几个方面入手:

  • 发现并修复 bug
  • 更新 docstring 中的文档
  • 将新的优化算法加入我们的库中
  • 使工具函数更加健壮。

同时,我们也感谢所有贡献者,无论过去还是现在,正是你们的努力让这个项目得以成功!

如果你想参与贡献,请查看我们的贡献指南。此外,你也可以在我们的Issues页面上找到需要帮助的功能列表。

最重要的是,欢迎首次贡献的开发者加入!我会尽力帮助你入门,并协助你提交第一份 Pull Request!让我们一起学习、共同进步吧!

致谢

本项目受到 pyswarm 模块的启发,该模块实现了具有约束支持的 PSO 算法。该项目使用 Cookiecutteraudreyr/cookiecutter-pypackage 项目模板创建。

引用我们

你在项目或研究中使用了 PySwarms 吗?请引用我们!

  • Miranda L.J., (2018). PySwarms: a research toolkit for Particle Swarm Optimization in Python. Journal of Open Source Software, 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 的项目

不在列表中?请在 Issue Tracker 中告诉我们!

  • Gousios, Georgios. 德尔夫特理工大学 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, Florian 等人,“Phoenics:一种用于化学领域的贝叶斯优化器”。《ACS Central Science》4.9期(2018年),第1134–1145页。
  • Szynkiewicz, Pawel,“PSO 与 CMA-ES 算法在黑盒优化基准上的比较研究”。《电信与信息技术杂志》4期(2018年),第5页。
  • Mistry, Miten 等人,“嵌入梯度提升树的混合整数凸非线性优化”。伦敦帝国理工学院(2018年)。
  • Vishwakarma, Gaurav,《用于预测高折射率聚合物性能的机器学习模型选择》论文。纽约州立大学布法罗分校,2018年。
  • Uluturk Ismail 等人,“空中无线网络中接入点的高效三维布局”。《2019年第16届 IEEE 消费者通信与网络大会》IEEE(2019年),第1–7页。
  • Downey A.、Theisen C. 等人,“基于摄像头的被动可变摩擦装置用于结构控制”。《工程结构》Elsevier 出版社(2019年),第430–439页。
  • Thaler S.、Paehler L.、Adams, N.A. “稀疏识别截断误差”。《计算物理杂志》Elsevier 出版社(2019年),第397卷。
  • Lin, Y.H.、He, D.、Wang, Y.、Lee, L.J. “最后一公里配送:基于多项逻辑选择模型的最佳储物柜位置” 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 P.H.,“受生物启发的降维技术用于帕金森病分类”,《健康信息科学与系统》Springer 出版社(2020年)。
  • Carmichael Z.、Syed, H. 等人,“宽深回声状态网络在多尺度时空序列预测中的分析”,《第七届年度神经启发式计算元件会议》ACM 出版社(2019年),第7号文件,第1–10页 https://doi.org/10.1145/3320288.3320303。
  • Klonowski, J. “航空电子全双工交换以太网中消息到虚拟链路分配的优化” Proquest。
  • Haidar, A.、Jan, ZM. “一维深度卷积神经网络的进化:基于群体智能的方法”,《IEEE 进化计算大会》(2019年)https://doi.org/10.1109/CEC.2019.8790036。
  • Shang, Z. “OpenFlow 网络控制平面的性能评估”,柏林自由大学(2020年)。
  • Linker, F. “模糊粒子群强化学习的工业级基准”,Liezpic 大学(2020年)。
  • Vetter, A.、Yan, C. 等人,“基于规则的计算方法用于掩模对准光刻中非曼哈顿几何形状的角部修正”,Optics 出版社(2019年)。第27卷第22期,第32523–32535页 https://doi.org/10.1364/OE.27.032523。
  • Wang, Q.、Megherbi, N.、Breckon T.P.,“3D X 射线计算机断层扫描体积内可信线程图像投影(TIP)的参考架构” https://arxiv.org/abs/2001.05459。
  • Menke, Tim、Hase, Florian 等人,“超导电路的自动化发现及其在4节点耦合器设计中的应用”,预印本:https://arxiv.org/abs/1912.03322。

其他

喜欢它吗?热爱它吗?在 Github 上给我们点个赞,表达你的支持吧!

贡献者

感谢这些了不起的人(emoji key):


Aaron

🚧 💻 📖 ⚠️ 🤔 👀

Carl-K

💻 ⚠️

Siobhán K Cronin

💻 🚧 🤔

Andrew Jarcho

⚠️ 💻

Mamady

💻

Jay Speidell

💻

Eric

🐛 💻

CPapadim

🐛 💻

JiangHui

💻

Jericho Arcelao

💻

James D. Bohrman

💻

bradahoward

💻

ThomasCES

💻

Daniel Correia

🐛 💻

fluencer

💡 📖

miguelcocruz

📖 💡

Steven Beardwell

💻 🚧 📖 🤔

Nathaniel Ngo

📖

Aneal Sharma

📖

Chris McClure

📖 💡

Christopher Angell

📖

Kutim

🐛

Jake Souter

🐛 💻

Ian Zhang

📖 💡

Zach

📖

Michel Lavoie

🐛

ewekam

📖

Ivyna Santino

📖 💡

Muhammad Yasirroni

📖

Christian Kastner

📖 📦

Nishant Rodrigues

💻

msat59

💻 🐛

Diego

📖

Shaad Alaka

📖

Krzysztof Błażewicz

🐛

Jorge Castillo

📖

Philipp Danner

💻

Nikhil Sethi

💻 📖

firefly-cpp

📖

本项目遵循 all-contributors 规范。欢迎任何形式的贡献!

版本历史

v.1.2.02020/11/14
v.1.1.02019/05/18
v.1.0.22019/02/18
v.1.0.12019/02/14
v.1.0.02019/02/09
v.0.4.02019/01/29
v.0.3.12018/08/13
v.0.1.52017/08/11
v.0.3.02018/08/10
v.0.2.12018/06/27
v.0.2.02018/06/11
v.0.1.92018/04/20
v.0.1.82018/01/10
v.0.1.72017/09/25
v.0.1.62017/09/24

常见问题

相似工具推荐

openclaw

OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你

349.3k|★★★☆☆|2天前
Agent开发框架图像

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|3天前
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

145.9k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

108.1k|★★☆☆☆|今天
开发框架图像Agent

markitdown

MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器

93.4k|★★☆☆☆|2天前
插件开发框架

LLMs-from-scratch

LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目,旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型(LLM)。它不仅是同名技术著作的官方代码库,更提供了一套完整的实践方案,涵盖模型开发、预训练及微调的全过程。 该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型,却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码,用户能够透彻掌握 Transformer 架构、注意力机制等关键原理,从而真正理解大模型是如何“思考”的。此外,项目还包含了加载大型预训练权重进行微调的代码,帮助用户将理论知识延伸至实际应用。 LLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API,而是渴望探究模型构建细节的技术人员而言,这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计:将复杂的系统工程拆解为清晰的步骤,配合详细的图表与示例,让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础,还是为未来研发更大规模的模型做准备

90.1k|★★★☆☆|2天前
语言模型图像Agent