欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

【智能优化算法】PSO-粒子群优化算法基本原理

最编程 2024-02-11 17:26:13
...

算法背景

Particle Swarm Optimization:粒子群优化算法,也被称为鸟群觅食算法,属于进化计算技术(evolutionary computation),1995年由Kennedy博士和Eberhart博士提出,源于对鸟群捕食的行为研究。

PSO算法原论文:J. Kennedy and R. Eberhart. Particle swarm optimization. In Proceedings of the IEEE International Conference on Neural Networks, pages 1942–1948, Piscataway, NJ, USA, 1995.

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

基本思想和原理

基本思想

image.png

鸟群觅食行为:假设在一片森林中的多处存在食物,但每处地点食物的多少不同,整个鸟群为了发现这片森林中食物最多的地方,每只鸟都在森林中到处飞行寻找,对于每只鸟来说,每发现一处存在食物的地方都会默默记下来该处食物的多少,因此存在当前已发现的包含最多食物的地方;对于整个鸟群来说,整个鸟群中的鸟类会共享已寻找到的信息,互相交流,综合鸟群中所有鸟的发现地点,共享所有鸟发现地点中包含最多食物的地方。

此外,对于鸟群中的每只鸟而言,其还包括个体行为和社会行为:

  • 个体行为:单只鸟会根据自身搜索情况,向自身已知食物最多的地方移动
  • 社会行为:单只鸟会收到当前群体已知最好地点的影响,向目前群体已知食物最多的地方移动

鸟群觅食行为的抽象化:为了将鸟群觅食行为转化为算法,需要将其中的各个部分进行抽象化

① 求解空间抽象化:不难发现,鸟群所探索的森林就是求解空间,而食物多少则是待优化的目标函数对应的值

  • 整片森林:求解空间
  • 每处地点食物的多少:目标函数值
  • 包含食物最多的地点:全局最优解

② 鸟群信息抽象化:将鸟群抽象为粒子群,将鸟群的各个行为信息也进行抽象化处理

  • 整个鸟群:粒子群
  • 鸟群中的每只鸟:单个粒子
  • 某只鸟所处的位置:某单个粒子的位置,也就是空间中的一个解
  • 整个鸟群中所有鸟共享当前发现的最好地点:全局最优位置
  • 单只鸟自己发现的最好地点:个体最优位置

③ 鸟群移动抽象化:每个粒子的移动受以下三个因素的影响

  • 方向1:单个粒子具备对未知区域的探索能力,倾向于保持上一移动方向进行移动(惯性)
  • 方向2:单个粒子会收到个体行为影响,倾向于向个体最优位置移动
  • 方向3:单个粒子会收到社会行为影响,倾向于向全局最优位置移动

抽象化后,就得到了粒子群优化算法中各个部分的相关信息,而具体的算法实现则是基于上方抽象后得到的信息对鸟群觅食过程的模拟。

重要概念解释

在具体介绍PSO具体逻辑之前,先对该算法中涉及的一些重要参数或概念进行介绍以便于后续原理的讲解。

设在 dd 维求解空间中存在 nn 个粒子,则有:

  • ii 个粒子的位置:Xi=(xi1,xi2,,xid)X_{i} = (x_{i1}, x_{i2}, \cdots, x_{id})
  • ii 个粒子的速度(包括粒子移动的距离和方向):Vi=(vi1,vi2,,vid)V_{i} = (v_{i1}, v_{i2}, \cdots, v_{id})
  • ii 个粒子的个体最优位置:Pi,pbest=(pi1,pi2,,pid)P_{i, pbest} = (p_{i1}, p_{i2}, \cdots, p_{id})
  • 粒子群搜索的全局最优位置:Pgbest=(p1,p2,,pd)P_{gbest} = (p_{1}, p_{2}, \cdots, p_{d})
  • ii 个粒子搜索到的历史最优位置(个体最优位置)的适应值:fpif_{pi}
  • 群体搜索到的最优位置(全局最优位置)对应的适应值:fgf_g

不难理解,在dd维空间中,每个粒子都有 位置 和 速度,其中速度包括粒子移动的距离和方向,用于更新下轮迭代中某粒子的位置;而 适应值(fitness value) 则为目标函数值,用于评价当前位置的好坏程度,我们通常认为适应值越小越好,也就是目标函数的值越小越好,若目标函数为越大越好(如上方举例的食物量),则通常取其负数。

算法原理与流程

算法逻辑

粒子群优化算法的总体逻辑

  • 在求解空间内随机初始化各个粒子的位置XiX_i、个体最优位置Pi,pbestP_{i, pbest}、全局最优位置PgbestP_{gbest}
  • 对于每次迭代:
    • 计算每个粒子的适应度:若某粒子当前的适应度小于 pi,pbestp_{i, pbest} 对应的适应度fpif_{pi},则将当前位置赋值给 pi,pbestp_{i, pbest},将当前位置的适应度赋值给 fpif_{pi}
    • 比较每个粒子的 pi,pbestp_{i, pbest} 对应的适应度:将对应适应度最好的位置赋值给 pgbestp_{gbest},将该位置对应的适应度赋值给 fgf_g
    • 计算每个粒子的速度 ViV_i,并更新其在求解空间中的位置
  • 直到算法收敛或达到某种条件,停止迭代

速度更新原理

速度更新公式:PSO的核心在于如何更新每次迭代中各个粒子的位置,也就是如何对每个粒子的速度向量进行更新

① 什么是速度向量:设在3维求解空间中,第1次迭代时粒子的位置为Xi=(1,2,3)X_i=(1, 2, 3),第2次迭代时该粒子的位置为 Xi+1=(5,8,4)X_{i+1} = (5,8,4),则对应的速度向量为:

Vi=Xi+1Xi=(5,8,4)(1,2,3)=(4,6,1)V_i = X_{i+1} - X_i = (5, 8, 4) - (1, 2, 3) = (4, 6, 1)

不难想到,若已知某粒子当前迭代的位置和速度,可以计算粒子下次迭代更新的位置,如:

Xi+1=Xi+Vi=(1,2,3)+(4,6,1)=(5,8,4)X_{i+1} = X_i + V_i = (1, 2, 3) + (4, 6, 1) = (5, 8, 4)

② 速度向量如何计算:如上方鸟群移动抽象化所提及的一样,粒子的移动方向会收到三个因素影响,分别为 倾向于保持上次迭代的移动方向(惯性)、倾向于向个体最优位置移动、倾向于向全局最优位置移动,在下图中即分别对应速度向量 v1,v2,v3v_1, v_2, v_3

image.png

如图所示,不难得到各个速度向量的表达式分别为: