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

相关内容

热门资讯

前端-session、jwt 目录:   (1)session (2&#x...
linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
nodejs:本地安装nvm实... 一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node...
JAVA集合知识整理 Java集合知识整理 HashMap相关 HashMap的底层数据结构:jdk1.8之...
无刷直流电机介绍及单片机控制实... 无刷直流电机介绍及单片机控制实例前言基本概念优势与劣势使用寿命基本结构使用单片机控制实例电子调速器&...
fwdiary(2) dp2 1.传纸条  AcWing 275. 传纸条 - AcWing 走两条路,走一条最大的...
常用的DOS命令 常用的DOS命令 DOS(Disk Operating System,磁...
<C++> 类和对象(下) 1.const成员函数将const修饰的“成员函数”称之为const成员函数,cons...