粒子群算法(PSO)

转自https://blog.csdn.net/zuochao_2013/article/details/53431767

一.产生背景

❃粒子群算法(particleswarm optimization,PSO)由Kennedy和Eberhart在1995年提出,该算法对于Hepper的模拟鸟群(鱼群)的模型进行修正,以使粒子能够飞向解空间,并在最好解处降落,从而得到了粒子群优化算法。

❃同遗传算法类似,也是一种基于群体叠代的,但并没有遗传算法用的交叉以及变异,而是粒子在解空间追随最优的粒子进行搜索。

❃PSO的优势在于简单,容易实现,无需梯度信息,参数少,特别是其天然的实数编码特点特别适合于处理实优化问题。同时又有深刻的智能背景,既适合科学研究,又特别适合工程应用。

 

设想这样一个场景:一群鸟在随机的搜索食物。在这个区域里只有一块食物,所有的鸟都不知道食物在哪。但是它们知道自己当前的位置距离食物还有多远。

那么找到食物的最优策略是什么?

最简单有效的就是搜寻目前离食物最近的鸟的周围区域。

二. 算法介绍

(1)简述

❃每个寻优的问题解都被想像成一只鸟,称为“粒子”。所有粒子都在一个D维空间进行搜索。

❃所有的粒子都由一个fitness-function确定适应值以判断目前的位置好坏。

❃每一个粒子必须赋予记忆功能,能记住所搜寻到的最佳位置。

❃每一个粒子还有一个速度以决定飞行的距离和方向。这个速度根据它本身的飞行经验以及同伴的飞行经验进行动态调整。 

(2)基本PSO算法

  a.  D维空间中,有m个粒子;

  粒子i位置:x_i=(x_{i, 1}, x_{i, 2}, ...x_{i, d}, ..., x_{i, D})

  粒子i速度:v_i=(v_{i, 1}, v_{i, 2}, ...v_{i, d}, ..., v_{i, D})1\le i \le m1\le d \le D

  粒子i经历过的历史最好位置:p_i=(p_{i, 1}, p_{i, 2}, ..., p_{i, D})

  群体内(或领域内)所有粒子所经历过的最好位置:

  pg=(pg_{1}, pg_{2}, ..., pg_{D})

  PS:一般来说,粒子的位置和速度都是在连续的实数空间内进行取值。

 

   b.基本PSO公式

粒子 i 的第 d 维速度更新公式:

V_{i, d}^{k+1} = \omega V_{i, d}^k + c_1r_1(p_{i, d}^k - x_{i, d}^k) + c_2r_2(pg_{d}^k - x_{i, d}^k)

粒子 i 的第 d 维位置更新公式:

X_{i, d}^{k+1} = X_{i, d}^k + V_{i, d}^{k+1}

式中:c_1c_2 为学习因子或加速系数,一般为正常数。通常等于2;

           r_1r_2 取值范围是[0, 1],是该区间均匀分布的伪随机数。

          \omega 惯性权重,调节对解空间的搜索能力

注意:

生成新的粒子后,需要判断其是否位于定义域内,如果超出边界,则丢弃,重新随机生成一个。

速度也要进行边界判断。

 

(3)基本PSO算法流程图

粒子群算法(PSO)_第1张图片

 

你可能感兴趣的:(algorithm)