基于蛾群算法的函数寻优算法

一、理论基础

1、蛾群算法

蛾群算法(Moth swarm algorithm, MSA)是AliMohamed于2016年提出的一种元启发式优化算法,其灵感来源于飞蛾朝向月光方向的行为。
在MSA算法中,飞蛾根据光源的位置进行自身位置的更新,光源的位置代表算法的候选解,其发光强度表示该解对应的适应度值。蛾群分为三部分:探路蛾、勘探蛾和观察蛾。各类蛾的职责如下:
探路蛾:这小部分蛾能够发现优化空间中的新区域,并找到合适的光源对主体蛾群的位置更新进行指导。
勘探蛾:这部分蛾以对数螺旋线的方式围绕被探路蛾标记过的光源进行移动。
观察蛾:这部分蛾直接移向全局最优的光源。
针对这三种蛾群,蛾群算法优化时主要分为三个阶段,分别是探路阶段、勘探阶段和观察阶段。

(1)探路阶段

在该阶段,为了避免算法早熟收敛,提高解的多样性,选取一部分蛾作为探路者来发现较不拥挤的区域。这部分蛾通过相互作用更新其位置,并使用自适应交叉进行长距离飞行。该过程分为以下3步:
步骤1:交叉点多样性指数
对于第 t t t次迭代,第 j j j维个体的标准化传播度 σ j t \sigma_j^t σjt为: σ j t = 1 n p ∑ i = 1 n p ( x i j t − x j t ‾ ) 2 x j t ‾ (1) \sigma_j^t=\frac{\sqrt{\displaystyle\frac{1}{n_p}\displaystyle\sum_{i=1}^{n_p}\left(x_{ij}^t-\overline{x_{j}^t}\right)^2}}{\overline{x_{j}^t}}\tag{1} σjt=xjtnp1i=1np(xijtxjt)2 (1)其中, x j t ‾ = 1 n p ∑ i = 1 n p x i j t \overline{x_{j}^t}=\displaystyle\frac{1}{n_p}\displaystyle\sum_{i=1}^{n_p}x_{ij}^t xjt=np1i=1npxijt n p n_p np为探路蛾的数量。
变量因子 μ t \mu^t μt为: μ t = 1 d ∑ j = 1 d σ j t (2) \mu^t=\frac1d\sum_{j=1}^d\sigma_j^t\tag{2} μt=d1j=1dσjt(2)探路蛾中分散程度较低的蛾都纳入到交叉点组 c p c_p cp中,如下所示: j ∈ c p     if    σ j t ≤ μ t (3) j\in c_p\,\,\,\text{if}\,\,\sigma_j^t\leq\mu^t\tag{3} jcpifσjtμt(3)可以看出,蛾群的交叉点组随迭代的进行在动态变化。
步骤2:莱维交叉
当进行 n c ∈ c p n_c\in c_p nccp的交叉机制时,该算法通过对所选的主向量 x p → = [ x p 1 , x p 2 , ⋯   , x p n c ] \overrightarrow {x_p}=[x_{p1},x_{p2},\cdots,x_{pn_c}] xp =[xp1,xp2,,xpnc]进行扰动,从而生成一个变异后的子向量 v p → = [ v p 1 , v p 2 , ⋯   , v p n c ] \overrightarrow {v_p}=[v_{p1},v_{p2},\cdots,v_{pn_c}] vp =[vp1,vp2,,vpnc],公式如下: v p t → = x r 1 t → + L p 1 t × ( x r 2 t → − x r 3 t → ) + L p 2 t × ( x r 4 t → − x r 5 t → ) ∀ r 1 ≠ r 2 ≠ r 3 ≠ r 4 ≠ r 5 ≠ p ∈ { 1 , 2 , ⋯   , n p } (4) \begin{aligned}\overrightarrow{v_p^t}=\overrightarrow{x_{r^1}^t}+L_{p1}^t\times\left(\overrightarrow{x_{r^2}^t}-\overrightarrow{x_{r^3}^t}\right)+L_{p2}^t\times\left(\overrightarrow{x_{r^4}^t}-\overrightarrow{x_{r^5}^t}\right)\\[2ex]\forall r^1\neq r^2\neq r^3\neq r^4\neq r^5\neq p\in\{1,2,\cdots,n_p\}\end{aligned}\tag{4} vpt =xr1t +Lp1t×(xr2t xr3t )+Lp2t×(xr4t xr5t )r1=r2=r3=r4=r5=p{ 1,2,,np}(4)其中, L p 1 L_{p1} Lp1 L p 2 L_{p2} Lp2为两个突变因子, L i ∼ s t e p ⊕ L e v y ( α ) ∼ 0.01 u ∣ y ∣ 1 / α ,    u = N ( 0 , σ u 2 ) ,    y = N ( 0 , σ y 2 ) σ u = [ Γ ( 1 + α ) × sin ⁡ ( π α / 2 ) Γ ( ( 1 + α ) / 2 ) × α × 2 ( α − 1 ) / 2 ] 1 / α ,    σ y = 1 (5) \begin{aligned}L_i\sim step&\oplus Levy(\alpha)\sim 0.01\frac{u}{|y|^{1/\alpha}},\,\,u=\text{N}(0,\sigma_u^2),\,\,y=\text{N}(0,\sigma_y^2)\\[2ex]\sigma_u &=\left[\frac{\Gamma(1+\alpha)\times\sin(\pi\alpha/2)}{\Gamma((1+\alpha)/2)\times\alpha\times2^{(\alpha-1)/2}}\right]^{1/\alpha},\,\,\sigma_y=1\end{aligned}\tag{5} ListepσuLevy(α)0.01y1/αu,u=N(0,σu2),y=N(0,σy2)=[Γ((1+α)/2)×α×2(α1)/2Γ(1+α)×sin(πα/2)]1/α,σy=1(5)为使路径更优,每只探路蛾在进行位置更新时,将原位置向量与变异后的子向量进行交叉,其过程可表示为: V p j t = { v p j t , if    j ∈ c p x p j t , if    j ∉ c p (6) V_{pj}^t=\begin{dcases}v_{pj}^t,\quad\text{if}\,\,j\in c_p\\[2ex]x_{pj}^t,\quad\text{if}\,\,j\notin c_p\end{dcases}\tag{6} Vpjt=vpjt,ifjcpxpjt,ifj/cp(6)步骤3:选择策略
在以上迭代后,每代蛾的适应度值都需与探路蛾的适应度值相比较,留下适应度较好的蛾用于下一代的迭代,其过程表示如下: x p t + 1 → = { x p t → , if    f ( v p t → ) ≥ f ( x p t → ) v p t → , if    f ( v p t → ) < f ( x p t → ) (7) \overrightarrow{x_p^{t+1}}=\begin{cases}\overrightarrow{x_p^t},\quad\text{if}\,\,f(\overrightarrow{v_{p}^t})\geq f(\overrightarrow{x_p^t})\\[2ex]\overrightarrow{v_{p}^t},\quad\text{if}\,\,f(\overrightarrow{v_{p}^t})<f(\overrightarrow{x_{p}^t})\end{cases}\tag{7} xpt+1 =xpt ,iff(vpt )f(xpt )vpt ,iff(vpt )<f(xpt )(7)概率 P p P_p Pp用于评价光源的发光强度 f i t p fit_p fitp,关系如下所示: P p = f i t p ∑ p = 1 n p f i t p (8) P_p=\frac{fit_p}{\displaystyle\sum_{p=1}^{n_p}fit_p}\tag{8} Pp=p=1npfitpfitp(8)发光强度可通过目标函数值 f p f_p fp进行计算: f i t p = { 1 1 + f p , f p ≥ 0 1 + f p ,    f p < 0 (9) fit_p=\begin{dcases}\frac{1}{1+f_p},\quad f_p\geq0\\[2ex]1+f_p,\quad\,\, f_p<0\end{dcases}\tag{9} fitp=1+fp1,fp01+fp,fp<0(9)

(2)勘探阶段

勘探蛾所对应的光照强度略低于探路蛾,随着迭代次数的增加,该蛾的数量逐渐减少,计算公式如下: n f = round ( ( n − n p ) × ( 1 − t T ) ) (10) n_f=\text{round}\left((n-n_p)\times\left(1-\frac tT\right)\right)\tag{10} nf=round((nnp)×(1Tt))(10)勘探蛾采用MFO算法中的位置更新公式进行更新,可表示为: x i t + 1 = ∣ x i t − x p t ∣ ⋅ e θ ⋅ cos ⁡ ( 2 π θ ) + x p t ∀ p ∈ { 1 , 2 , ⋯   , n p } ,    i ∈ { n p + 1 , n p + 2 , ⋯   , n f } (11) \begin{aligned}&x_i^{t+1}=\left|x_i^t-x_p^t\right|\cdot e^\theta\cdot\cos(2\pi\theta)+x_p^t\\[2ex]\forall p&\in\{1,2,\cdots,n_p\},\,\,i\in\{n_p+1,n_p+2,\cdots,n_f\}\end{aligned}\tag{11} pxit+1=xitxpteθcos(2πθ)+xpt{ 1,2,,np},i{ np+1,np+2,,nf}(11)其中, θ ∈ [ r , 1 ] ,   r = − 1 − t / T \theta\in[r,1],\,r=-1-t/T θ[r,1],r=1t/T。上式基于式(8)中概率函数 P p P_p Pp选择光源 x p x_p xp,这提高了开发能力。

(3)观察阶段

在迭代过程中,随着勘探蛾数量的减少,观察蛾数量逐渐增多( n o = n − n f − n p n_o=n-n_f-n_p no=nnfnp),这种机制提高了算法的收敛速度。观察蛾由两部分组成。第一部分( n G = round ( n o / 2 ) n_G=\text{round}(n_o/2) nG=round(no/2))采用高斯分布进行移动: x i t + 1 = x i t + ε 1 + [ ε 2 × b e s t g t − ε 3 × x i t ] ∀ i ∈ { 1 , 2 , ⋯   , n G } (12) x_i^{t+1}=x_i^t+\varepsilon_1+\left[\varepsilon_2\times best_g^t-\varepsilon_3\times x_i^t\right]\quad\forall i\in\{1,2,\cdots,n_G\}\tag{12} xit+1=xit+ε1+[ε2×bestgtε3×xit]i{ 1,2,,nG}(12) ε 1 ∼ r a n d o m ( s i z e ( d ) ) ⊕ N ( b e s t g t , log ⁡ t t × ( x i t − b e s t g t ) ) (13) \varepsilon_1\sim random(size(d))\oplus N\left(best_g^t,\frac{\log t}{t}\times\left(x_i^t-best_g^t\right)\right)\tag{13} ε1random(size(d))N(bestgt,tlogt×(xitbestgt))(13)其中, ε 1 \varepsilon_1 ε1为由高斯分布生成的随机数, b e s t g t best_g^t bestgt为目前所有蛾中的最好蛾群位置, ε 2 \varepsilon_2 ε2 ε 3 \varepsilon_3 ε3 [ 0 , 1 ] [0,1] [0,1]间的随机数。
第二部分观察蛾( n A = n o − n G n_A=n_o-n_G nA=nonG)采用即时记忆的联想记忆机制更新其位置,如下所示: x i t + 1 = x i t + 0.001 × G [ x i t − x i min ⁡ , x i max ⁡ − x i t ] + ( 1 − g / G ) × r 1 × ( b e s t p t − x i t ) + 2 g / G × r 2 × ( b e s t g t − x i t ) (14) x_i^{t+1}=x_i^t+0.001\times G\left[x_i^t-x_i^{\min},x_i^{\max}-x_i^t\right]+(1-g/G)\times r_1\times(best_p^t-x_i^t)+2g/G\times r_2\times(best_g^t-x_i^t)\tag{14} xit+1=xit+0.001×G[xitximin,ximaxxit]+(1g/G)×r1×(bestptxit)+2g/G×r2×(bestgtxit)(14)其中, i ∈ { 1 , 2 , ⋯   , n A } i\in\{1,2,\cdots,n_A\} i{ 1,2,,nA} 2 g / G 2g/G 2g/G表示社会因子, 1 − g / G 1-g/G 1g/G表示认知因子, r 1 r_1 r1 r 2 r_2 r2 [ 0 , 1 ] [0,1] [0,1]间的随机数, b e s t g t best_g^t bestgt表示根据其概率值随机选出的光源位置。

2、MSA算法流程

MSA算法流程图如图1所示。
在这里插入图片描述

图1 MSA算法流程图

二、仿真实验与结果分析

将MSA与MFO和FPA进行对比,实验设置种群规模为30,其中探路蛾数量为6,最大迭代次数为500,以常用23个测试函数的F1、F2(单峰函数/30维)、F9、F10(多峰函数/30维)、F20、F21(固定维度多峰函数/6维、4维)为例,每种算法独立运行30次,结果显示如下:
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

函数:F1
MFO:最差值: 10002.8227, 最优值: 1.066, 平均值: 2006.9351, 标准差: 4065.5804, 秩和检验: 3.0199e-11
FPA:最差值: 107.8254, 最优值: 38.0277, 平均值: 66.4132, 标准差: 20.8747, 秩和检验: 3.0199e-11
MSA:最差值: 8.2008e-150, 最优值: 1.6958e-171, 平均值: 4.129e-151, 标准差: 1.6342e-150, 秩和检验: 1
函数:F2
MFO:最差值: 70.0133, 最优值: 0.14329, 平均值: 30.1619, 标准差: 21.882, 秩和检验: 3.0199e-11
FPA:最差值: 24.5168, 最优值: 5.5597, 平均值: 9.5903, 标准差: 3.8827, 秩和检验: 3.0199e-11
MSA:最差值: 1.5228e-78, 最优值: 8.2897e-87, 平均值: 5.4616e-80, 标准差: 2.7757e-79, 秩和检验: 1
函数:F9
MFO:最差值: 239.2171, 最优值: 117.4937, 平均值: 166.6367, 标准差: 31.7431, 秩和检验: 1.2118e-12
FPA:最差值: 192.1839, 最优值: 143.8738, 平均值: 173.5868, 标准差: 10.9523, 秩和检验: 1.2118e-12
MSA:最差值: 0, 最优值: 0, 平均值: 0, 标准差: 0, 秩和检验: NaN
函数:F10
MFO:最差值: 19.9622, 最优值: 0.3067, 平均值: 14.1843, 标准差: 7.856, 秩和检验: 5.1436e-12
FPA:最差值: 19.1134, 最优值: 5.3441, 平均值: 10.8456, 标准差: 3.824, 秩和检验: 5.1436e-12
MSA:最差值: 4.4409e-15, 最优值: 8.8818e-16, 平均值: 1.4803e-15, 标准差: 1.3467e-15, 秩和检验: 1
函数:F20
MFO:最差值: -3.1345, 最优值: -3.322, 平均值: -3.2139, 标准差: 0.054074, 秩和检验: 0.09983
FPA:最差值: -3.3218, 最优值: -3.322, 平均值: -3.322, 标准差: 2.8873e-05, 秩和检验: 0.09049
MSA:最差值: -3.2031, 最优值: -3.322, 平均值: -3.2824, 标准差: 0.057008, 秩和检验: 1
函数:F21
MFO:最差值: -2.6305, 最优值: -10.1532, 平均值: -6.5469, 标准差: 3.3375, 秩和检验: 0.72691
FPA:最差值: -10.1454, 最优值: -10.1532, 平均值: -10.1521, 标准差: 0.0021264, 秩和检验: 2.1655e-07
MSA:最差值: -2.6305, 最优值: -10.1532, 平均值: -9.4009, 标准差: 2.2954, 秩和检验: 1

实验结果表明了MSA算法的有效性和优越性。

三、参考文献

[1] Al-Attar Ali Mohamed, Yahia S. Mohamed, Ahmed A.M. El-Gaafary, et al. Optimal powerflow using moth swarm algorithm[J]. Electric Power Systems Research, 2017, 142: 190-206.
[2] 杨文静. 基于蛾群算法考虑SST的主动配电网无功优化控制研究[D]. 天津: 天津大学, 2019.

猜你喜欢

转载自blog.csdn.net/weixin_43821559/article/details/123842004