文章目录
- 【`获取资源`请见文章第5节:资源获取】
 - 1. 原始沙丘猫群优化算法
 - 2. 改进沙丘猫群算法
 - 2.1 Logistic混沌映射种群初始化
 - 2.2 透镜成像折射反向学习策略
 - 2.3 动态因子
 - 2.4 黄金正弦策略
 
- 3. 部分代码展示
 - 4. 仿真结果展示
 - 5. 资源获取
 
【获取资源请见文章第5节:资源获取】
 
1. 原始沙丘猫群优化算法

 
 
2. 改进沙丘猫群算法
2.1 Logistic混沌映射种群初始化
种群个体的初始位置对群体智能算法本身的优化效果起着关键作用。常用的混沌映射有Logistic映射、Tent映射、Henon映射、Chebyshev映射和组合混沌映射。本文选择Logistic映射是因为它比其他混沌映射具有更好的遍历性、自相关性和相互相关性。因此,使用Logistic混沌映射对种群进行初始化,使得种群分布更加均衡,从而提高了算法的收敛性和优化精度。Logistic公式如下:
  
      
       
        
         
          
          
           
            
            
              x 
             
             
             
               k 
              
             
               + 
              
             
               1 
              
             
            
           
             = 
            
           
             μ 
            
            
            
              x 
             
            
              k 
             
            
           
             ( 
            
           
             1 
            
           
             − 
            
            
            
              x 
             
            
              k 
             
            
           
             ) 
            
           
          
          
          
          
            (1) 
           
          
         
        
       
         x_{k+1}=\mu x_{k}(1-x_{k})\tag1 
        
       
     xk+1=μxk(1−xk)(1)
 其中, 
     
      
       
       
         μ 
        
       
         ∈ 
        
       
         ( 
        
       
         0 
        
       
         , 
        
       
         4 
        
       
         ] 
        
       
      
        \mu\in (0,4] 
       
      
    μ∈(0,4], 
     
      
       
       
         x 
        
       
         ∈ 
        
       
         ( 
        
       
         0 
        
       
         , 
        
       
         1 
        
       
         ) 
        
       
      
        x\in(0,1) 
       
      
    x∈(0,1)。
2.2 透镜成像折射反向学习策略
透镜成像折射反向学习策略的思想来自于凸透镜成像的原理。通过基于当前坐标生成一个反向位置来扩展搜索范围,如图1所示。
 
在二维坐标中,x轴的搜索范围为(a, b), y轴表示一个凸透镜。假设物体A在x轴上的投影为x,高度为h,通过透镜成像,另一侧的图像为A*, A在x轴上的投影为x,高度为h*。通过以上分析,我们可以得到如下公式:
  
      
       
        
         
          
          
           
            
             
             
               ( 
              
             
               a 
              
             
               + 
              
             
               b 
              
             
               ) 
              
             
               / 
              
             
               2 
              
             
               − 
              
             
               x 
              
             
             
              
              
                x 
               
              
                ∗ 
               
              
             
               − 
              
             
               ( 
              
             
               a 
              
             
               + 
              
             
               b 
              
             
               ) 
              
             
               / 
              
             
               2 
              
             
            
           
             = 
            
            
            
              h 
             
             
             
               h 
              
             
               ∗ 
              
             
            
           
          
          
          
          
            (2) 
           
          
         
        
       
         \frac{(a+b)/2-x}{x^{*}-(a+b)/2 }=\frac{h}{h^{*}} \tag2 
        
       
     x∗−(a+b)/2(a+b)/2−x=h∗h(2)
 对公式(2)进行转换,即可得到反向解x*的表达式为:
  
      
       
        
         
          
          
           
            
            
              x 
             
            
              ∗ 
             
            
           
             = 
            
            
             
             
               a 
              
             
               + 
              
             
               b 
              
             
            
              2 
             
            
           
             + 
            
            
             
             
               a 
              
             
               + 
              
             
               b 
              
             
             
             
               2 
              
             
               k 
              
             
            
           
             − 
            
            
            
              x 
             
            
              k 
             
            
           
          
          
          
          
            (3) 
           
          
         
        
       
         x^{*} =\frac{a+b}{2}+\frac{a+b}{2k}-\frac{x}{k} \tag3 
        
       
     x∗=2a+b+2ka+b−kx(3)
 其中, 
     
      
       
       
         k 
        
       
         = 
        
       
         h 
        
       
         / 
        
        
        
          h 
         
        
          ∗ 
         
        
       
      
        k=h/h^{*} 
       
      
    k=h/h∗, 
     
      
       
       
         a 
        
       
      
        a 
       
      
    a和 
     
      
       
       
         b 
        
       
      
        b 
       
      
    b可以视为某维度的上下限。
2.3 动态因子
在原始SCSO算法中,随着迭代过程的进行,rG从2到0线性减小,SCSO算法对复杂的多峰多元函数的适应能力较差,容易出现精度低的问题。因此,引入水波动力演化因子,利用水波动力学的不确定性,使得种群可以搜索更大的区域,减少其他个体跟随的盲目性,增强种群之间的信息交流和学习,保持种群多样性,有效避免收敛,从而提高算法跳出局部最优的能力。
2.4 黄金正弦策略
黄金正弦算法(golden sine algorithm, Golden-SA)是Tanyildizi等人在2017年基于正弦函数相关思想提出的一种新的智能算法,具有搜索速度快、参数调优简单、鲁棒性好的优点。Golden-SA算法利用正弦函数与单位圆的特殊关系结合黄金分割系数进行迭代搜索;单位圆仿真算法通过扫描正弦函数,探索搜索空间。黄金中庸线的概念最早是由古希腊数学家欧多克索斯在公元前4世纪提出的。黄金中庸线在金正弦搜索策略中不需要梯度,可以防止算法陷入局部最优。
 Golden-SA策略的数学模型如式(4)所示:
  
      
       
        
         
          
          
           
            
            
              X 
             
            
              i 
             
             
             
               t 
              
             
               + 
              
             
               1 
              
             
            
           
             = 
            
            
            
              X 
             
            
              i 
             
            
              t 
             
            
           
             ⋅ 
            
            
            
              ∣ 
             
            
              s 
             
            
              i 
             
            
              n 
             
            
              ( 
             
             
             
               R 
              
             
               1 
              
             
            
              ) 
             
            
              ∣ 
             
            
           
             + 
            
            
            
              R 
             
            
              2 
             
            
           
             ⋅ 
            
           
             s 
            
           
             i 
            
           
             n 
            
           
             ( 
            
            
            
              R 
             
            
              1 
             
            
           
             ) 
            
           
             ⋅ 
            
            
            
              ∣ 
             
             
             
               x 
              
             
               1 
              
             
            
              ⋅ 
             
             
             
               P 
              
             
               i 
              
             
               t 
              
             
            
              − 
             
             
             
               x 
              
             
               2 
              
             
            
              ⋅ 
             
             
             
               x 
              
             
               i 
              
             
               t 
              
             
            
              ∣ 
             
            
           
          
          
          
          
            (4) 
           
          
         
        
       
         X_{i}^{t+1}=X_{i}^{t}·\left | sin(R_{1}) \right |+R_{2}·sin(R_{1})·\left | x_{1}·P_{i}^{t}- x_{2}·x_{i}^{t}\right | \tag4 
        
       
     Xit+1=Xit⋅∣sin(R1)∣+R2⋅sin(R1)⋅ 
              x1⋅Pit−x2⋅xit 
              (4)
 其中, 
     
      
       
       
         t 
        
       
      
        t 
       
      
    t为迭代次数, 
     
      
       
        
        
          R 
         
        
          1 
         
        
       
         ∈ 
        
       
         [ 
        
       
         0 
        
       
         , 
        
       
         2 
        
       
         π 
        
       
         ] 
        
       
      
        R_{1}\in[0,2\pi] 
       
      
    R1∈[0,2π], 
     
      
       
        
        
          R 
         
        
          2 
         
        
       
         ∈ 
        
       
         [ 
        
       
         0 
        
       
         , 
        
       
         π 
        
       
         ] 
        
       
      
        R_{2}\in[0,\pi] 
       
      
    R2∈[0,π], 
     
      
       
        
        
          x 
         
        
          1 
         
        
       
      
        x_{1} 
       
      
    x1和 
     
      
       
        
        
          x 
         
        
          2 
         
        
       
      
        x_{2} 
       
      
    x2为固定值。
3. 部分代码展示
PD_no=30;  %Number of sand cat
F_name='F9';     %Name of the test function
Max_iter=500;           %Maximum number of iterations
[LB,UB,Dim,F_obj]=Get_F(F_name); %Get details of the benchmark functions
[BestScore_SCSO,BestPos_SCSO,Curve_SCSO]=SCSO(PD_no,Max_iter,LB,UB,Dim,F_obj);
[BestScore_ISCSO,BestPos_ISCSO,Curve_ISCSO]=ISCSO(PD_no,Max_iter,LB,UB,Dim,F_obj); 
figure(1);
% Function plot
func_plot(F_name);     
title('Parameter space')
xlabel('x_1');
ylabel('x_2');
zlabel([F_name,'( x_1 , x_2 )'])
figure(2)       
% Convergence plot
semilogy(Curve_SCSO,'k','linewidth', 1.5)
hold on
semilogy(Curve_ISCSO,'r','linewidth', 1.5)
xlabel('Iteration#');
ylabel('Best fitness so far');
title(F_name);
legend('SCSO','ISCSO');
display(['The best obtained solution by SCSO is : ', num2str(BestPos_SCSO)]);  
display(['The best optimal value of the objective funciton found by SCSO is : ', num2str(BestScore_SCSO)]);  
display(['The best obtained solution by ISCSO is : ', num2str(BestPos_ISCSO)]);  
display(['The best optimal value of the objective funciton found by ISCSO is : ', num2str(BestScore_ISCSO)]); 
 
4. 仿真结果展示

 
 
 
 
 
5. 资源获取
可以获取完整代码资源。



















