粒子群优化算法(Particle Swarm Optimization) 一个参考 https://github.com/huayaow/DPSO
粒子群算法适用于解决什么问题的?#
粒子群优化(PSO)算法的根本目的是:在复杂搜索空间中高效寻找全局最优解
与传统方法的区别:
- 无需梯度:不依赖目标函数导数信息
- 全局搜索:避免陷入全局最优
- 通用性强:对函数形态(连续、离散、噪声)要求低
| 问题特征 | 传统方法困境 | PSO应对策略 |
|---|---|---|
| 非线性 | 牛顿法等失效 | 基于种群搜索 |
| 不可导 | 梯度法无法使用 | 仅需函数值评估 |
| 多峰函数 | 易陷入局部最优 | 群体协作探索 |
| 高维灾难 | 网格搜索指数爆炸 | 智能启发式导航 |
| 计算昂贵 | 每次评估成本高 | 并行评估,快速收敛 |
核心优势:在可接受时间内找到足够好的解,而非理论精确最优解
粒子群算法的思想源于对鸟群觅食行为的研究,鸟群通过集体的信息共享使群体找到最优的目的地。
- 群体行为:鸟群在寻找食物时,每只鸟并非独立行动,而是通过信息共享协同搜索
- 简单规则:每只鸟跟随当前离食物最近的鸟飞行,同时结合自身飞行经验
- 涌现智能:个体简单行为在群体中涌现出高效的寻优能力;
- 算法的思想将社会行为学和计算智能相结合,开创了群体智能优化新范式。
PSO算法#
具体算法参考 https://zhuanlan.zhihu.com/p/564819718
PSO算法就是将让一群粒子在一个时间段内在优化问题的搜索空间中进行移动,每个粒子都代表一个可行解,通过粒子的运动搜索到最优解。每个粒子的运动与鸟类捕食具有相似特性,通过简单的运动找到复杂问题的可行解。
为了建模这个问题,每个粒子具有一个位置向量,一个速度向量,同时保留自己搜索到的最优位置和粒子群找到的最优位置全局极值。
在每一个时刻,粒子会根据原始值(惯性),自己的最优记录(认知)以及群体历史最佳记录(社会)更改自己的速度。然后根据新的速度修改自己的位置。
DPSO算法#
连续PSO要求位置是连续实数,但是在许多实际问题例如:二进制0-1问题,整数问题,排列问题等。对于这一类问题,二进制DPSO就是将位置映射成{0,1},而速度不是位移,而是每一位取1的概率。而整数的话就是映射到整数空间里。
问题#
- 这种算法的效果很大程度上依赖于群体的大小,如果群体较小,很容易陷入局部最优解
- 另外还要求固定搜索空间。为什么?因为PSO的速度更新方程本质上是一个二阶差分动力系统,如果没有边界约束,粒子一旦飞离优质区域,梯度会指数级增大,导致速度爆炸。系统发散。
结论#
这种算法的本质是在一个搜索空间内,让一群探索者按照一定规则进行游走,从而在规定时间内找到一个近似最优解。这里的一定规则包括了惯性记忆,自我经验和社会协作。不管是什么样的搜索空间,我都可以通过定义好位置,速度,然后让粒子根据包含了惯性记忆,自我经验以及社会协作的规则进行游走即可。这样就定义出来了一个搜索空间当中的PSO算法。这就是PSO的通用框架:状态(位置+速度)+ 三要素规则 + 迭代游走 = 优化算法
关于优化算法,似乎需要一个总结。有时间了需要整理一下。