受狼群猎食行为的启发,Mirjalili等提出了灰狼优化算法(Grey Wolf Optimization,GWO),该算法由于控制参数较少,因此实现方便。灰狼优化算法模拟灰狼的社会等级制度和猎食行为,视灰狼为猎食者顶端,即处于食物链最上层。GWO算法建立了一个模型:狼群中每一个灰狼代表了种群的一个潜在解,其中领导狼群的 α \alpha α狼位置是最好的解,处于狼群等级第二阶层的 β \beta β狼位置和负责侦察、警戒、打围以及看守的 δ \delta δ狼位置分别为优解和次优解,其他的候选解是阶层较低的 ω \omega ω狼位置。GWO算法包括如下三个步骤。
由于GWO的性能受种群初始值影响较小,因此在该算法中采用随机产生种群的方法,即: X i , j ∼ U ( l b j , u b j ) (1) X_{i,j}\sim U(lb_j,ub_j)\tag{1} Xi,j∼U(lbj,ubj)(1)其中, X X X为灰狼种群, i ∈ { 1 , 2 , 3 … , N } i∈\{1,2,3…,N\} i∈{ 1,2,3…,N}且 j ∈ { 1 , 2 , 3 … , s i z e p o p } j∈\{1,2,3…, sizepop\} j∈{ 1,2,3…,sizepop}, N N N是灰狼种群个数, s i z e p o p sizepop sizepop是种群维数; l b lb lb和 u b ub ub分别为搜索区间的下界和上界; U U U是随机均匀分布函数。
通过公式(2)和公式(3)搜索接近猎物: D → = ∣ C → ⋅ X → p ( t ) − X → ( t ) ∣ (2) \overrightarrow{\boldsymbol D}=|\overrightarrow{\boldsymbol C}\boldsymbol\cdot \overrightarrow{\boldsymbol X}_p(\boldsymbol{t})-\overrightarrow{\boldsymbol X}(\boldsymbol{t})|\tag{2} D=∣C⋅Xp(t)−X(t)∣(2) X → ( t + 1 ) = X → p ( t ) − A → ⋅ D → (3) \overrightarrow{\boldsymbol X}(t+1)=\overrightarrow{\boldsymbol X}_p(t)-\overrightarrow{\boldsymbol A}\boldsymbol\cdot \overrightarrow{\boldsymbol D}\tag{3} X(t+1)=Xp(t)−A⋅D(3)其中, D → \overrightarrow{\boldsymbol D} D为猎物与灰狼之间的距离; t t t为迭代的次数; C → \overrightarrow{\boldsymbol C} C和 A → \overrightarrow{\boldsymbol A} A为系数向量; X → \overrightarrow{\boldsymbol X} X和 X → p \overrightarrow{\boldsymbol X}_p Xp为灰狼位置向量和猎物位置向量。
向量 A → \overrightarrow{\boldsymbol A} A和 C → \overrightarrow{\boldsymbol C} C的计算公式如下: A → = 2 ⋅ a → ⋅ r 1 → − a → (4) \overrightarrow{\boldsymbol A}=2\boldsymbol\cdot \overrightarrow{\boldsymbol a}\boldsymbol\cdot\overrightarrow{\boldsymbol r_1} -\overrightarrow{\boldsymbol a}\tag{4} A=2⋅a⋅r1−a(4) C → = 2 ⋅ r 2 → (5) \overrightarrow{\boldsymbol C}=2\boldsymbol\cdot\overrightarrow{\boldsymbol r_2}\tag{5} C=2⋅r2(5)其中, r 1 r_1 r1和 r 2 r_2 r2是在 [ 0 , 1 ] [0,1] [0,1]范围内的随机数。一般情况, a → \overrightarrow{\boldsymbol a} a控制参数在 [ 0 , 2 ] [0,2] [0,2]范围内取值,且随着算法迭代次数的增加而线性递减。对应于公式(3), ∣ A → ∣ ≥ 1 |\overrightarrow{\boldsymbol A}|≥1 ∣A∣≥1意味着灰狼进行全局搜索, ∣ A → ∣ < 1 |\overrightarrow{\boldsymbol A}|<1 ∣A∣<1表示灰狼进行局部搜索。
通过计算灰狼优化算法的目标函数值,得到最优解、优解和次优解设置为 α \alpha α狼、 β \beta β狼和 δ \delta δ狼,其他灰狼的位置由 α \alpha α狼、 β \beta β狼和 δ \delta δ狼的位置共同决定,如公式(6)~公式(8)所示。在产生新群体后,对种群中的元素进行边界控制,完成一次迭代。重复上述过程,直到满足算法终止条件,最后输出最优解。 { D → α = ∣ C → 1 ⋅ X → α − X → ∣ D → β = ∣ C → 2 ⋅ X → β − X → ∣ D → δ = ∣ C → 3 ⋅ X → δ − X → ∣ (6) \begin{dcases}\overrightarrow{\boldsymbol D}_\alpha=|\overrightarrow{\boldsymbol C}_1\boldsymbol\cdot\overrightarrow{\boldsymbol X}_\alpha-\overrightarrow{\boldsymbol X}|\\\overrightarrow{\boldsymbol D}_\beta=|\overrightarrow{\boldsymbol C}_2\boldsymbol\cdot\overrightarrow{\boldsymbol X}_\beta-\overrightarrow{\boldsymbol X}|\\\overrightarrow{\boldsymbol D}_\delta=|\overrightarrow{\boldsymbol C}_3\boldsymbol\cdot\overrightarrow{\boldsymbol X}_\delta-\overrightarrow{\boldsymbol X}|\end{dcases}\tag{6} ⎩⎪⎪⎨⎪⎪⎧Dα=∣C1⋅Xα−X∣Dβ=∣C2⋅Xβ−X∣Dδ=∣C3⋅Xδ−X∣(6) { X → 1 = X → α − A → 1 ⋅ D → α X → 2 = X → β − A → 2 ⋅ D → β X → 3 = X → δ − A → 3 ⋅ D → δ (7) \begin{dcases}\overrightarrow{\boldsymbol X}_1=\overrightarrow{\boldsymbol X}_\alpha-\overrightarrow{\boldsymbol A}_1\boldsymbol\cdot\overrightarrow{\boldsymbol D}_\alpha\\\overrightarrow{\boldsymbol X}_2=\overrightarrow{\boldsymbol X}_\beta-\overrightarrow{\boldsymbol A}_2\boldsymbol\cdot\overrightarrow{\boldsymbol D}_\beta\\\overrightarrow{\boldsymbol X}_3=\overrightarrow{\boldsymbol X}_\delta-\overrightarrow{\boldsymbol A}_3\boldsymbol\cdot\overrightarrow{\boldsymbol D}_\delta\end{dcases}\tag{7} ⎩⎪⎪⎨⎪⎪⎧X1=Xα−A1⋅DαX2=Xβ−A2⋅DβX3=Xδ−A3⋅Dδ(7) X → ( t + 1 ) = X → 1 + X → 2 + X → 3 3 (8) \overrightarrow{\boldsymbol X}(t+1)=\frac{\overrightarrow{\boldsymbol X}_1+\overrightarrow{\boldsymbol X}_2+\overrightarrow{\boldsymbol X}_3}{3}\tag{8} X(t+1)=3X1+X2+X3(8)
灰狼优化(Gray Wolf Optimization , GWO)算法具有不过分依赖参数设置和方便实现等优点,但GWO算法在解决复杂优化问题时仍然容易过早陷入局部极值,即出现早熟收敛的现象。为解决上述问题,Heidari提出了LGWO算法。LGWO算法对于GWO算法主要进行了三个方面的改进:
LGWO算法的具体过程总结如下,并通过LGWO算法的伪代码如图1所示,描述如下: X(t+1)={ X(t),f(Xnew(t))>f(X(t))andrnew<pXnew(t),otherwise(13)
(1)种群初始化,其过程同GWO算法一致。
(2)种群搜索,其过程同GWO算法一致。
(3)通过计算LGWO算法的目标函数值,得到最优解 α \alpha α狼、优解 β \beta β狼,其他灰狼的位置由 α \alpha α狼和 β \beta β狼的位置共同决定,如公式(9)所示: X → ( t + 1 ) = { 0.5 × ( X → α − A → 1 D → α + X → β − A → 2 D → β ) + α ⊕ L e v i ( β ) ∣ A ∣ ≥ 0.5 0.5 × ( X → α − A → 1 D → α + X → β − A → 2 D → β ) ∣ A ∣ < 0.5 (9) \overrightarrow{\boldsymbol X}(t+1)=\begin{dcases}0.5×\left(\overrightarrow{\boldsymbol X}_\alpha-\overrightarrow{\boldsymbol A}_1\overrightarrow{\boldsymbol D}_\alpha+\overrightarrow{\boldsymbol X}_\beta-\overrightarrow{\boldsymbol A}_2\overrightarrow{\boldsymbol D}_\beta\right)+\alpha\oplus Levi(\beta)\quad|\boldsymbol A|≥0.5\\0.5×\left(\overrightarrow{\boldsymbol X}_\alpha-\overrightarrow{\boldsymbol A}_1\overrightarrow{\boldsymbol D}_\alpha+\overrightarrow{\boldsymbol X}_\beta-\overrightarrow{\boldsymbol A}_2\overrightarrow{\boldsymbol D}_\beta\right)\quad\quad\quad\quad\quad\quad\quad\,\,|\boldsymbol A|<0.5\end{dcases}\tag{9} X(t+1)=⎩⎨⎧0.5×(Xα−A1Dα+Xβ−A2Dβ)+α⊕Levi(β)∣A∣≥0.50.5×(Xα−A1Dα+Xβ−A2Dβ)∣A∣<0.5(9)其中, α ⊕ L e v i ( β ) ∼ 0.01 u v − β ( X → ( t ) − X α → ( t ) ) (10) \alpha\oplus Levi(\beta)\sim 0.01\frac{u}{v^{-\beta}}(\overrightarrow{\boldsymbol X}(t)-\overrightarrow{\boldsymbol X^\alpha}(t))\tag{10} α⊕Levi(β)∼0.01v−βu(X(t)−Xα(t))(10)其中, u u u和 v v v服从正态分布: u ∼ N ( 0 , σ u 2 ) , v ∼ N ( 0 , σ v 2 ) (11) u\sim N(0,\sigma_u^2),v\sim N(0,\sigma_v^2)\tag{11} u∼N(0,σu2),v∼N(0,σv2)(11) σ u = [ Γ ( 1 + β ) s i n ( π β 2 ) Γ ( 1 + β 2 ) β × 2 β − 1 2 ] 1 β , σ v = 1 (12) \sigma_u=\left[\frac{\Gamma(1+\beta)sin(\frac{\pi\beta}{2})}{\Gamma(\frac{1+\beta}{2})\beta×2^{\frac{\beta-1}{2}}}\right]^{\frac1\beta},\sigma_v=1\tag{12} σu=[Γ(21+β)β×22β−1Γ(1+β)sin(2πβ)]β1,σv=1(12)在Heidari提出的LGWO算法中,参数 β \beta β是 [ 0 , 2 ] [0,2] [0,2]的随机数。
在保留前一代解,通过公式(9)产生新群体后记为 X → n e w ( t ) \overrightarrow{\boldsymbol X}_{new}(t) Xnew(t),通过贪婪选择策略公式(13)进行选择判断是否保留更新后的灰狼,完成一次迭代。重复上述过程,直到满足算法终止条件,最后输出最优解。 X → ( t + 1 ) = { X → ( t ) , f ( X → n e w ( t ) ) > f ( X → ( t ) ) a n d r n e w < p X → n e w ( t ) , o t h e r w i s e (13) \overrightarrow{\boldsymbol X}(t+1)=\begin{dcases}\overrightarrow{\boldsymbol X}(t),\quad \,\,\,\,f(\overrightarrow{\boldsymbol X}_{new}(t))>f(\overrightarrow{\boldsymbol X}(t))\,and\,r_{new}