粒子群算法(PSO) 介绍

算法理解

粒子群算法,又叫鸟群算法,可见是受鸟群捕食行为的启发。它属于遗传算法、群智算法。粒子群算法关注于粒子的两个属性:位置和速度。每个粒子在空间中单独搜寻,它们记得自己找到的过最优解,也知道整个粒子群当前找到的最优解。下一步要去哪,取决于粒子当前的方向、自己找到过的最优解的方向、整个粒子群当前最优解的方向。

Note: 一开始我看到“群智算法”这个概念,以为它是应用于一群机器人的算法。假如只有一个机器人,就没法使用这个算法吗?其实不是。就像小说《龙族》里,凯撒可以通过言灵驱使镰鼬这种生物(类似于蝙蝠),大量的镰鼬在空间里扩散,像一个个小雷达向凯撒回传信息,使他在黑暗的环境中躲开敌人的飞镖、在复杂的地下通道里掌握全局地图。对,机器人并不是一只只镰鼬,而是凯撒。

算法逻辑


Step 1. 初始化规模为N的粒子群,每个粒子的速度和位置随机。

Step 2. 评价每个粒子的适应值。

Step 3. 若某个粒子当前的适应值present比之前记录的该粒子最优解pbest更好,则更新pbest。

Step 4. 若某个粒子当前的适应值present比之前记录的全局最优解gbest更好,则更新gbest。

Step 5. 若gbest符合要求,则结束。若gbest不符合要求,粒子根据如下的公式来更新自己的速度和新的位置

v(k+1)=\omega v(k) + c_1r_1(pbest(k)-present(k)) + c_2r_2(gbest(k)-present(k))

present(k+1) = present(k) + v(k+1)

其中,v(k)是k时刻的速度,present(k)是k时刻的位置,r_1r_2是服从伯努利分布的0或1随机数,\omega是惯性权重因子,c_1c_2称为加速因子或学习因子。

Step 6. 跳转到Step 2。


Note: r_1r_2增加了算法的随机性,避免陷入局部最优解。较大的\omega有利于全局搜索,较小的\omega有利于局部搜索,所以通常将\omega设置为递减函数。c_1c_2意味着该粒子更相信自己找的最优解还是全局当前的最优解。\omega、 c_1c_2的设置相关文章:

https://blog.csdn.net/qq_41053605/article/details/89156125
https://blog.csdn.net/weixin_42212924/article/details/116995287


版权声明:本文为sinat_38182444原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。