[算法笔记]粒子群优化(PSO)

B站视频讲解

算法背景

该算法最初是受到飞鸟集群活动的规律性启发,进而利用群体智能建立的一个简化模型。粒子群算法在对动物集群活动行为观察基础上,利用群体中的个体对信息的共享使整 个群体的运动在问题求解空间中产生从无序到有序的演化过程,从而获得最优解。

基础知识


问:已知A为全局最优,B和C如何移动才能到达A处?这个过程如何用数学表达式描述?

  • 某个粒子(点)的移动,是有大小,有方向的。有大小,有方向的东西叫向量。位置就是坐标。
  • 数学的方法:$(1,1)=(2,3)+\alpha \to \alpha = (1,1)-(2,3)=(-1,-2).$
  • 如果A点不一定是个全局最优点,C点在移动到A点的过程中,想要继续探索,可以给其移动的向量加上一个随机值:$(x,y)=(2,3)+rand * (-1,-2).$

算法原理

  • 假设在一个D维的目标搜索空间中,有N个粒子组成一个群落,其中第i个粒子表示为一个D维的向量:

    Xi=(xi1,xi2,...,xiD),i=1,2,...,N
  • 第i个粒子的“飞行”速度也是一个D维的向量,记为:

    Vi=(vi1,vi2,...,viD),i=1,2,...,N
  • 在第t代的第i个粒子向第t+1代进化时,根据如下式子更新:

    vij(t+1)=wvij(t)+c1r1(t)[pij(t)xij(t)]+c2r2(t)[pgj(t)xij(t)]xij(t+1)=xij(t)+vij(t+1)

下一时刻的速度=当前的惯性+个体极值的方向+全局最值的方向

$v_{i j}(t)$代表t时刻粒子的方向,$p_{i j}(t)$代表粒子个体极值的方向, $p_{g j}(t)$代表全局最值。$w,c_1,c_2$代表权重,$r_{1}(t),r_{2}(t)$为随机值。$x_{i j}(t+1)$表示t+1时粒子的位置。

  • eg.
  • 假设某粒子当前位置C,个体极值位置B,全局 最优位置A,那么该粒子下一步的运动状态如图所示。

  • $v_{i j}(t+1)=w v_{i j}(t)+c_{1} r_{1}(t)\left[p_{i j}(t)-x_{i j}(t)\right]+c_{2} r_{2}(t)\left[p_{g j}(t)-x_{i j}(t)\right].$

  • B对应$p_i$,A对应$p_g$,黄色向量为当前速度方向,绿色向量为向个体极值飞行步长,红色为向全局最值飞行步长。

算法流程

  • 输入:参数$\omega:0.5-0.8,c_1,c_2:0.1-2,v_{max},xß_{max}:$取决于优化函数。
  • step1:初始化种群$x$;
  • step2:计算个体适应度*;
  • step3:更新粒子速度−>更新粒子位置*;
  • step4:并计算新位置的适应度,若新位置适应度更高,则将该粒子的位置进行更新,否则不更新。
  • step5:判断是否满足终止条件* ,是则退出,否则返回Step2。
  • 输出:输出最优值。
  • 注:
  • *1.一般的,我们优化目标是最小化一个函数值。所以个体计算出的函数值越小,适应度越高。
    1. max𝑓 = min−𝑓
  • *2.注意更新速度后,先进行速度边界检测,一般采用$v(v>v_{max}) = v_{max}$ ,位置同理。
  • *3.常见终止条件为设定迭代进化次数、适应度n代不再变化等。

算法分析

  • 优点:原理比较简单,实现容易,参数少。
  • 缺点:易早熟收敛至局部最优、迭代后期收敛速度慢的。

分析:标准粒子群算法的参数是固定的。𝜔描述的是粒子的“惯性”,在进化前期𝜔应该大一些,保证各个粒子独立飞行充分搜索空间,后期应该小一点,多向其他粒子学习。$c_1,c_2$分别向个体极值和全局 极值最大飞行步长。前期$c_1$应该大一些,后期$c_2$应该大一些,这样就能平衡粒子的全局搜索能力和局部搜 索能力。3个参数共同影响了粒子的飞行方向,导致即使其他粒子找到更好的,但是当前粒子惯性太大,不能很快的飞向更优的位置。

算法拓展

针对标准PSO的缺点,通常有如下的改进:

  • 1.实现参数的自适应变化。
  • 2.引入一些其他机制,比如随机的因素,速度、位置的边界变化−后期压缩最大速度等。
  • 3.结合其他智能优化算法:遗传算法、免疫算法、模拟退火算法等等,帮助粒子跳出局部最优,改善 收敛速度。