遗传算法 粒子群算法_图解粒子群算法(遗传算法内核简介)

之前我们已介绍了基于生物 演化的遗传算法,现在我们来看看另外一个灵感来自于自然界的算法 —— 粒子群算法粒子群算法(Particle Swarm Optimization,简称PSO)是1995年Eberhart博士和Kennedy博士一起提出的。粒子群算法是通过模拟鸟群捕食行为设计的一种群智能算法。将每个寻优的问题解都想象成一只鸟,称之为“粒子”,所有鸟群(粒子)都在一个D维空间进行搜索,区域内有大大小小不同的食物源,鸟群的任务是找到最大的食物源(全局最优解)。鸟群在整个搜寻的过程中,通过相互传递各自位置的信息,让其他的鸟知道食物源的位置最终,整个鸟群都能聚集在食物源周围,即我们所说的找到了最优解,问题收敛。粒子群算法和遗传算法是十分类似的,同样 基于群种的迭代,但并没有遗传算法的交叉和变异操作,而是在解空间内追随最优的粒子进行搜索。那么下面来介绍下在MATLAB中的具体原理与操作(内含代码~)

1、初始化粒子群

decff59349811c9ac678804a3d70be21.png

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

粒子群的另一个特点就是记录每个个体的历史最优和种群的历史最优,因此而二者对应的最优位置和最优值也需要初始化。其中每个个体的历史最优位置可以先初始化为当前位置,而种群的历史最优位置则可初始化为原点。对于最优值,如果求最大值则初始化为负无穷,相反地初始化为正无穷。

2、粒子的适应值

类似遗传算法,将目标函数作为适应度函数。注意根据求解实际函数的最大或最小值去设定适应度方向。

3、速度和位置更新

速度和位置更新是粒子群算法的核心,其原理表达式和更新方式如下:

24d8ee826bd9527e27bec7bb9049af19.png

每次更新完速度和位置都需要考虑速度和位置的限制,需要将其限制在规定范围内,此处仅举出一个常规方法,即将超约束的数据约束到边界(当位置或者速度超出初始化限制时,将其拉回靠近的边界处)。当然,你不用担心他会停住不动,因为每个粒子还有惯性和其他两个参数的影响。通过速度更新公式我们可以看出,若需要算法快速收敛,我们需要将加速度常数调大。但是这么做可能会导致算法出现“早熟”。若把惯性权重调大,可增加粒子探测新位置的“积极性”,避免过早陷入局部最优,但也会降低算法的收敛速度。对于有些改进算法,在速度更新公式最后一项会加入一个随机项,来平衡收敛速度与避免“早熟”。并且根据位置更新公式的特点,粒子群算法更适合求解连续优化问题。

cdb3524db34d68b8af3495b25da714dd.png

具体计算流程图如下

a1c7510d115b9569a7db96de5890e0a2.png

这里代码已经为大家准备好了~

链接:https://pan.baidu.com/s/1RVwrxJWR96eeXCj1Fszc_g

提取码:qtnc

点击文末"阅读原文"跳转

最后对粒子群算法做一个简单的总结和改进思路整理:

优缺点分析:

  • 规则设置相较于遗传算法更为简单,没有交叉、变异操作。

  • 实现容易、精度高、收敛快。

  • 比较容易实现并行。

  • 种群为随机初始化,最终迭代结果受其影响较大。

  • 参数设置对于最终结果也有较大影响缺点。

改进思路整理:

  • APSO活跃目标点粒子群算法:在标准PSO速度更新公式中引入第三个目标点,成为活跃目标点,从而构成新的基于三个目标点的速度更新机制的粒子速度更新公式;APSO的优点是避免了PSO算法的过早收敛问题,并兼具复合型法射线搜索的能力,缺点是增加了一定的额外计算开销;

  • DPSO探测粒子群优化算法:选定少数粒子,令其单独进行有别于普通粒子折线搜索路径,而是利用螺旋折线搜索路径,该粒子称为探测粒子。整体上,该探测粒子与种群中其他普通粒子联合进行更高效率的搜索。DPSO的优点是避免PSO早熟收敛的基础上进一步提高了PSO的收敛速度和收敛精度;缺点与APSO类似增加了一定的额外计算开销;


版权声明:本文为weixin_35899665原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。