• 基于改进海洋捕食者算法求解单目标优化问题附matlab代码(NMPA)


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

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

    🍊个人信条:格物致知。

    更多Matlab仿真内容点击👇

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

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

    ⛄ 内容介绍

    海洋捕食者算法(Marine Predators Algorithm,MPA)等人于2020年提出的一种新型元启动式优化算法。

    ⛄ 部分代码

    %_________________________________________________________________________

    %  Marine Predators Algorithm source code (Developed in MATLAB R2015a)

    %

    %  programming: Afshin Faramarzi & Seyedali Mirjalili

    %

    % paper:

    %  A. Faramarzi, M. Heidarinejad, S. Mirjalili, A.H. Gandomi, 

    %  Marine Predators Algorithm: A Nature-inspired Metaheuristic

    %  Expert Systems with Applications

    %  DOI: doi.org/10.1016/j.eswa.2020.113377

    %  

    %  E-mails: afaramar@hawk.iit.edu            (Afshin Faramarzi)

    %           muh182@iit.edu                   (Mohammad Heidarinejad)

    %           ali.mirjalili@laureate.edu.au    (Seyedali Mirjalili) 

    %           gandomi@uts.edu.au               (Amir H Gandomi)

    %_________________________________________________________________________

    function [Top_predator_fit,Top_predator_pos,Convergence_curve,T]=MPA(SearchAgents_no,Max_iter,lb,ub,dim,fobj)

    tic;

    Top_predator_pos=zeros(1,dim);

    Top_predator_fit=inf; 

    Convergence_curve=zeros(1,Max_iter);

    stepsize=zeros(SearchAgents_no,dim);

    fitness=inf(SearchAgents_no,1);

    Prey=initialization(SearchAgents_no,dim,ub,lb);

      

    Xmin=repmat(ones(1,dim).*lb,SearchAgents_no,1);

    Xmax=repmat(ones(1,dim).*ub,SearchAgents_no,1);

             

    Iter=0;

    FADs=0.2;

    P=0.5;

    while Iter

         %------------------- Detecting top predator -----------------    

     for i=1:size(Prey,1)  

            

        Flag4ub=Prey(i,:)>ub;

        Flag4lb=Prey(i,:)

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

            

        fitness(i,1)=fobj(Prey(i,:));

                         

         if fitness(i,1)

           Top_predator_fit=fitness(i,1); 

           Top_predator_pos=Prey(i,:);

         end          

     end

         

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

        

     if Iter==0

       fit_old=fitness;    Prey_old=Prey;

     end

         

      Inx=(fit_old

      Indx=repmat(Inx,1,dim);

      Prey=Indx.*Prey_old+~Indx.*Prey;

      fitness=Inx.*fit_old+~Inx.*fitness;

            

      fit_old=fitness;    Prey_old=Prey;

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

         

     Elite=repmat(Top_predator_pos,SearchAgents_no,1);  %(Eq. 10) 

     CF=(1-Iter/Max_iter)^(2*Iter/Max_iter);

                                 

     RL=0.05*levy(SearchAgents_no,dim,1.5);   %Levy random number vector

     RB=randn(SearchAgents_no,dim);          %Brownian random number vector

               

      for i=1:size(Prey,1)

         for j=1:size(Prey,2)        

           R=rand();

              %------------------ Phase 1 (Eq.12) ------------------- 

           if Iter

              stepsize(i,j)=RB(i,j)*(Elite(i,j)-RB(i,j)*Prey(i,j));                    

              Prey(i,j)=Prey(i,j)+P*R*stepsize(i,j); 

                 

              %--------------- Phase 2 (Eqs. 13 & 14)----------------

           elseif Iter>Max_iter/3 && Iter<2*Max_iter/3 

              

             if i>size(Prey,1)/2

                stepsize(i,j)=RB(i,j)*(RB(i,j)*Elite(i,j)-Prey(i,j));

                Prey(i,j)=Elite(i,j)+P*CF*stepsize(i,j); 

             else

                stepsize(i,j)=RL(i,j)*(Elite(i,j)-RL(i,j)*Prey(i,j));                     

                Prey(i,j)=Prey(i,j)+P*R*stepsize(i,j);  

             end  

             

             %----------------- Phase 3 (Eq. 15)-------------------

           else 

               

               stepsize(i,j)=RL(i,j)*(RL(i,j)*Elite(i,j)-Prey(i,j)); 

               Prey(i,j)=Elite(i,j)+P*CF*stepsize(i,j);  

        

           end  

          end                                         

      end    

            

         %------------------ Detecting top predator ------------------        

      for i=1:size(Prey,1)  

            

        Flag4ub=Prey(i,:)>ub;  

        Flag4lb=Prey(i,:)

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

      

        fitness(i,1)=fobj(Prey(i,:));

            

          if fitness(i,1)

             Top_predator_fit=fitness(i,1);

             Top_predator_pos=Prey(i,:);

          end     

      end

            

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

        

     if Iter==0

        fit_old=fitness;    Prey_old=Prey;

     end

         

        Inx=(fit_old

        Indx=repmat(Inx,1,dim);

        Prey=Indx.*Prey_old+~Indx.*Prey;

        fitness=Inx.*fit_old+~Inx.*fitness;

            

        fit_old=fitness;    Prey_old=Prey;

         %---------- Eddy formation and FADs?effect (Eq 16) ----------- 

                                 

      if rand()

         U=rand(SearchAgents_no,dim)

         Prey=Prey+CF*((Xmin+rand(SearchAgents_no,dim).*(Xmax-Xmin)).*U);

      else

         r=rand();  Rs=size(Prey,1);

         stepsize=(FADs*(1-r)+r)*(Prey(randperm(Rs),:)-Prey(randperm(Rs),:));

         Prey=Prey+stepsize;

      end

                                                            

      Iter=Iter+1;  

      Convergence_curve(Iter)=Top_predator_fit; 

           

    end

    T=toc;

    ⛄ 运行结果

    ⛄ 参考文献

    ​[1]胡顺强,崔东文.基于海洋捕食者算法优化的长短期记忆记忆网络趋势预测[J].中国农村水利水电,2021(02):78-82+90.

    ⛄ Matlab代码关注

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

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

  • 相关阅读:
    JAVA泛型及元组
    【补档】基于PyTorch的手写数字识别
    价值几十亿美金的名字,Microsoft Windows的由来
    一篇带你了解如何使用纯前端类Excel表格构建现金流量表
    java毕业生设计学生会管理系统2021计算机源码+系统+mysql+调试部署+lw
    毕业生去向管理系统(毕业生就业招聘系统)
    pinia不同于vuex的状态管理器
    Google Earth Engine(GEE)——不同决策树数量分类精度对比分析(随机森林分类为例)
    Flutter 项目实战 注册接口实现https协议访问(三)
    高级深入--day41
  • 原文地址:https://blog.csdn.net/matlab_dingdang/article/details/128005953