特点
粒子群算法具有收敛速度快、参数少、算法简单易实现的优点(对高维度优化问题,比遗传算法更快收敛于最优解),但是也存在容易陷入局部最优解的问题,因此依赖于良好的初始化。
基本思想
每个粒子都尽自己所能找到自己认为最优的解,即局部最优解,并进行标记其位置,同时每个粒子共享自己局部最优解的值和位置。然后再下一轮寻找过程中,每个粒子都会根据自己记忆中最优解和整个粒子群最优解调整接下来的搜索方向。这样经过一段时间的搜索粒子群就可以找到全局最优解(示意图如图1所示)。
![](https://i-blog.csdnimg.cn/direct/8a1cd088a6bb4692876d80251a4461cb.png)
算法
![](https://i-blog.csdnimg.cn/direct/8872096c040c417f92fa42c88624564c.png)
注:初始化种群既包含可变部分,也包含不可变部分,这一点和遗传算法的初始化种群相似(如图3所示)。
![](https://i-blog.csdnimg.cn/direct/002e267cda51476c9c6fdf1e27751805.png)
PSO伪代码
1、选择初始化权重,粒子数量,最大迭代次数
2、初始化种群
3、 创建种子向量作为粒子
4、 随机化产生剩余的粒子
5、 随机化长生初始化速度
6、while (迭代次数 < 最大迭代次数 && 改善值 > 最小改善值)do
7、 计算每个粒子的适应度
8、 更新全局最好适应度和每个粒子的最好适应度
9、 for 每个粒子 do
10、 计算位置与粒子最佳适应度的距离
11、 计算位置与全局最佳适应度的距离
12、 更新粒子速度
13、 更新粒子位置
14、输出全局最佳适应位置
速度更新公式
实际上就是粒子下一步迭代移动的距离和方向,即动量。
![](https://i-blog.csdnimg.cn/direct/763920d805874aa3afd6703f946fa886.png)
惯性部分:由惯性权重和粒子自身速度
构成,表示粒子对先前自身运动状态的信任。
认知部分:表示粒子本身的思考,即粒子自己经验的部分,可理解为粒子当前位置与自身历史最优位置
之间的距离和方向。
社会部分:表示粒子之间的信息共享与合作,即来源于群体中其他优秀粒子的经验,可理解为粒子当前位置与群体历史最优位置
之间的距离和方向。
其中标识个体学习因子,
表示群体学习因子;
,
是位于 [0, 1] 内的随机数,增加搜索的随机性。
粒子下一步迭代的移动方向 = 惯性方向 + 个体最优方向 + 群体最优方向(如图4所示)
![](https://i-blog.csdnimg.cn/direct/e67f7e25512744e198b45c1c4dc47601.png)
位置更新公式
位置更新公式 = 上一步的位置 + 下一步的速度:
参考:
粒子群优化算法(Particle Swarm Optimization, PSO)的详细解读 - 知乎 (zhihu.com)