0
点赞
收藏
分享

微信扫一扫

海洋捕食者算法(Matlab代码实现)


💥💥💥💞💞💞欢迎来到本博客❤️❤️❤️💥💥💥



🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。



⛳️座右铭:行百里者,半于九十。

目录

​​💥1 概述​​

​​📚2 运行结果​​

​​🎉3 参考文献​​

​​🌈4 Matlab代码实现​​

💥1 概述

   海洋捕食者算法(MPA)是一种自然启发的优化算法,它遵循最佳觅食策略中自然支配的规则,并在海洋生态系统中遇到捕食者和猎物之间的速率策略。

海洋捕食者算法(Matlab代码实现)_海洋优化算法

MPA优化过程分为三个主要优化阶段,考虑不同的速度比,同时模仿捕食者和猎物的整个生命周期:(1)在高速比或当猎物比捕食者移动得更快时,(2)单位速度比或当捕食者和猎物以几乎相同的速度移动时, (3)当捕食者比猎物移动得更快时,速度比低。对于每个定义的阶段,指定并分配特定的迭代周期。这些步骤是根据捕食者和猎物运动性质的规则定义的,同时模仿自然界中捕食者和猎物的运动。

📚2 运行结果

海洋捕食者算法(Matlab代码实现)_算法_02

部分代码:

function [Top_predator_fit,Top_predator_pos,Convergence_curve]=MPA(SearchAgents_no,Max_iter,lb,ub,dim,fobj)
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<Max_iter
%------------------- Detecting top predator -----------------
for i=1:size(Prey,1)

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

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

if fitness(i,1)<Top_predator_fit
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<fitness);
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<Max_iter/3
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,:)<lb;
Prey(i,:)=(Prey(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;

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

if fitness(i,1)<Top_predator_fit
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<fitness);
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()<FADs
U=rand(SearchAgents_no,dim)<FADs;
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

🎉3 参考文献

 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

​​🌈​​4 Matlab代码实现

举报

相关推荐

0 条评论