基于改进海洋捕食者算法求解单目标优化问题附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电子书和数学建模资料

相关内容

热门资讯

银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
月入8000+的steam搬砖... 大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...