多种智能优化算法运行时间和不同函数测试对比附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法       神经网络预测       雷达通信       无线传感器        电力系统

信号处理              图像处理               路径规划       元胞自动机        无人机 

⛄ 内容介绍

智能优化算法是一种常用的求解最优化问题的方法,包括遗传算法、粒子群优化算法、蚁群算法等等。这些算法具有不同的优缺点和适用范围,因此在实际应用中需要进行对比。

下面是一些常见的智能优化算法及其特点:

  1. 遗传算法(GA):通过模拟种群遗传过程来寻找最优解,具有全局搜索能力和收敛速度较快的特点。

  2. 粒子群算法(PSO):通过模拟粒子在解空间中的运动过程来寻找最优解,具有易于实现和求解速度快的特点。

  3. 蚁群算法(ACO):利用蚁群在食物与蚂蚁巢穴之间的搜索规律来寻找最优解,具有分布式搜索和适用于多目标优化等特点。

  4. 本文涵盖鲸鱼算法、麻雀算法、遗传算法、蝗虫算法、灰狼算法、改进蝗虫算法、改进灰狼算法、改进飞蛾算法、飞蛾算法、多元宇宙算法、北方苍鹰算法、粒子群算法、蛇群算法、正弦算法等

为了比较这些算法的性能,通常需要进行不同函数测试。常用的测试函数包括Sphere、Rastrigin、Griewank、Ackley、Schwefel和Rosenbrock等。这些函数具有不同的复杂度和性质,可以用于评估不同算法的性能。另外加入了运行时间对比​。

⛄ 部分代码

%_________________________________________________________________________________

%  Equilibrium Optimizer source code (Developed in MATLAB R2015a)

%

%  programming: Afshin Faramarzi & Seyedali Mirjalili

%

%  e-Mail: afaramar@hawk.iit.edu, afshin.faramarzi@gmail.com

%

%  paper:

%  A. Faramarzi, M. Heidarinejad, B. Stephens, S. Mirjalili, 

%  Equilibrium optimizer: A novel optimization algorithm

%  Knowledge-Based Systems

%  DOI: https://doi.org/10.1016/j.knosys.2019.105190

%____________________________________________________________________________________

function [Ave,Sd,Convergence_curve]=EO(Particles_no,Max_iter,lb,ub,dim,fobj,Run_no)

for irun=1:Run_no

Ceq1=zeros(1,dim);   Ceq1_fit=inf; 

Ceq2=zeros(1,dim);   Ceq2_fit=inf; 

Ceq3=zeros(1,dim);   Ceq3_fit=inf; 

Ceq4=zeros(1,dim);   Ceq4_fit=inf;

C=initialization(Particles_no,dim,ub,lb);

Iter=0; V=1;

a1=2;

a2=1;

GP=0.5;

while Iter<Max_iter

   

      for i=1:size(C,1)  

        

        Flag4ub=C(i,:)>ub;

        Flag4lb=C(i,:)<lb;

        C(i,:)=(C(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;         

          

        fitness(i)=fobj(C(i,:));

      

        if fitness(i)<Ceq1_fit 

              Ceq1_fit=fitness(i);  Ceq1=C(i,:);

        elseif fitness(i)>Ceq1_fit && fitness(i)<Ceq2_fit  

              Ceq2_fit=fitness(i);  Ceq2=C(i,:);              

        elseif fitness(i)>Ceq1_fit && fitness(i)>Ceq2_fit && fitness(i)<Ceq3_fit

              Ceq3_fit=fitness(i);  Ceq3=C(i,:);

        elseif fitness(i)>Ceq1_fit && fitness(i)>Ceq2_fit && fitness(i)>Ceq3_fit && fitness(i)<Ceq4_fit

              Ceq4_fit=fitness(i);  Ceq4=C(i,:);

                         

        end

      end

      

%---------------- Memory saving-------------------   

      if Iter==0

        fit_old=fitness;  C_old=C;

      end

    

     for i=1:Particles_no

         if fit_old(i)<fitness(i)

             fitness(i)=fit_old(i); C(i,:)=C_old(i,:);

         end

     end

    C_old=C;  fit_old=fitness;

%-------------------------------------------------

       

Ceq_ave=(Ceq1+Ceq2+Ceq3+Ceq4)/4;                              % averaged candidate 

C_pool=[Ceq1; Ceq2; Ceq3; Ceq4; Ceq_ave];                     % Equilibrium pool

 t=(1-Iter/Max_iter)^(a2*Iter/Max_iter);                      % Eq (9)

    for i=1:Particles_no

           lambda=rand(1,dim);                                % lambda in Eq(11)

           r=rand(1,dim);                                     % r in Eq(11)  

           Ceq=C_pool(randi(size(C_pool,1)),:);               % random selection of one candidate from the pool

           F=a1*sign(r-0.5).*(exp(-lambda.*t)-1);             % Eq(11)

           r1=rand(); r2=rand();                              % r1 and r2 in Eq(15)

           GCP=0.5*r1*ones(1,dim)*(r2>=GP);                   % Eq(15)

           G0=GCP.*(Ceq-lambda.*C(i,:));                      % Eq(14)

           G=G0.*F;                                           % Eq(13)

           C(i,:)=Ceq+(C(i,:)-Ceq).*F+(G./lambda*V).*(1-F);   % Eq(16)                                                             

    end

       Iter=Iter+1;  

       Convergence_curve(Iter)=Ceq1_fit; 

       Ceqfit_run(irun)=Ceq1_fit;

end

% display(['Run no : ', num2str(irun)]);

% display(['The best solution obtained by EO is : ', num2str(Ceq1,10)]);

% display(['The best optimal value of the objective funciton found by EO is : ', num2str(Ceq1_fit,10)]);

% disp(sprintf('--------------------------------------'));

end

Ave=mean(Ceqfit_run);

Sd=std(Ceqfit_run);

end

%%

function [Cin,domain]=initialization(SearchAgents_no,dim,ub,lb)

Boundary_no= size(ub,2); % numnber of boundaries

% If the boundaries of all variables are equal and user enter a signle

% number for both ub and lb

if Boundary_no==1

    Cin=rand(SearchAgents_no,dim).*(ub-lb)+lb;

    domain=ones(1,dim)*(ub-lb);

end

% If each variable has a different lb and ub

if Boundary_no>1

    for i=1:dim

        ub_i=ub(i);

        lb_i=lb(i);

        Cin(:,i)=rand(SearchAgents_no,1).*(ub_i-lb_i)+lb_i;

    end

    domain=ones(1,dim).*(ub-lb);

end

end

⛄ 运行结果

⛄ 参考文献

⛳️ 代码获取关注我

❤️部分理论引用网络文献,若有侵权联系博主删除

❤️ 关注我领取海量matlab电子书和数学建模资料

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值