2024年群智能SCI1区TOP:混沌可行性恢复粒子群算法CEPSO,深度解析+性能实测
目录
- 1.摘要
 - 2.改进策略
 - 3.结果展示
 - 4.参考文献
 - 5.代码获取
 

1.摘要
本文研究了解决二阶段非线性固定费用运输问题(Two-stage NFCTP),该问题的特点是每条运输弧线都与固定费用和与运输量的平方成正比的变量费用相关联。由于涉及固定费用和非线性组件,问题被归类为NP-hard问题,因此本文提出了混沌可行性恢复粒子群算法(CEPSO),该算法引入非线性自适应惯性权重和加速度系数,以改善搜索过程中的探索和开发能力;集成十种混沌映射到加速度系数,进一步提升优化性能;采用可行性恢复机制,包括约束遵循调整和比例调整程序,确保生成的解始终满足可行性要求。
2.改进策略
位置更新
在PSO算法中,速度更新方程中的惯性权重 
     
      
       
       
         w 
        
       
      
        w 
       
      
    w和加速度系数 
     
      
       
        
        
          c 
         
        
          1 
         
        
       
         , 
        
        
        
          c 
         
        
          2 
         
        
       
      
        c_1,c_2 
       
      
    c1,c2是引导搜索向最优解靠近的关键因素。本研究对这两个关键参数进行了改进:
  
      
       
        
        
          { 
         
         
          
           
            
             
              
              
                c 
               
              
                1 
               
              
             
               ( 
              
             
               t 
              
             
               ) 
              
             
               = 
              
              
              
                c 
               
               
               
                 m 
                
               
                 a 
                
               
                 x 
                
               
              
             
               − 
              
             
               ( 
              
              
              
                c 
               
               
               
                 m 
                
               
                 a 
                
               
                 x 
                
               
              
             
               − 
              
              
              
                c 
               
               
               
                 m 
                
               
                 i 
                
               
                 n 
                
               
              
             
               ) 
              
             
               ∗ 
              
             
               ( 
              
             
               t 
              
             
               / 
              
              
              
                t 
               
               
               
                 m 
                
               
                 a 
                
               
                 x 
                
               
              
              
              
                ) 
               
               
               
                 ϕ 
                
               
                 1 
                
               
              
             
               , 
              
             
            
           
          
          
           
            
             
              
              
                c 
               
              
                2 
               
              
             
               ( 
              
             
               t 
              
             
               ) 
              
             
               = 
              
              
              
                c 
               
               
               
                 m 
                
               
                 i 
                
               
                 n 
                
               
              
             
               + 
              
             
               ( 
              
              
              
                c 
               
               
               
                 m 
                
               
                 a 
                
               
                 x 
                
               
              
             
               − 
              
              
              
                c 
               
               
               
                 m 
                
               
                 i 
                
               
                 n 
                
               
              
             
               ) 
              
             
               ∗ 
              
             
               ( 
              
             
               t 
              
             
               / 
              
              
              
                t 
               
               
               
                 m 
                
               
                 a 
                
               
                 x 
                
               
              
              
              
                ) 
               
               
               
                 ϕ 
                
               
                 1 
                
               
              
             
               , 
              
             
            
           
          
          
           
            
             
             
               ω 
              
             
               ( 
              
             
               t 
              
             
               ) 
              
             
               = 
              
              
              
                ω 
               
               
               
                 m 
                
               
                 a 
                
               
                 x 
                
               
              
             
               − 
              
             
               ( 
              
              
              
                ω 
               
               
               
                 m 
                
               
                 a 
                
               
                 x 
                
               
              
             
               − 
              
              
              
                ω 
               
               
               
                 m 
                
               
                 i 
                
               
                 n 
                
               
              
             
               ) 
              
             
               ∗ 
              
             
               ( 
              
             
               t 
              
             
               / 
              
              
              
                t 
               
               
               
                 m 
                
               
                 a 
                
               
                 x 
                
               
              
              
              
                ) 
               
               
               
                 ϕ 
                
               
                 2 
                
               
              
             
               , 
              
             
            
           
           
            
             
            
           
          
         
        
       
         \begin{cases} c_1(t)=c_{max}-(c_{max}-c_{min})*(t/t_{max})^{\phi_1}, \\ c_2(t)=c_{min}+(c_{max}-c_{min})*(t/t_{max})^{\phi_1}, \\ \omega(t)=\omega_{max}-(\omega_{max}-\omega_{min})*(t/t_{max})^{\phi_2}, & \end{cases} 
        
       
     ⎩ 
              ⎨ 
              ⎧c1(t)=cmax−(cmax−cmin)∗(t/tmax)ϕ1,c2(t)=cmin+(cmax−cmin)∗(t/tmax)ϕ1,ω(t)=ωmax−(ωmax−ωmin)∗(t/tmax)ϕ2,

为了进一步增强所提算法的优化能力,论文将混沌映射引入了第一步中定义的加速度系数。混沌映射的引入为算法增加了锯齿形的特性,从而提升了搜索过程的多样性和跳跃性,归一化:
  
      
       
        
         
          
           
            
            
              n 
             
            
              o 
             
            
              r 
             
             
             
               m 
              
              
              
                c 
               
               
               
                 h 
                
               
                 m 
                
               
              
             
            
              ( 
             
            
              t 
             
            
              ) 
             
            
              = 
             
             
              
              
                ( 
               
              
                c 
               
               
               
                 h 
                
               
                 m 
                
               
              
                ( 
               
              
                t 
               
              
                ) 
               
              
                − 
               
              
                a 
               
              
                ) 
               
              
                × 
               
              
                ( 
               
              
                c 
               
              
                h 
               
              
                V 
               
              
                a 
               
              
                l 
               
              
                u 
               
              
                e 
               
              
                ( 
               
              
                t 
               
              
                ) 
               
              
                − 
               
              
                0 
               
              
                ) 
               
              
              
              
                b 
               
              
                − 
               
              
                a 
               
              
             
            
              + 
             
            
              0 
             
            
              , 
             
            
           
          
         
         
          
           
            
            
              = 
             
             
              
              
                ( 
               
              
                c 
               
               
               
                 h 
                
               
                 m 
                
               
              
                ( 
               
              
                t 
               
              
                ) 
               
              
                − 
               
              
                a 
               
              
                ) 
               
              
                × 
               
              
                c 
               
              
                h 
               
              
                V 
               
              
                a 
               
              
                l 
               
              
                u 
               
              
                e 
               
              
                ( 
               
              
                t 
               
              
                ) 
               
              
              
              
                b 
               
              
                − 
               
              
                a 
               
              
             
            
              , 
             
            
           
          
         
        
       
         \begin{gathered} norm_{ch_{m}}(t)=\frac{(ch_{m}(t)-a)\times(chValue(t)-0)}{b-a}+0, \\ =\frac{(ch_{m}(t)-a)\times chValue(t)}{b-a}, \end{gathered} 
        
       
     normchm(t)=b−a(chm(t)−a)×(chValue(t)−0)+0,=b−a(chm(t)−a)×chValue(t),
  
     
      
       
       
         m 
        
       
      
        m 
       
      
    m表示混沌映射的索引, 
     
      
       
       
         c 
        
       
         h 
        
       
         V 
        
       
         a 
        
       
         l 
        
       
         u 
        
       
         e 
        
       
         ( 
        
       
         t 
        
       
         ) 
        
       
      
        chV alue(t) 
       
      
    chValue(t)表示归一化范围且随着每次迭代按比例减小:
  
      
       
        
        
          c 
         
        
          h 
         
        
          V 
         
        
          a 
         
        
          l 
         
        
          u 
         
        
          e 
         
        
          ( 
         
        
          t 
         
        
          ) 
         
        
          = 
         
        
          c 
         
        
          h 
         
        
          M 
         
        
          a 
         
        
          x 
         
        
          − 
         
        
          ( 
         
        
          c 
         
        
          h 
         
        
          M 
         
        
          a 
         
        
          x 
         
        
          − 
         
        
          c 
         
        
          h 
         
        
          M 
         
        
          i 
         
        
          n 
         
        
          ) 
         
        
          ∗ 
         
        
          ( 
         
        
          t 
         
        
          / 
         
         
         
           t 
          
          
          
            m 
           
          
            a 
           
          
            x 
           
          
         
        
          ) 
         
        
       
         chValue(t)=chMax-(chMax-chMin)*(t/t_{max}) 
        
       
     chValue(t)=chMax−(chMax−chMin)∗(t/tmax)
 因此,混沌加速系数:
  
      
       
        
        
          { 
         
         
          
           
            
             
              
              
                c 
               
              
                1 
               
              
                ′ 
               
              
             
               ( 
              
             
               t 
              
             
               ) 
              
             
               = 
              
             
               n 
              
             
               o 
              
             
               r 
              
              
              
                m 
               
               
               
                 c 
                
                
                
                  h 
                 
                
                  m 
                 
                
               
              
             
               ( 
              
             
               t 
              
             
               ) 
              
             
               + 
              
              
              
                c 
               
              
                1 
               
              
             
               ( 
              
             
               t 
              
             
               ) 
              
             
               , 
              
             
            
           
          
          
           
            
             
              
              
                c 
               
              
                2 
               
              
                ′ 
               
              
             
               ( 
              
             
               t 
              
             
               ) 
              
             
               = 
              
             
               n 
              
             
               o 
              
             
               r 
              
              
              
                m 
               
               
               
                 c 
                
                
                
                  h 
                 
                
                  m 
                 
                
               
              
             
               ( 
              
             
               t 
              
             
               ) 
              
             
               + 
              
              
              
                c 
               
              
                2 
               
              
             
               ( 
              
             
               t 
              
             
               ) 
              
             
               . 
              
             
            
           
           
            
             
            
           
          
         
        
       
         \begin{cases} c_{1}^{\prime}(t)=norm_{ch_{m}}(t)+c_{1}(t), \\ c_{2}^{\prime}(t)=norm_{ch_{m}}(t)+c_{2}(t). & \end{cases} 
        
       
     {c1′(t)=normchm(t)+c1(t),c2′(t)=normchm(t)+c2(t).

将混沌映射积分到加速度系数后,CEPSO中每个粒子更新后的速度和位置更新:
  
      
       
        
        
          { 
         
         
          
           
            
             
              
              
                v 
               
               
               
                 i 
                
               
                 , 
                
               
                 k 
                
               
              
             
               ( 
              
             
               t 
              
             
               + 
              
             
               1 
              
             
               ) 
              
             
            
           
          
          
           
            
             
             
               = 
              
             
               ω 
              
             
               ( 
              
             
               t 
              
             
               ) 
              
             
               ⋅ 
              
              
              
                v 
               
               
               
                 i 
                
               
                 , 
                
               
                 k 
                
               
              
             
               ( 
              
             
               t 
              
             
               ) 
              
             
               + 
              
              
              
                c 
               
              
                1 
               
              
                ′ 
               
              
             
               ( 
              
             
               t 
              
             
               ) 
              
              
              
                r 
               
              
                1 
               
              
             
               ⋅ 
              
             
               ( 
              
              
              
                x 
               
               
               
                 p 
                
               
                 b 
                
               
                 e 
                
               
                 s 
                
                
                
                  t 
                 
                
                  l 
                 
                
               
              
             
               ( 
              
             
               t 
              
             
               ) 
              
             
               − 
              
              
              
                x 
               
               
               
                 i 
                
               
                 , 
                
               
                 k 
                
               
              
             
               ( 
              
             
               t 
              
             
               ) 
              
             
               ) 
              
             
               + 
              
              
              
                c 
               
              
                2 
               
              
                ′ 
               
              
             
               ( 
              
             
               t 
              
             
               ) 
              
              
              
                r 
               
              
                2 
               
              
             
               ⋅ 
              
             
               ( 
              
              
              
                x 
               
               
               
                 g 
                
               
                 b 
                
               
                 e 
                
               
                 s 
                
               
                 t 
                
               
              
             
               ( 
              
             
               t 
              
             
               ) 
              
             
               − 
              
              
              
                x 
               
               
               
                 i 
                
               
                 , 
                
               
                 k 
                
               
              
             
               ( 
              
             
               t 
              
             
               ) 
              
             
               ) 
              
             
               , 
              
             
            
           
          
          
           
            
             
              
              
                x 
               
               
               
                 i 
                
               
                 , 
                
               
                 k 
                
               
              
             
               ( 
              
             
               t 
              
             
               + 
              
             
               1 
              
             
               ) 
              
             
               = 
              
              
              
                x 
               
               
               
                 i 
                
               
                 , 
                
               
                 k 
                
               
              
             
               ( 
              
             
               t 
              
             
               ) 
              
             
               + 
              
              
              
                v 
               
               
               
                 i 
                
               
                 , 
                
               
                 k 
                
               
              
             
               ( 
              
             
               t 
              
             
               + 
              
             
               1 
              
             
               ) 
              
             
               , 
              
             
            
           
           
            
             
            
           
          
         
        
       
         \begin{cases} v_{i,k}(t+1) \\ =\omega(t)\cdot v_{i,k}(t)+c_1^{\prime}(t)r_1\cdot(x_{pbest_l}(t)-x_{i,k}(t))+c_2^{\prime}(t)r_2\cdot(x_{gbest}(t)-x_{i,k}(t)), \\ x_{i,k}(t+1)=x_{i,k}(t)+v_{i,k}(t+1), & \end{cases} 
        
       
     ⎩ 
              ⎨ 
              ⎧vi,k(t+1)=ω(t)⋅vi,k(t)+c1′(t)r1⋅(xpbestl(t)−xi,k(t))+c2′(t)r2⋅(xgbest(t)−xi,k(t)),xi,k(t+1)=xi,k(t)+vi,k(t+1),
伪代码

3.结果展示

 
4.参考文献
[1] Chauhan D, Rani D. A feasibility restoration particle swarm optimizer with chaotic maps for two-stage fixed-charge transportation problems[J]. Swarm and Evolutionary Computation, 2024, 91: 101776.
