关于粒子群算法的两种惯性权重

在粒子群算法中,所谓惯性权重w即粒子能保持前一时刻运动状态的能力,在粒子群算法中格外重要。
这里介绍两种常用的惯性权重算法:1.典型线性递减策略;2.线性微分递减策略。其中,算法所要解决的问题是求解某个二元函数的最小值,可以看做二维空间的粒子群算法。迭代次数是1000次。
1.典型线性递减策略的w计算公式如下:
在这里插入图片描述
其中,w是惯性权重,wmax是惯性权重最大值,wmin是惯性权重最小值,t是当前迭代次数,是变量,tmax是总共迭代次数,是常量。该方法中,惯性权重跟时间成负相关,并且惯性权重是时间的一次函数,斜率恒定。当初始迭代时,惯性权重w比较大,反应在速度v的计算公式上可以看出初始迭代的时候粒子的速度比较大,具有很好的全局搜索能力,而局部搜索能力较弱。随着迭代次数的累加,w的值越来越小,粒子的速度也越来越小,此时粒子具有很好的局部搜索能力,而全局搜索能力较弱。但是由于斜率恒定,所以速度的改变总是保持同一水平。如果初始迭代的时候并没有产生较好的点,那么随着迭代的累加以及速度的迅速衰减很可能导致最后陷入局部最优值。
2.线性微分递减策略的w的计算公式如下:
关于粒子群算法的两种惯性权重_第1张图片
由上述公式可以看出,惯性权重w和时间仍然成负相关,并且惯性权重是时间的二次函数。通过图像可以看出,初始迭代的时候,w变化缓慢,有利于在初始迭代时寻找满足条件的局部最优值,在接近最大迭代次数时,w变化较快,在寻找到局部最优值之后能够快速地收敛逼近于全局最优值,提高运算效率。
关于粒子群算法的两种惯性权重_第2张图片
下面是两种惯性权重递减策略的对比,python代码和求解问题的模型基于我的一篇博文:添加链接描述
首先,从10次代码运行结果来看,好像两者计算得到的函数最小值并无多大差别(可能运行次数太少,存在很大的误差),但是从适应度变化曲线来看还是能看出一些问题。
关于粒子群算法的两种惯性权重_第3张图片
关于粒子群算法的两种惯性权重_第4张图片
上图是线性递减策略的前6次运行的适应度变化曲线,我们可以看出,采用线性递减策略容易造成过早收敛的问题。一旦初始阶段陷入“不太好的点”,那么由于速度变化恒定,很容易过早收敛于局部最优值。
关于粒子群算法的两种惯性权重_第5张图片
上图是采用线性微分递减策略的前6次运行的适应度变化曲线,相比线性递减策略,线性微分递减策略过早收敛的问题就要少很多。

你可能感兴趣的:(智能算法)