粒子群优化算法

0x00 什么是粒子群优化算法

粒子群优化算法提出与1995年,由Eberhart博士和kennedy博士1提出。该算法来源于受鸟群活动规律启发,通过观察动物活动规律,建立在动物活动信息共享的前提下,将实际求最优解问题转换成粒子群模型求解。

       粒子群优化算法(Particle Swarm optimization,PSO)又翻译为粒子群算法、微粒群算法、或微粒群优化算法。是通过模拟鸟群觅食行为而发展起来的一种基于群体协作的随机搜索算法。通常认为它是群集智能 (Swarm intelligence, SI) 的一种。它可以被纳入多主体优化系统 (Multiagent Optimization System, MAOS). 是由Eberhart博士和kennedy博士发明。
       PSO模拟鸟群的捕食行为。一群鸟在随机搜索食物,在这个区域里只有一块食物。所有的鸟都不知道食物在那里。但是他们知道当前的位置离食物还有多远。那么找到食物的最优策略是什么呢。最简单有效的就是搜寻目前离食物最近的鸟的周围区域。
       PSO从这种模型中得到启示并用于解决优化问题。PSO中,每个优化问题的解都是搜索空间中的一只鸟。我们称之为“粒子”。所有的粒子都有一个由被优化的函数决定的适应值(fitnessvalue),每个粒子还有一个速度决定他们飞翔的方向和距离。然后粒子们就追随当前的最优粒子在解空间中搜索。
       PSO初始化为一群随机粒子(随机解),然后通过叠代找到最优解,在每一次叠代中,粒子通过跟踪两个“极值”来更新自己。第一个就是粒子本身所找到的最优解,这个解叫做个体极值pBest,另一个极值是整个种群目前找到的最优解,这个极值是全局极值gBest。另外也可以不用整个种群而只是用其中一部分最优粒子的邻居,那么在所有邻居中的极值就是局部极值。 —— [ 维基百科 ]


0x01 与其他优化算法对比

       常用的智能算法包括好几种,这里列出我使用过的如下:

  • 遗传算法
  • 退火算法

       对于这些智能优化算法,其相似之处就是他们如何自动的在程序中产生解,然后挑选出最好的解,然后再次使用当前最优解产生新的解,不断的这样直到满足结束条件。

遗传算法

       通过解之间的交叉和变异,一个粗俗的看法就是解即是基因(不然怎么叫遗传算法的),不断通过交叉与变异来产生新的解,然后挑选出优解,然后又将优解通过交叉变异…反复的产生、挑选、再产生,直到遗传的次数达到程序的设定值。

退火算法

       其实使用过该算法后,其实感觉跟火没啥关系。那么退火算法的解是如何产生的呢?(挑选过程,各算法都一样)
       将挑选出的解向量交换两个元素,这属于交叉,是否交叉有一个概率设定的,还有一种方式叫变异,变异就是改变解向量的其中一个元素,是否变异也有一个概率。

粒子群优化算法

       与前面两种优化算法对比,它们的不同之处就是源源不断的解是如何产生的,在求全局最优解的过程中是如何挑选出中间过程的优解。其本质也就上面两种方法的不同,才导致它们特性各异。

0x02 粒子群优化算法原理

       PSO算法是基于群体的,根据对环境的适应度将群体中的个体移动到好的区域。然而它不对个体使用演化算子,而是将每个个体看作是D维搜索空间中的一个没有体积的微粒,在搜索空间中以一定的速度飞行,这个速度根据它本身的飞行经验和同伴的飞行经验来动态调整2。模型如下:

  • i个粒子表示: Xi X i = (xi1,xi2,...,xiD) ( x i 1 , x i 2 , . . . , x i D )
  • i个粒子经历过的最好位置 pbest p b e s t Pi P i = (pi1,pi2,...,piD) ( p i 1 , p i 2 , . . . , p i D )
  • 在群体所有微粒经历过的最好位置的索引号用符号g表示,即 Pg P g ,也称为 gbest g b e s t 。粒子i的速度用 Vi= V i = (vi1,vi2,...,viD) ( v i 1 , v i 2 , . . . , v i D ) 表示。对每一代,它的第d维(1 ≤ d ≤ D)根据如下方程进行变化:

vid=wvid+c1rand()(pidxid)+c2rand()(pgdxid) v i d = w ∗ v i d + c 1 ∗ r a n d ( ) ∗ ( p i d − x i d ) + c 2 ∗ r a n d ( ) ∗ ( p g d − x i d )

xid=xid+vid x i d = x i d + v i d

       方程一与方程二都只是第d维上的一个运算,对于一个粒子i来说,更新一次需要利用上面两个式子计算出 Xi X i 其中w为惯性权重(inertia weight), c1 c 1 c2 c 2 为加速常数(acceleration constants),rand()和rand()为在[0,1]范围里变化的随机值。其实我们可以从另一个角度看待 Xi X i

       一个粒子,可以在D个方向上运动,该粒子当前坐标为 (xi1,xi2,...,xiD) ( x i 1 , x i 2 , . . . , x i D ) ,为了寻找最优解,该粒子需要运动,其运动的方向和大小就是 (vi1,vi2,...,viD) ( v i 1 , v i 2 , . . . , v i D ) ,而计算该 Vi V i 向量时我们需要知道该粒子历史上最好的位置 Pi P i ,以及当前所有粒子中最优位置 Pg P g

       此外,微粒的速度 Vi V i 被一个最大速度 Vmax V m a x 所限制。如果当前对微粒的加速导致它的在某维的速度 vid v i d 超过该维的最大速度 vmax,d v m a x , d ,则该维的速度被限制为该维最大速度 vmax,d v m a x , d

0x03 参考文献


  1. Kennedy, J.; Eberhart, R. Particle swarm optimization. Neural Networks, 1995. Proceedings.
  2. https://zh.wikipedia.org/wiki/粒子群优化.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值