PSO算法面临的两个最大的问题是收敛的速度和陷入局部最小值。针对此种情况,詹志辉教授基于标准的PSO提出了三个方式进行改进,分别是进化状态评估(ESE)、系统自适应参数(惯性权重、局部和全局加速度)和精英学习策略(ELS)。下面分别从这三个方面来介绍详细算法。
ELS目的是为了收敛的状态进行评估和划分,为后面自适应参数提供基础。
step1: 计算每个粒子 i i i的相对于其他粒子的平均距离(欧式距离)
d i = 1 N − 1 ∑ j = 1 ; j ≠ i N ∑ k = 1 D ( x i k − x j k ) 2 d_ i= \frac {1}{N-1} \sum_{j=1; j\neq i}^{N} \sqrt{\sum_{k=1}^D(x_i^k-x_j^k)^2} di=N−11j=1;j̸=i∑Nk=1∑D(xik−xjk)2
其中N是种群的大小,D为问题的维数。
step2: 选出 d i d_i di中最好的值为 d g d_g dg,计算 d i d_i di中最大距离为 d m a x d_{max} dmax,最小距离为 d m i n d_{min} dmin,计算进化因子 f f f。
f = d g − d m i n d m a x − d m i n ∈ [ 0 , 1 ] f = \frac {d_g - d_{min}} {d_{max}-d_{min}} \in[0,1] f=dmax−dmindg−dmin∈[0,1]
step3: 根据上面计算的 f f f,使用是隶属函数判断进化此刻的状态。其中四个状态分别是S1:探索(Exploration)、S2:发现(Exploitation)、S3:收敛(Convergence)、S4:跳出(Jumping Out)。
S1:
μ s 1 ( f ) = { 0 , 0 ≤ f ≤ 0.4 5 × f − 2 , 0.4 < f ≤ 0.6 1 , 0.6 < f ≤ 0.7 − 10 × f + 8 , 0.7 < f ≤ 0.8 0 , 0.8 < f ≤ 1 \mu s_1(f) = \begin{cases} 0 , & 0 \leq f \leq 0.4 \\ 5 \times f -2 , & 0.4 < f \leq 0.6\\ 1, & 0.6 < f \leq 0.7\\ -10 \times f + 8, & 0.7 < f \leq 0.8\\ 0, & 0.8 < f \leq 1 \end{cases} μs1(f)=⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧0,5×f−2,1,−10×f+8,0,0≤f≤0.40.4<f≤0.60.6<f≤0.70.7<f≤0.80.8<f≤1
S2:
μ s 2 ( f ) = { 0 , 0 ≤ f ≤ 0.2 10 × f − 2 , 0.2 < f ≤ 0.3 1 , 0.3 < f ≤ 0.4 − 5 × f + 3 , 0.4 < f ≤ 0.6 0 , 0.6 < f ≤ 1 \mu s_2(f) = \begin{cases} 0 , & 0 \leq f \leq 0.2 \\ 10 \times f -2 , & 0.2 < f \leq 0.3\\ 1, & 0.3 < f \leq 0.4\\ -5 \times f + 3, & 0.4 < f \leq 0.6\\ 0, & 0.6 < f \leq 1 \end{cases} μs2(f)=⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧0,10×f−2,1,−5×f+3,0,0≤f≤0.20.2<f≤0.30.3<f≤0.40.4<f≤0.60.6<f≤1
S3:
μ s 3 ( f ) = { 1 , 0 ≤ f ≤ 0.1 − 5 × f + 1.5 , 0.1 < f ≤ 0.3 0 , 0.3 < f ≤ 1 \mu s_3(f) = \begin{cases} 1 , & 0 \leq f \leq 0.1 \\ -5 \times f +1.5 , & 0.1 < f \leq 0.3\\ 0, & 0.3 < f \leq 1 \end{cases} μs3(f)=⎩⎪⎨⎪⎧1,−5×f+1.5,0,0≤f≤0.10.1<f≤0.30.3<f≤1
S4:
μ s 4 ( f ) = { 0 , 0 ≤ f ≤ 0.7 − 5 × f − 3.5 , 0.7 < f ≤ 0.9 1 , 0.9 < f ≤ 1 \mu s_4(f) = \begin{cases} 0 , & 0 \leq f \leq 0.7 \\ -5 \times f -3.5 , & 0.7 < f \leq 0.9\\ 1, & 0.9 < f \leq 1 \end{cases} μs4(f)=⎩⎪⎨⎪⎧0,−5×f−3.5,1,0≤f≤0.70.7<f≤0.90.9<f≤1
上图为根据隶属度函数划分的状态,可以清晰看出各个状态区域,但是各个状态之间有重合的区域,为了解决决定 f f f的最终归属状态,在此使用了“singleton”方法。
在没有规则基准(rule base)的情况下:如果 f = 0.45 f = 0.45 f=0.45,可参考上图中的红线, μ s 2 ( f ) > μ s 1 ( f ) \mu s_2(f) > \mu s_1(f) μs2(f)>μs1(f),所以 f f f属于 S 2 S_2 S2状态。
在有规则基准(rule base)的情况下:
在实验中的有些情况下,单纯使用ESE来动态更新 w w w和 c 1 c_1 c1和 c 2 c_2 c2,出现了算法不收敛的情况下,因此ELS是用于帮助全局最优粒子 g B e s t gBest gBest在收敛状态时跳出局部最优区域。推进 g B e s t gBest gBest向着一个潜在最好区域前进。
ELS选择了目标问题的其中一个维度进行变化,从统计学上意义来说,对于每一个维度选择的概率都是相同的,选择其中的第 d d d个维度,加入高斯扰动,过程如下:
P d = P d + ( X m a x d − X m i n d ) ⋅ G a u s s i a n ( μ , σ 2 ) P^d = P^d + (X_{max}^d-X_{min}^d) \cdot Gaussian(\mu, \sigma^2) Pd=Pd+(Xmaxd−Xmind)⋅Gaussian(μ,σ2)
其中 σ \sigma σ是“精英学习率”,随着进化的代数而变化
σ = σ m a x − ( σ m a x − σ m i n ) g G \sigma = \sigma_{max}-(\sigma_{max}-\sigma_{min}) \frac {g}{G} σ=σmax−(σmax−σmin)Gg
其中 σ m a x \sigma_{max} σmax和 σ m i n \sigma_{min} σmin的上界和下界根据经验显示 σ m a x = 1.0 \sigma_{max} = 1.0 σmax=1.0、 σ m i n = 0.1 \sigma_{min} =0.1 σmin=0.1
降低SD值,在算法早期阶段中,提供一个较高的学习率,为了算法跳出可能的局部最优值。
在后期阶段中,较小的学习率可以引导 g B e s t gBest gBest找到最终的最优解
ELS的流程图如下所示:
如果改变后的P适应度符合精度标准,则将P的值赋给 g B e s t gBest gBest,否则则用P的值去代替种群中的最差例子。
整个算法的流程图:
与标准的PSO对比,APSO算法只在初始化之后得第二步与PSO不同,在第二步中算法加入了通过ESE动态更新 w w w、 c 1 c_1 c1、 c 2 c_2 c2方法和ELS策略。
该算法在单峰函数和多峰函数中,大多表现优秀,且未占用过多的时间。由于免费午餐理论,一个算法无法在各个方面都保持最好的结果。