
目录
1.背景
2017年,AAA Mohamed等人受到飞蛾趋光行为启发,提出了蛾群算法(Moth Swarm Algorithm, MSA)。
2.算法原理
2.1算法思想
MSA设待优化问题的可行解和适应度函数值分别由光源位置和光源发光强度表示,主要分为:勘探蛾、探测蛾和观察蛾。
- 勘探蛾:能够在优化空间上发现新的区域,引导作用
 - 探测蛾:在光源附近区域内漫游到随机螺旋路径中一组已被勘探蛾标识的蛾群
 - 观察蛾:一组由探测蛾获得并直接向最佳全局解漂游的蛾群
 
在每次迭代中,粒子群算法中,蛾群中最佳适应度值被视为勘探蛾空间位置的发光强度,领导下一次更新迭代;而次优的适应度值分别定义为探测蛾和观察蛾。(有点像灰狼算法GWO机制)
2.2算法过程
MSA提出交叉点多样性指数,对于第t次迭代j维蛾群个体归一化分散度:
  
      
       
        
         
          
          
           
            
            
              σ 
             
            
              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{\frac1{n_p}\sum_{i=1}^{n_p}(x_{ij}^t-\overline{x_j^t})^2}}{\overline{x_j^t}}\tag{1} 
        
       
     σjt=xjtnp1∑i=1np(xijt−xjt)2(1)
  
      
       
        
         
          
          
           
            
             
             
               x 
              
             
               j 
              
             
               t 
              
             
            
              ‾ 
             
            
           
             = 
            
            
            
              ∑ 
             
             
             
               i 
              
             
               = 
              
             
               1 
              
             
             
             
               n 
              
             
               p 
              
             
            
            
            
              x 
             
             
             
               i 
              
             
               j 
              
             
            
              t 
             
            
           
          
          
          
          
            (2) 
           
          
         
        
       
         \overline{x_j^t}=\sum_{i=1}^{n_p}x_{ij}^t\tag{2} 
        
       
     xjt=i=1∑npxijt(2)
 其中,np表示勘探蛾数量。
 相对分散度表述为:
  
      
       
        
         
          
          
           
            
            
              μ 
             
            
              t 
             
            
           
             = 
            
            
            
              1 
             
            
              d 
             
            
            
            
              ∑ 
             
             
             
               j 
              
             
               = 
              
             
               1 
              
             
            
              d 
             
            
            
            
              σ 
             
            
              j 
             
            
              t 
             
            
           
          
          
          
          
            (3) 
           
          
         
        
       
         \mu^t=\frac1d\sum_{j=1}^d\sigma_j^t\tag{3} 
        
       
     μt=d1j=1∑dσjt(3)
 任何勘探蛾的组成都会受到低分散度的影响,即勘探蛾数量在交叉点cp中被确认:
  
      
       
        
         
          
          
           
           
             i 
            
           
             ∈ 
            
            
            
              c 
             
            
              p 
             
            
           
             i 
            
           
             f 
            
            
            
              σ 
             
            
              j 
             
            
              t 
             
            
           
             ⩽ 
            
            
            
              μ 
             
            
              t 
             
            
           
          
          
          
          
            (4) 
           
          
         
        
       
         i\in c_{p}if\sigma_{j}^{t}\leqslant\mu^{t}\tag{4} 
        
       
     i∈cpifσjt⩽μt(4)
 差异向量莱维突变:
  
      
       
        
         
          
          
           
            
             
              
               
              
             
            
            
             
              
               
                
                 
                 
                   v 
                  
                 
                   p 
                  
                 
                   t 
                  
                 
                
                  → 
                 
                
               
                 = 
                
                
                
                  L 
                 
                 
                 
                   p 
                  
                 
                   1 
                  
                 
                
                  t 
                 
                
               
                 ∙ 
                
               
                 ( 
                
                
                 
                 
                   x 
                  
                 
                   r 
                  
                  
                  
                    t 
                   
                  
                    2 
                   
                  
                 
                
                  → 
                 
                
               
                 , 
                
                
                 
                 
                   x 
                  
                 
                   r 
                  
                  
                  
                    t 
                   
                  
                    3 
                   
                  
                 
                
                  → 
                 
                
               
                 ) 
                
               
                 + 
                
                
                
                  L 
                 
                 
                 
                   p 
                  
                 
                   2 
                  
                 
                
                  t 
                 
                
               
                 ∙ 
                
               
                 ( 
                
                
                 
                 
                   x 
                  
                 
                   r 
                  
                  
                  
                    t 
                   
                  
                    4 
                   
                  
                 
                
                  → 
                 
                
               
                 , 
                
               
                 − 
                
               
                 , 
                
                
                 
                 
                   x 
                  
                 
                   r 
                  
                  
                  
                    t 
                   
                  
                    5 
                   
                  
                 
                
                  → 
                 
                
               
                 ) 
                
               
              
             
            
            
             
              
               
               
                 ∀ 
                
                
                
                  r 
                 
                
                  1 
                 
                
               
                 ≠ 
                
                
                
                  r 
                 
                
                  2 
                 
                
               
                 ≠ 
                
                
                
                  r 
                 
                
                  3 
                 
                
               
                 ≠ 
                
                
                
                  r 
                 
                
                  4 
                 
                
               
                 ≠ 
                
                
                
                  r 
                 
                
                  5 
                 
                
               
                 ≠ 
                
               
                 p 
                
               
                 ≠ 
                
               
                 ∈ 
                
               
                 { 
                
               
                 1 
                
               
                 , 
                
               
                 2 
                
               
                 , 
                
               
                 … 
                
               
                 , 
                
                
                
                  n 
                 
                
                  p 
                 
                
               
                 } 
                
                
                 
                 
                   x 
                  
                  
                  
                    r 
                   
                  
                    1 
                   
                  
                 
                   t 
                  
                 
                
                  → 
                 
                
               
              
             
            
           
          
          
          
          
            (5) 
           
          
         
        
       
         \begin{gathered} \\ \overrightarrow{v_{p}^{t}}=L_{p1}^{t}\bullet(\overrightarrow{x_{r}^{t_{2}}},\overrightarrow{x_{r}^{t_{3}}})+L_{p2}^{t}\bullet(\overrightarrow{x_{r}^{t_{4}}},-,\overrightarrow{x_{r}^{t_{5}}}) \\ \forall r^1\neq r^2\neq r^3\neq r^4\neq r^5\neq p\neq\in \{1,2,\ldots,n_p\} \overrightarrow{x_{r^1}^t} \end{gathered}\tag{5} 
        
       
     vpt=Lp1t∙(xrt2,xrt3)+Lp2t∙(xrt4,−,xrt5)∀r1=r2=r3=r4=r5=p=∈{1,2,…,np}xr1t(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{cases}v_{pj}^t \text{if} j \in c_p\\x_{pj}^t \text{if} j \notin c_p\end{cases}\tag{6} 
        
       
     Vpjt={vpjtifj∈cpxpjtifj∈/cp(6)
 选择策略,利用适应度函数值选择下一次迭代操作:
  
      
       
        
         
          
          
           
            
             
             
               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}\text{if}f(\overrightarrow{V_p^t})\geqslant f(\overrightarrow{x_p^t})\\\overrightarrow{v_p^t}\text{if}f(\overrightarrow{V_p^t})<f(\overrightarrow{x_p^t})\end{cases}\tag{7} 
        
       
     xpt+1=⎩ 
              ⎨ 
              ⎧xptiff(Vpt)⩾f(xpt)vptiff(Vpt)<f(xpt)(7)
 概率值Pp与发光强度fitp成比例:
  
      
       
        
         
          
          
           
            
            
              P 
             
            
              p 
             
            
           
             = 
            
            
             
             
               f 
              
             
               i 
              
              
              
                t 
               
              
                p 
               
              
             
             
              
              
                ∑ 
               
               
               
                 p 
                
               
                 = 
                
               
                 1 
                
               
               
               
                 n 
                
               
                 p 
                
               
              
             
               f 
              
             
               i 
              
              
              
                t 
               
              
                p 
               
              
             
            
           
          
          
          
          
            (8) 
           
          
         
        
       
         P_p=\frac{fit_p}{\sum_{p=1}^{n_p}fit_p}\tag{8} 
        
       
     Pp=∑p=1npfitpfitp(8)
 MSA通过将锥形顶点保持在固定角度,将蛾群朝向光源的飞行路径描述为围绕锥体表面的一组轨迹,将具有次发光强度的蛾群定义为探测蛾:
  
      
       
        
         
          
          
           
            
            
              n 
             
            
              f 
             
            
           
             = 
            
            
            
                
             
            
              r 
             
            
              o 
             
            
              u 
             
            
              n 
             
            
              d 
             
            
           
             ( 
            
           
             ( 
            
           
             n 
            
           
             − 
            
            
            
              n 
             
            
              p 
             
            
           
             ) 
            
           
             × 
            
           
             ( 
            
           
             1 
            
           
             − 
            
            
            
              t 
             
            
              T 
             
            
           
             ) 
            
           
             ) 
            
           
          
          
          
          
            (9) 
           
          
         
        
       
         n_f=\mathrm{~round}\Big((n-n_p)\times(1-\frac tT)\Big)\tag{9} 
        
       
     nf= round((n−np)×(1−Tt))(9)
 探测蛾个体xi根据下式螺旋飞行路径更新其位置:
  
      
       
        
         
          
          
           
            
            
              x 
             
            
              i 
             
             
             
               t 
              
             
               + 
              
             
               1 
              
             
            
           
             = 
            
           
             ∣ 
            
            
            
              x 
             
            
              i 
             
            
              t 
             
            
           
             − 
            
            
            
              x 
             
            
              p 
             
            
              t 
             
            
           
             ∣ 
            
           
             ∙ 
            
            
            
              e 
             
            
              θ 
             
            
           
             ∙ 
            
            
            
              c 
             
            
              o 
             
            
              s 
             
            
           
             2 
            
           
             π 
            
           
             θ 
            
           
             + 
            
            
            
              x 
             
            
              p 
             
            
              t 
             
            
            
           
             ∀ 
            
           
             p 
            
           
             ∈ 
            
           
             { 
            
           
             1 
            
           
             , 
            
           
             2 
            
           
             , 
            
           
             ⋅ 
            
           
             ⋅ 
            
           
             ⋅ 
            
           
             , 
            
            
            
              n 
             
            
              p 
             
            
           
             } 
            
           
             ; 
            
           
             i 
            
           
             ∈ 
            
           
             { 
            
            
            
              n 
             
            
              p 
             
            
           
             + 
            
           
             1 
            
           
             , 
            
            
            
              n 
             
            
              p 
             
            
           
             + 
            
           
             2 
            
           
             , 
            
           
             ⋅ 
            
           
             ⋅ 
            
           
             ⋅ 
            
           
             , 
            
            
            
              n 
             
            
              f 
             
            
           
             } 
            
           
          
          
          
          
            (10) 
           
          
         
        
       
         x_{i}^{t+1} = | x_{i}^{t}-x_{p}^{t} | \bullet e^{\theta} \bullet \mathrm{cos}2\pi\theta+x_{p}^{t}\\\forall p\in\{1,2,\cdotp\cdotp\cdotp,n_p\};i\in\{n_p+1,n_p+2,\cdotp\cdotp\cdotp,n_f\}\tag{10} 
        
       
     xit+1=∣xit−xpt∣∙eθ∙cos2πθ+xpt∀p∈{1,2,⋅⋅⋅,np};i∈{np+1,np+2,⋅⋅⋅,nf}(10)
 每种飞蛾类型是动态变化的,任何探测蛾发现比当前位置更佳的光源位置,探测蛾将被替换为勘探蛾。
 
蛾群中具有最低发光强度的蛾被认为是 观察蛾,这些蛾群旨在直接向最佳全局解漂游,新观察蛾进行高斯游走:
  
      
       
        
         
          
          
           
            
             
              
               
                
                
                  x 
                 
                
                  i 
                 
                 
                 
                   t 
                  
                 
                   + 
                  
                 
                   1 
                  
                 
                
               
                 = 
                
                
                
                  x 
                 
                
                  i 
                 
                
                  t 
                 
                
               
                 + 
                
                
                
                  ε 
                 
                
                  1 
                 
                
               
                 + 
                
                
                
                  [ 
                 
                 
                 
                   ε 
                  
                 
                   2 
                  
                 
                
                  × 
                 
                
                  b 
                 
                
                  e 
                 
                
                  s 
                 
                 
                 
                   t 
                  
                 
                   g 
                  
                 
                   t 
                  
                 
                
                  − 
                 
                 
                 
                   ε 
                  
                 
                   3 
                  
                 
                
                  × 
                 
                 
                 
                   x 
                  
                 
                   i 
                  
                 
                   t 
                  
                 
                
                  ] 
                 
                
               
              
             
            
            
             
              
               
               
                 ∀ 
                
               
                 i 
                
               
                 ∈ 
                
               
                 { 
                
               
                 1 
                
               
                 , 
                
               
                 2 
                
               
                 , 
                
               
                 ⋯ 
                 
               
                 , 
                
                
                
                  n 
                 
                
                  G 
                 
                
               
                 } 
                
               
              
             
            
            
             
              
               
                
                
                  ε 
                 
                
                  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 
                  
                 
                
                  ) 
                 
                
                  ) 
                 
                
               
              
             
            
           
          
          
          
          
            (11) 
           
          
         
        
       
         \begin{gathered} x_{i}^{t+1} = x_{i}^{t}+\varepsilon_{1}+\left[\varepsilon_{2}\times best_{g}^{t}-\varepsilon_{3}\times x_{i}^{t}\right] \\ \forall i\in\{1,2,\cdots,n_{G}\} \\ \varepsilon_{1}\sim\mathrm{random}(\mathrm{size}(d))\oplus \\ N\left(best_g^t,\frac{\log t}{t}\times(x_i^t-best_g^t) \right) \end{gathered}\tag{11} 
        
       
     xit+1=xit+ε1+[ε2×bestgt−ε3×xit]∀i∈{1,2,⋯,nG}ε1∼random(size(d))⊕N(bestgt,tlogt×(xit−bestgt))(11)
 观察蛾位置更新:
  
      
       
        
         
          
          
           
            
            
              x 
             
            
              i 
             
             
             
               t 
              
             
               + 
              
             
               1 
              
             
            
           
             = 
            
            
            
              x 
             
            
              i 
             
            
              t 
             
            
           
             + 
            
           
             0.001 
            
           
             ∙ 
            
           
             T 
            
           
             [ 
            
            
            
              x 
             
            
              i 
             
            
              t 
             
            
           
             − 
            
            
            
              x 
             
            
              i 
             
            
              min 
             
            
               
             
            
           
             , 
            
            
            
              x 
             
            
              i 
             
            
              max 
             
            
               
             
            
           
             − 
            
            
            
              x 
             
            
              i 
             
            
              t 
             
            
           
             ] 
            
           
             + 
            
            
           
             ( 
            
           
             1 
            
           
             − 
            
           
             t 
            
           
             / 
            
           
             T 
            
           
             ) 
            
           
             ∙ 
            
            
            
              r 
             
            
              1 
             
            
           
             ∙ 
            
           
             ( 
            
           
             b 
            
           
             e 
            
           
             s 
            
            
            
              t 
             
            
              p 
             
            
              t 
             
            
           
             − 
            
            
            
              x 
             
            
              i 
             
            
              t 
             
            
           
             ) 
            
           
             + 
            
           
             2 
            
           
             t 
            
           
             / 
            
           
             T 
            
           
             ∙ 
            
            
            
              r 
             
            
              2 
             
            
           
             ∙ 
            
           
             ( 
            
           
             b 
            
           
             e 
            
           
             s 
            
            
            
              t 
             
            
              p 
             
            
              t 
             
            
           
             − 
            
            
            
              x 
             
            
              i 
             
            
              t 
             
            
           
             ) 
            
           
          
          
          
          
            (12) 
           
          
         
        
       
         x_{i}^{t+1}=x_{i}^{t}+0.001\bullet T[x_{i}^{t}-x_{i}^{\min},x_{i}^{\max}-x_{i}^{t}]+\\(1-t/T)\bullet r_{1}\bullet(best_{p}^{t}-x_{i}^{t})+2t/T\bullet r_{2}\bullet(best_{p}^{t}-x_{i}^{t})\tag{12} 
        
       
     xit+1=xit+0.001∙T[xit−ximin,ximax−xit]+(1−t/T)∙r1∙(bestpt−xit)+2t/T∙r2∙(bestpt−xit)(12)
流程图:
 
3.结果展示

4.参考文献
[1] Mohamed A A A, Mohamed Y S, El-Gaafary A A M, et al. Optimal power flow using moth swarm algorithm[J]. Electric Power Systems Research, 2017, 142: 190-206.










