目录
- 1.算法原理
- 2.改进点
- 3.结果展示
- 4.参考文献
- 5.代码获取
 
1.算法原理
【智能算法】黑猩猩优化算法(ChOA)原理及实现
2.改进点
改进的 Sine 混沌映射初始化种群
ChoA 种群随机初始化的方法导致种群多样性、均匀性差、容易出现边界聚集现象, 而混沌映射可以有效的改善上述问题。引入 Chebyshev 映射将 Sine 映射进行改进:
  
      
       
        
         
          
          
           
           
             P 
            
            
            
              ( 
             
            
              t 
             
            
              ) 
             
            
           
             = 
            
            
            
              μ 
             
            
              ∗ 
             
            
           
             sin 
            
           
              
            
           
             ( 
            
           
             π 
            
           
             X 
            
            
            
              ( 
             
            
              t 
             
            
              − 
             
            
              1 
             
            
              ) 
             
            
           
             ) 
            
           
             + 
            
           
             λ 
            
           
             cos 
            
           
              
            
           
             ( 
            
            
            
              i 
             
            
              ∗ 
             
            
            
             
             
               cos 
              
             
                
              
             
             
             
               − 
              
             
               1 
              
             
            
           
             ( 
            
           
             X 
            
            
            
              ( 
             
            
              t 
             
            
              − 
             
            
              1 
             
            
              ) 
             
            
           
             ) 
            
           
             ) 
            
            
            
            
              { 
             
             
              
               
                
                 
                 
                   W 
                  
                  
                  
                    ( 
                   
                  
                    t 
                   
                  
                    ) 
                   
                  
                 
                   = 
                  
                 
                   μ 
                  
                 
                   sin 
                  
                 
                    
                  
                 
                   ( 
                  
                 
                   π 
                  
                 
                   W 
                  
                  
                  
                    ( 
                   
                  
                    t 
                   
                  
                    − 
                   
                  
                    1 
                   
                  
                    ) 
                   
                  
                 
                   ) 
                  
                 
                   + 
                  
                 
                   λ 
                  
                 
                   cos 
                  
                 
                    
                  
                 
                   ( 
                  
                  
                  
                    t 
                   
                  
                    ∗ 
                   
                  
                  
                   
                   
                     cos 
                    
                   
                      
                    
                   
                   
                   
                     − 
                    
                   
                     1 
                    
                   
                  
                 
                   ( 
                  
                 
                   W 
                  
                  
                  
                    ( 
                   
                  
                    t 
                   
                  
                    − 
                   
                  
                    1 
                   
                  
                    ) 
                   
                  
                 
                   ) 
                  
                 
                
               
              
              
               
                
                 
                 
                   O 
                  
                  
                  
                    ( 
                   
                  
                    t 
                   
                  
                    ) 
                   
                  
                 
                   = 
                  
                 
                   μ 
                  
                 
                   sin 
                  
                 
                    
                  
                 
                   ( 
                  
                 
                   π 
                  
                 
                   O 
                  
                  
                  
                    ( 
                   
                  
                    t 
                   
                  
                    − 
                   
                  
                    1 
                   
                  
                    ) 
                   
                  
                 
                   ) 
                  
                 
                   + 
                  
                 
                   λ 
                  
                 
                   cos 
                  
                 
                    
                  
                 
                   ( 
                  
                  
                  
                    t 
                   
                  
                    ∗ 
                   
                  
                  
                   
                   
                     cos 
                    
                   
                      
                    
                   
                   
                   
                     − 
                    
                   
                     1 
                    
                   
                  
                 
                   ( 
                  
                 
                   O 
                  
                  
                  
                    ( 
                   
                  
                    t 
                   
                  
                    − 
                   
                  
                    1 
                   
                  
                    ) 
                   
                  
                 
                   ) 
                  
                 
                
               
              
              
               
                
                 
                 
                   E 
                  
                  
                  
                    ( 
                   
                  
                    t 
                   
                  
                    ) 
                   
                  
                 
                   = 
                  
                 
                   μ 
                  
                 
                   sin 
                  
                 
                    
                  
                 
                   ( 
                  
                 
                   π 
                  
                 
                   E 
                  
                  
                  
                    ( 
                   
                  
                    t 
                   
                  
                    − 
                   
                  
                    1 
                   
                  
                    ) 
                   
                  
                 
                   ) 
                  
                 
                   + 
                  
                 
                   λ 
                  
                 
                   cos 
                  
                 
                    
                  
                 
                   ( 
                  
                  
                  
                    t 
                   
                  
                    ∗ 
                   
                  
                  
                   
                   
                     cos 
                    
                   
                      
                    
                   
                   
                   
                     − 
                    
                   
                     1 
                    
                   
                  
                 
                   ( 
                  
                 
                   E 
                  
                  
                  
                    ( 
                   
                  
                    t 
                   
                  
                    − 
                   
                  
                    1 
                   
                  
                    ) 
                   
                  
                 
                   ) 
                  
                 
                
               
              
              
               
                
                 
                 
                   H 
                  
                  
                  
                    ( 
                   
                  
                    t 
                   
                  
                    ) 
                   
                  
                 
                   = 
                  
                 
                   μ 
                  
                 
                   sin 
                  
                 
                    
                  
                 
                   ( 
                  
                 
                   π 
                  
                 
                   H 
                  
                  
                  
                    ( 
                   
                  
                    t 
                   
                  
                    − 
                   
                  
                    1 
                   
                  
                    ) 
                   
                  
                 
                   ) 
                  
                 
                   + 
                  
                 
                   λ 
                  
                 
                   cos 
                  
                 
                    
                  
                 
                   ( 
                  
                  
                  
                    t 
                   
                  
                    ∗ 
                   
                  
                  
                   
                   
                     cos 
                    
                   
                      
                    
                   
                   
                   
                     − 
                    
                   
                     1 
                    
                   
                  
                 
                   ( 
                  
                 
                   H 
                  
                  
                  
                    ( 
                   
                  
                    t 
                   
                  
                    − 
                   
                  
                    1 
                   
                  
                    ) 
                   
                  
                 
                   ) 
                  
                 
                
               
              
              
               
                
                 
                 
                   X 
                  
                  
                  
                    ( 
                   
                  
                    t 
                   
                  
                    ) 
                   
                  
                 
                   = 
                  
                  
                  
                    m 
                   
                  
                    o 
                   
                  
                    d 
                   
                  
                  
                  
                    ( 
                   
                  
                    W 
                   
                   
                   
                     ( 
                    
                   
                     t 
                    
                   
                     ) 
                    
                   
                  
                    + 
                   
                  
                    O 
                   
                   
                   
                     ( 
                    
                   
                     t 
                    
                   
                     ) 
                    
                   
                  
                    + 
                   
                  
                    E 
                   
                   
                   
                     ( 
                    
                   
                     t 
                    
                   
                     ) 
                    
                   
                  
                    + 
                   
                  
                    H 
                   
                   
                   
                     ( 
                    
                   
                     t 
                    
                   
                     ) 
                    
                   
                  
                    , 
                   
                  
                    1 
                   
                  
                    ) 
                   
                  
                 
                
               
              
             
            
           
          
          
          
          
            (1) 
           
          
         
        
       
         P\left(t\right)=\mu^*\sin(\pi X\left(t-1\right))+\lambda\cos(i^*\cos^{-1}(X\left(t-1\right)))\\\begin{cases}W\left(t\right)=\mu\sin(\pi W\left(t-1\right))+\lambda\cos(t^*\cos^{-1}(W\left(t-1\right))\\O\left(t\right)=\mu\sin(\pi O\left(t-1\right))+\lambda\cos(t^*\cos^{-1}(O\left(t-1\right))\\E\left(t\right)=\mu\sin(\pi E\left(t-1\right))+\lambda\cos(t^*\cos^{-1}(E\left(t-1\right))\\H\left(t\right)=\mu\sin(\pi H\left(t-1\right))+\lambda\cos(t^*\cos^{-1}(H\left(t-1\right))\\X\left(t\right)=\mathrm{mod}\left(W\left(t\right)+O\left(t\right)+E\left(t\right)+H\left(t\right),1\right)\end{cases}\tag{1} 
        
       
     P(t)=μ∗sin(πX(t−1))+λcos(i∗cos−1(X(t−1)))⎩ 
              ⎨ 
              ⎧W(t)=μsin(πW(t−1))+λcos(t∗cos−1(W(t−1))O(t)=μsin(πO(t−1))+λcos(t∗cos−1(O(t−1))E(t)=μsin(πE(t−1))+λcos(t∗cos−1(E(t−1))H(t)=μsin(πH(t−1))+λcos(t∗cos−1(H(t−1))X(t)=mod(W(t)+O(t)+E(t)+H(t),1)(1)
PSO 思想和非线性收敛因子
为调节 ChoA 算法前期、后期的全局、局部搜索能力的平衡,引进粒子群思想改进 ChoA 算法个体位置迭代方式,实现黑猩猩个体与种群之间的信息交流。位置更新公式:
  
      
       
        
         
          
          
           
           
             X 
            
            
            
              ( 
             
            
              t 
             
            
              + 
             
            
              1 
             
            
              ) 
             
            
           
             = 
            
           
             C 
            
           
             ∗ 
            
           
             ( 
            
           
             r 
            
           
             a 
            
           
             n 
            
           
             d 
            
           
             ∗ 
            
           
             w 
            
           
             ∗ 
            
           
             ( 
            
            
            
              X 
             
            
              1 
             
            
           
             + 
            
            
            
              X 
             
            
              2 
             
            
           
             + 
            
            
            
              X 
             
            
              3 
             
            
           
             + 
            
            
            
              X 
             
            
              4 
             
            
           
             ) 
            
           
             + 
            
           
             r 
            
           
             a 
            
           
             n 
            
           
             d 
            
           
             ∗ 
            
           
             ( 
            
            
            
              X 
             
            
              1 
             
            
           
             − 
            
           
             X 
            
           
             ( 
            
           
             t 
            
           
             ) 
            
           
             ) 
            
           
             ) 
            
           
          
          
          
          
            (2) 
           
          
         
        
       
         X\left(t+1\right)=C*\Big(rand*w*\Big(X_{1}+X_{2}+X_{3}+X_{4}\Big)+rand*\Big(X_{1}-X\big(t\big)\big)\Big)\tag{2} 
        
       
     X(t+1)=C∗(rand∗w∗(X1+X2+X3+X4)+rand∗(X1−X(t)))(2)
 式中 w 为惯性权重系数, C 为加速因子。惯性权重 w、加速因子 C 取值关系到粒子过去的运动状态对现在运动状态的影响,当 w、 C 变大时,粒子的搜索空间会扩大,当 w、 C 变小时,粒子运动方向多变,会导致算法陷入局部最优状态。通过调节 w、 C 的值来平衡算法局部搜索、全局搜索的能力,提高算法的收敛速度。参数C:
  
      
       
        
         
          
          
           
           
             C 
            
           
             = 
            
           
             g 
            
           
             ∗ 
            
            
             
             
               e 
              
              
              
                − 
               
              
                0.1 
               
               
               
                 t 
                
               
              
             
             
             
               t 
              
             
               max 
              
             
                
              
             
            
           
             ∗ 
            
           
             cos 
            
           
              
            
            
            
              ( 
             
            
              0.1 
             
            
              t 
             
            
              + 
             
            
              24.5 
             
            
              ) 
             
            
           
             + 
            
           
             1.1 
            
           
          
          
          
          
            (3) 
           
          
         
        
       
         C=g*\frac{e^{-0.1\sqrt{t}}}{t_{\max}}*\cos\left(0.1t+24.5\right)+1.1\tag{3} 
        
       
     C=g∗tmaxe−0.1t∗cos(0.1t+24.5)+1.1(3)
 
 非线性惯性权重因子:
  
      
       
        
         
          
          
           
           
             w 
            
           
             = 
            
           
             0.5 
            
           
             ∗ 
            
           
             ( 
            
            
            
              w 
             
            
              max 
             
            
               
             
            
           
             − 
            
            
             
             
               t 
              
             
               ∗ 
              
             
               ( 
              
              
              
                w 
               
              
                max 
               
              
                 
               
              
             
               − 
              
              
              
                w 
               
              
                min 
               
              
                 
               
              
             
               ) 
              
             
             
             
               t 
              
             
               max 
              
             
                
              
             
            
           
             ∗ 
            
            
             
             
               cos 
              
             
                
              
             
            
              2 
             
            
           
             ( 
            
           
             0.5 
            
           
             ∗ 
            
           
             t 
            
           
             ) 
            
           
             ) 
            
           
          
          
          
          
            (4) 
           
          
         
        
       
         w=0.5*\Bigg(w_{\max}-\frac{t*(w_{\max}-w_{\min})}{t_{\max}}*\cos^2(0.5*t)\Bigg)\tag{4} 
        
       
     w=0.5∗(wmax−tmaxt∗(wmax−wmin)∗cos2(0.5∗t))(4)
 
 改进的麻雀精英变异和 Bernoulli 混沌映射
在 ChoA 算法中,个体更新会受到每次迭代中最后一个最优个体影响,因此在迭代过程中 ChoA算法容易收敛到局部最优。针对上述问题,提出自适应水波因子改进的麻雀精英突变和 Bernoulli 混沌映射相结合的优化策略。
用麻雀精英突变将具有较高搜索性能个体的能力赋予当前最优个体。在每次 ChoA 迭代时,对当前适应度值前 40%的个体赋予较强的化能力,同时在突变个体更新公式中加入自适应水波因子:
  
      
       
        
         
          
          
           
           
             X 
            
            
             
             
               ( 
              
             
               t 
              
             
               + 
              
             
               1 
              
             
               ) 
              
             
            
              0.4 
             
            
           
             = 
            
            
            
              { 
             
             
              
               
                
                 
                 
                   X 
                  
                 
                   ( 
                  
                 
                   t 
                  
                  
                  
                    ) 
                   
                  
                    0.4 
                   
                  
                 
                   ⋅ 
                  
                 
                   v 
                  
                 
                   ⋅ 
                  
                 
                   exp 
                  
                 
                    
                  
                 
                   ( 
                  
                 
                   − 
                  
                  
                  
                    t 
                   
                   
                   
                     α 
                    
                   
                     ⋅ 
                    
                    
                    
                      t 
                     
                    
                      max 
                     
                    
                       
                     
                    
                   
                  
                 
                   ) 
                  
                 
                   R 
                  
                 
                   < 
                  
                 
                   S 
                  
                 
                   T 
                  
                 
                
               
              
              
               
                
                 
                
               
              
              
               
                
                 
                 
                   X 
                  
                 
                   ( 
                  
                 
                   t 
                  
                  
                  
                    ) 
                   
                  
                    0.4 
                   
                  
                 
                   + 
                  
                 
                   v 
                  
                 
                   ⋅ 
                  
                 
                   Q 
                  
                 
                   ⋅ 
                  
                 
                   L 
                  
                 
                
               
              
             
            
           
          
          
          
          
            (5) 
           
          
         
        
       
         X\left(t+1\right)_{0.4}=\begin{cases}X(t)_{0.4}\cdot v\cdot\exp(-\frac{t}{\alpha\cdot t_{\max}}) R<ST\\\\X(t)_{0.4}+v\cdot Q\cdot L\end{cases}\tag{5} 
        
       
     X(t+1)0.4=⎩ 
              ⎨ 
              ⎧X(t)0.4⋅v⋅exp(−α⋅tmaxt)R<STX(t)0.4+v⋅Q⋅L(5)
 自适应水波因子:
  
      
       
        
         
          
          
           
           
             ν 
            
           
             = 
            
           
             1 
            
           
             − 
            
           
             sin 
            
           
              
            
            
            
              ( 
             
             
              
              
                π 
               
              
                ⋅ 
               
              
                t 
               
              
              
              
                2 
               
              
                ⋅ 
               
               
               
                 t 
                
               
                 max 
                
               
                  
                
               
              
             
            
              + 
             
            
              2 
             
            
              ⋅ 
             
            
              π 
             
            
              ) 
             
            
           
          
          
          
          
            (6) 
           
          
         
        
       
         \nu=1-\sin\left(\frac{\pi\cdot t}{2\cdot t_{\max}}+2\cdot\pi\right)\tag{6} 
        
       
     ν=1−sin(2⋅tmaxπ⋅t+2⋅π)(6)
 Bernoulli 混沌映射:
  
      
       
        
         
          
          
           
            
            
              Z 
             
             
             
               t 
              
             
               + 
              
             
               1 
              
             
            
           
             = 
            
            
            
              { 
             
             
              
               
                
                 
                  
                  
                    Z 
                   
                  
                    t 
                   
                  
                 
                   / 
                  
                  
                  
                    ( 
                   
                  
                    1 
                   
                  
                    − 
                   
                  
                    λ 
                   
                  
                    ) 
                   
                  
                 
                
               
               
                
                 
                  
                  
                    Z 
                   
                  
                    t 
                   
                  
                 
                   ∈ 
                  
                  
                  
                    ( 
                   
                  
                    0 
                   
                  
                    , 
                   
                  
                    1 
                   
                  
                    − 
                   
                  
                    λ 
                   
                  
                    ] 
                   
                  
                 
                
               
              
              
               
                
                 
                  
                  
                    ( 
                   
                   
                   
                     Z 
                    
                   
                     t 
                    
                   
                  
                    − 
                   
                  
                    1 
                   
                  
                    + 
                   
                  
                    λ 
                   
                  
                    ) 
                   
                  
                 
                   / 
                  
                 
                   λ 
                  
                 
                
               
               
                
                 
                  
                  
                    Z 
                   
                  
                    t 
                   
                  
                 
                   ∈ 
                  
                  
                  
                    ( 
                   
                  
                    0 
                   
                  
                    , 
                   
                  
                    1 
                   
                  
                    − 
                   
                  
                    λ 
                   
                  
                    ] 
                   
                  
                 
                
               
              
             
            
           
          
          
          
          
            (7) 
           
          
         
        
       
         Z_{t+1}=\begin{cases}Z_t /\left(1-\lambda\right)&Z_t\in\left(0,1-\lambda\right]\\\left(Z_t-1+\lambda\right)/\lambda&Z_t\in\left(0,1-\lambda\right]\end{cases}\tag{7} 
        
       
     Zt+1={Zt/(1−λ)(Zt−1+λ)/λZt∈(0,1−λ]Zt∈(0,1−λ](7)
 比较个体适应度值 f 与平均适应度值 favg,若 f<favg 时,进行 Brenoylli 扰动,判断扰动后个体是否优于原个体,优于则进行更新,否则保持原个体不变;若 f>favg 时,进行麻雀精英变异,优于原个体进行替换,否则保持。
3.结果展示

 
 
 
 
 
 
 
 
工程应用

4.参考文献
[1] 张福兴,高腾,吴泓达.多策略融合的改进黑猩猩搜索算法及其应用[J/OL].北京航空航天大学学报,1-15[2024-08-01].






![数据结构(邓俊辉)学习笔记】串 05——KMP算法:理解next[]表](https://i-blog.csdnimg.cn/direct/7e83659b46054e22a29616a9cf6806e7.png)











