基于改进海洋捕食者算法求解单目标优化问题附matlab代码(NMPA)
创始人
2024-04-11 23:59:29
0

✅作者简介:热爱科研的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电子书和数学建模资料

相关内容

热门资讯

保存时出现了1个错误,导致这篇... 当保存文章时出现错误时,可以通过以下步骤解决问题:查看错误信息:查看错误提示信息可以帮助我们了解具体...
汇川伺服电机位置控制模式参数配... 1. 基本控制参数设置 1)设置位置控制模式   2)绝对值位置线性模...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
不一致的条件格式 要解决不一致的条件格式问题,可以按照以下步骤进行:确定条件格式的规则:首先,需要明确条件格式的规则是...
本地主机上的图像未显示 问题描述:在本地主机上显示图像时,图像未能正常显示。解决方法:以下是一些可能的解决方法,具体取决于问...
表格列调整大小出现问题 问题描述:表格列调整大小出现问题,无法正常调整列宽。解决方法:检查表格的布局方式是否正确。确保表格使...
表格中数据未显示 当表格中的数据未显示时,可能是由于以下几个原因导致的:HTML代码问题:检查表格的HTML代码是否正...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...