机器学习中的数学——粒子群算法(Particle Swarm Optimization, PSO)(二):带惯性权重的粒子群算法

为了改善基本粒子群算法的收敛性能,Shi和Eberhart在1998年IEEE国际进化计算学术会议上发表的题为《A modified particle swarm optimizer》的论文中引入了惯性权重,逐渐地大家都默认这个改进粒子群算法为标准的粒子群算法。

在基本粒子群算法的速度公式上可见右边项包括了三部分:第一部分是粒子之前是速度;第二部分和第三部分是粒子对速度的调整。如果没有后面两部分,粒子将会保持相同的速度朝一个方向飞行,直到到达边界,这样粒子很大可能会找不到优解,排除优解在粒子飞行的轨迹上,但这种情况是很少的。此外,如果没有第一部分,粒子的飞行速度将仅由它们当前位置和历史最好位置决定,则速度自身是无记忆的。假定刚开始粒子 i i i处于较优位置,那么粒子的飞行速度将会是0,即它会保持静止状态,直到其他粒子找到比粒子 i i i所处位置还要好的优解,从而替代了全局最优。此时,每个粒子将会飞向它自身最好位置和群体全局最好位置的权重中心。所以可以想象到如果没有第一部分,粒子群算法的搜索空间将会随着进化而收缩。此时只有当全局最优在初始搜索区间时,粒子群算法才可能找到解。所以最后解非常依赖于初始群体。当没有第一部分时,此算法更像是局部最优算法。

对于不同的问题,局部最优能力和全局最优能力的权衡也不一样。考虑到这个问题。并结合以上的分析,Shi和Eberhart添加了一个惯性权重到速度更新公式,即:
v i d k + 1 = w v i d k + c 1 r 1 ( p i d − z i d k ) + c 2 v 2 ( p g d − z i d k ) v_{id}^{k+1}=wv_{id}^k+c_1r_1(p_{id}-z_{id}^k)+c_2v_2(p_{gd}-z_{id}^k) vidk+1=wvidk+c1r1(pidzidk)+c2v2(pgdzidk)

位置更新公式与粒子群算法的位置更新公式相同。惯性权重 w w w起着权衡局部最优能力和全局最优能力的作用。下图表明粒子如何调整它的位置:
位置更新示意图
图中, z k z^k zk为当前的搜索点, z k + 1 z^{k+1} zk+1为调整后的搜索点, v k v^k vk为当前的速度, v k + 1 v^{k+1} vk+1为调整后的速度, v pbest v_{\text{pbest}} vpbest为基于pbest的速度, v gbest v_{\text{gbest}} vgbest为基于gbest的速度。

为了观察这个惯性权重对粒子群算法性能的影响,Shi和Eberhart把此算法应用到Schaffer’s f6函数中,因为这个函数是比较著名的评价优化算法的基准函数。他们改变惯性权重的大小,通过这个函数是比较著名的评价优化算法的基准函数。他们改变惯性权重的大小,通过大量的实验得到一些结论。当惯性权重较小时(<0.8),如果粒子群算法能够找到全局最优的话,那么它所经历的搜索时间是很短的,即所有的粒子趋向于快速汇集在一起。如果优解是在最初搜索空间内,粒子群算法将会很容易找到全局最优,否则它会找不到最优。当惯性权重较大时(>1.2),粒子群算法更像全局搜索方法,且它总是搜索新的区域。当然,这时的粒子群算法会需要更多的迭代来达到全局最优,且更可能找不到全局最优。当惯性权重适中时,粒子群算法将会有更大的机会找到全局最优,但迭代次数也会比第一种情况要多。

根据这些分析,他们不是把惯性权重设为定值,而是设为一个随时间线性减少的函数,惯性权重的函数形式通常为:
w = w m a x − w m a x − w m i n iter max ⁡ × k w=w_{max}-\frac{w_{max}-w_{min}}{\text{iter}_{\max}}\times k w=wmaxitermaxwmaxwmin×k

上式中, w m a x w_{max} wmax为初始权重, w m i n w_{min} wmin为最终权重, iter max ⁡ \text{iter}_{\max} itermax为最大迭代次数, k k k为当前迭代次数。

这个函数使得粒子群算法在刚开始的时候倾向于开掘,然后逐渐转向于开拓,从而在局部区域调整解。这些改进使得粒子群算法的性能得到很大提高。

猜你喜欢

转载自blog.csdn.net/hy592070616/article/details/123771857
今日推荐