文章目录
- 【`获取资源`请见文章第5节:资源获取】
- 1. 基础算术优化算法
- 2. 改进算术优化算法
- 2.1 随机概率因子
- 2.2 强制切换机制
 
- 3. 部分代码展示
- 4. 仿真结果展示
- 5. 资源获取
 
【获取资源请见文章第5节:资源获取】
 
1. 基础算术优化算法
算术优化算法是一类基于数学运算和搜索策略的智能优化算法,旨在解决优化问题。该算法通常用于求解连续优化问题,例如数学规划、函数优化和参数优化等。
算术优化算法的基本思想是通过模拟数学运算和搜索过程,逐步调整优化问题的解向更优的方向。算法通常维护一组候选解,并使用数学运算(如加法、减法、乘法、除法等)和搜索操作(如移动、变异、交叉等)对候选解进行更新和改进。通过迭代的方式,算法逐渐收敛到问题的最优解或近似最优解。

 
2. 改进算术优化算法
2.1 随机概率因子
在原始AOA算法中,概率因子MOP是一个非常重要的系数,它可以随着迭代从1非线性递减到0,它的公式如下:
  
      
       
        
        
          M 
         
        
          O 
         
        
          P 
         
        
          = 
         
        
          1 
         
        
          − 
         
        
          ( 
         
         
         
           t 
          
         
           T 
          
         
         
         
           ) 
          
          
          
            1 
           
          
            / 
           
          
            α 
           
          
         
        
       
         MOP=1-(\frac{t}{T})^{1/\alpha} 
        
       
     MOP=1−(Tt)1/α
 在原始AOA程序中, 
     
      
       
       
         α 
        
       
      
        \alpha 
       
      
    α被设置为定值5,这样的固定取值的方式容易使得寻优过程陷入局部最优,从而影响算法整体的寻优性能。因此,本文将 
     
      
       
       
         α 
        
       
      
        \alpha 
       
      
    α修改为如下的一个随机参数,范围在[-1,9]之间:
  
      
       
        
        
          α 
         
        
          = 
         
        
          10 
         
        
          ∗ 
         
        
          r 
         
        
          a 
         
        
          n 
         
        
          d 
         
        
          − 
         
        
          1 
         
        
       
         \alpha =10*rand-1 
        
       
     α=10∗rand−1
 修改之后的RMOP参数会在原始MOP参数附近做随机移动,这在一定程度上提高了算法逃出局部最优的能力。
 下面给出了改进后的RMOP参数和MOP参数的迭代过程对比:
 
2.2 强制切换机制
在原始AOA算法中,除法和乘法操作对应着上面图中的公式8,而减法和加法操作对应着上面图中的公式10,这也是为什么该算法叫算术优化算法。
在原始AOA算法中,MOA参数扮演着十分重要的角色,它用于平衡算法的探索和开发能力,探索行为由除法和乘法公式来负责,而开发行为由减法和加法负责。在原始AOA算法中,MOA参数并不能反映算法目前适用于哪种更新公式,因此将其与随机数rand来比较从而决策出进行公式8还是公式10的方式并不妥。
本文提出了一种改进的RMOA参数来替代原先的MOA参数,公式如下:
  
      
       
        
        
          R 
         
        
          M 
         
        
          O 
         
        
          A 
         
        
          = 
         
        
          t 
         
        
          a 
         
        
          n 
         
        
          h 
         
         
         
           ∣ 
          
         
           r 
          
         
           a 
          
         
           n 
          
         
           d 
          
         
           × 
          
         
           ( 
          
          
           
           
             F 
            
           
             ( 
            
           
             i 
            
           
             ) 
            
           
             − 
            
           
             b 
            
           
             F 
            
           
           
           
             F 
            
           
             ( 
            
           
             i 
            
           
             ) 
            
           
             + 
            
           
             b 
            
           
             F 
            
           
          
         
           ) 
          
         
           ∣ 
          
         
        
       
         RMOA=tanh\left | rand\times (\frac{F(i)-bF}{F(i)+bF} ) \right | 
        
       
     RMOA=tanh 
              rand×(F(i)+bFF(i)−bF) 
              
 同时,考虑到这样的方式仍然可能陷入局部最优,所以为每个个体配置了一个计数器,如果连续迭代多次,都未能找到更优的解,就100%执行探索行为(即除法和乘法操作),而不执行开发行为(即减法和加法操作)。
3. 部分代码展示
%% 画RMOP图像的相关代码
 Alpha=5;
 MOP(i)=1-((i)^(1/Alpha)/(Max_iter)^(1/Alpha));
 mAlpha=10*rand-1; % 根据论文描述,负数有效,但不显示在图像里
 if mAlpha>=0
     RMOP(i)=1-((i)^(1/mAlpha)/(Max_iter)^(1/mAlpha));
 end
%% 改进红的MAOA算法相关部分代码
for j=1:size(X,2)
           r1=rand();
           
           
            if (size(LB,2)==1)
                if r1<p
                    r2=rand();
                    if r2>0.5
                        Xnew(i,j)=Best_P(1,j)/(MOP+eps)*((UB-LB)*Mu+LB);
                    else
                        Xnew(i,j)=Best_P(1,j)*MOP*((UB-LB)*Mu+LB);
                    end
                else
                    r3=rand();
                    if r3>0.5
                        Xnew(i,j)=Best_P(1,j)-MOP*((UB-LB)*Mu+LB);
                    else
                        Xnew(i,j)=Best_P(1,j)+MOP*((UB-LB)*Mu+LB);
                    end
                end               
            end
            
           
            if (size(LB,2)~=1)   % if each of the UB and LB has more than one value 
                r1=rand();
                if r1<p
                    r2=rand();
                    if r2>0.5
                        Xnew(i,j)=Best_P(1,j)/(MOP+eps)*((UB(j)-LB(j))*Mu+LB(j));
                    else
                        Xnew(i,j)=Best_P(1,j)*MOP*((UB(j)-LB(j))*Mu+LB(j));
                    end
                else
                    r3=rand();
                    if r3>0.5
                        Xnew(i,j)=Best_P(1,j)-MOP*((UB(j)-LB(j))*Mu+LB(j));
                    else
                        Xnew(i,j)=Best_P(1,j)+MOP*((UB(j)-LB(j))*Mu+LB(j));
                    end
                end               
            end
            
        end
4. 仿真结果展示

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



![[图表]pyecharts模块-反转柱状图](https://img-blog.csdnimg.cn/4dbc4820d0ab49eca91130697d661f76.png#pic_center)















