【一个蒟蒻的挣扎】粒子群算法学习笔记

粒子群算法学习笔记

 

粒子群算法的起源与定义

粒子群优化算法(PSO)是一种进化计算技术(evolutionary computation),1995 年由Eberhart 博士和kennedy 博士提出,源于对鸟群捕食的行为研究 。该算法最初是受到飞鸟集群活动的规律性启发,进而利用群体智能建立的一个简化模型。粒子群算法在对动物集群活动行为观察基础上,利用群体中的个体对信息的共享使整个群体的运动在问题求解空间中产生从无序到有序的演化过程,从而获得最优解。

 

粒子群算法,也称粒子群优化算法或鸟群觅食算法(Particle Swarm Optimization),缩写为 PSO, 是近年来由J. Kennedy和R. C. Eberhart等开发的一种新的进化算法(Evolutionary Algorithm - EA)。PSO 算法属于进化算法的一种,从随机解出发,通过迭代寻找最优解,通过适应度来评价解的品质,通过追随当前搜索到的最优值来寻找全局最优。这种算法以其实现容易、精度高、收敛快等优点引起了学术界的重视,并且在解决实际问题中展示了其优越性。粒子群算法是一种并行算法。

 

个人理解

假设有一个飞鸟群,需要寻找最佳觅食区域。每一只飞鸟都是独立的个体,受自身经验的限制(局部最优)和周围人经历的限制(全局最优)的影响。每一只飞鸟需要做出决策——去离最佳觅食区域最近的地方,飞鸟群也需要前往最佳觅食区域。在觅食过程中每只鸟初始位置随机,飞行方向随机。经过时间推移经验累积,鸟类通过族群内相互学习,共享觅食信息进而做出更优决策,距离最佳觅食区域更近。基于此种搜索方式,科学家提出了粒子群算法。

 

虽然不太能理解如何观察出飞鸟可以通过组群内学习获知全局最优解,但是是可以从现实生活经验中推知理解的,。每只鸟抽象成一个粒子,每个粒子拥有自身的“局部最优”和粒子群的“全局最优”,飞鸟会根据这两个最优解改变飞行方向,最后整个集群大致向一个方向聚集,即离食物最近的区域。以此现象进行抽象模拟,就是PSO算法,搜索最优决策。

 

(感谢仿生!这个好理解好多!)

 

基本概念

每只鸟在某处位置能够找到食物的可能可以通过适应值来刻画

 

鸟群中的每一个个体都可以当做一个粒子,鸟群即可被看做粒子群。假设一个有M个粒子的粒子群在一个N维空间内寻找最优位置,那么可以对每个粒子赋予一个“位置”和一个“速度”

 

 

 

 

对于每一个粒子而言,该位置即为问题的一个潜在解

 

判断每一个位置“找到食物”即达到最优解的可能性可以通过将Xi代入目标函数计算其适应值,根据适应值大小来衡量其优劣。在每一次的搜寻过程中,记录每个粒子的最优位置(即局部最优解):

pbest_i

在本次觅食搜寻过程中,所有粒子最优位置的最优解即可当做整个粒子群的最佳觅食位置:

(gbest_i)

 

反复进行迭代直至搜索到全局最优解。每一次位置的寻找之后,应该对粒子的速度和所在位置进行更新,粒子的速度及位置更新的方式如下:

 

 

【记忆项】,表示上次速度大小和方向的影响;

【自身认知项】,是从当前点指向粒子自身最好点的一个矢量,表示粒子的动作来源于自己经验的部分;

【群体认知项】,是一个从当前点指向种群最好点的矢量,反映了粒子间的协同合作和知识共享。粒子就是通过自己的经验和同伴中最好的经验来决定下一步的运动。

 

公式2/3被视为标准pso算法

Pso算法流程

1)初始化一群微粒(群体规模为N),包括随机位置和速度;

2)评价每个微粒的适应度;

3)对每个微粒,将其适应值与其经过的最好位置pbest作比较,如果较好,则将其作为当前的最好位置pbest;

4)对每个微粒,将其适应值与其经过的最好位置gbest作比较,如果较好,则将其作为当前的最好位置gbest;

5)根据公式(2)、(3)调整微粒速度和位置;

6)未达到结束条件则转第2)步。

迭代终止条件根据具体问题一般选为最大迭代次数Gk或(和)微粒群迄今为止搜索到的最优位置满足预定最小适应阈值。

学习因子c1c2分析

C1=0时,则粒子没有了认知能力,变为只有社会的模型(social-only):

称为全局PSO算法。粒子有扩展搜索空间的能力,具有较快的收敛速度,但由于缺少局部搜索,对于复杂问题比标准PSO 更易陷入局部最优。

 

C2=0时,则粒子之间没有社会信息,模型变为只有认知(cognition-only)模型:

称为局部PSO算法。由于个体之间没有信息的交流,整个群体相当于多个粒子进行盲目的随机搜索,收敛速度慢,因而得到最优解的可能性小。

 

代码实现(暂略)

 

总结

一个很好理解的随机搜索算法(不知道是不是因为搜索所以好理解哇)总之根据以上分析,从自然界现象抽象出算法,再通过前人总结好的公式进行搜索即可。原理很简单,公式很好理解,是个学完很开心记得也很快的好算法。

 

参考资料

粒子群(PSO)算法概念及代码实现 - 知乎 (zhihu.com)

【算法】粒子群算法Particle Swarm Optimization超详细解析+代码实例讲解 - 腾讯云开发者社区-腾讯云 (tencent.com)

posted @ 2023-02-21 19:21  莳萝萝  阅读(126)  评论(0编辑  收藏  举报