目录
0 引言
海洋捕食者算法(Marine Predators Algorithm,MPA)是Afshin Faramarzi于2020年基于自然启发提出的元启发式算法,该算法主要模拟海洋捕食者中广泛的觅食策略,以及捕食者与猎物之间相互作用的最佳相遇率策略。
1 数学模型
MPA算法模拟海洋捕食者觅食策略,即利用布朗游走和Levy游走来选择最佳觅食策略,同时利用涡流等策略来改变海洋捕食者的行为,具体数学模型如下:
1)初始化:MPA是一种基于种群的方法,其中初始解均匀分布在搜索空间上,故采用随机分布函数生成初始解:
式中X为捕食者(猎物)的种群位置,n为种群数,d为问题维度,其中Elite为精英种群,代表捕食能力强的生物种群,Prey为与捕食者相同矩阵的猎物。
2)MPA优化过程:海洋生物捕食者在捕食过程中,主要分为三个部分,其一为捕食者速度比猎物快、二者速度相同和捕食者速度比猎物慢,对着三种情况下捕食者进行捕食的活动进行建模。
2.1)当捕食者速度比猎物速度快时:MAP进行勘探策略,其数学模型如下:
式中stepsister为移动步长,RB为正态分布的布朗游走随机向量;P为常数项0.5,R为0到1的均匀随机序列
2.2)当捕食者和猎物都以相同的速度移动时:猎物基于Levy游走策略移动,捕食者基于布朗游走进行勘探,并且开始由勘探策略转向开发策略。开发和勘探策略的数学模型见下:
中(13)为开发策略,RL为Levy分布的随机向量,其式如下,CF为控制捕食者移动步长的自适应参数
2.3)当捕食者比猎物移动得慢时:捕食者基于Levy随机游走进行开发策略,其数学模型如下:
3)涡流的形成和FADs的效应:导致海洋捕食者行为变化的问题是环境问题,如涡流形成或鱼类聚集装置(FADs)效应,这一策略会使得一部分捕食者跳离更远的地域捕食,从而避开局部最值。其数学模型如下:
式中FADs为影响概率。常取0.2,U为二进制向量,r为0到1的随机向量,r1和r2为随机猎物矩阵。
2 优化方式
前篇对支持向量机(支持向量机原理及matlab代码讲解(分类SVM和回归SVR)-CSDN博客)原理讲解,从支持向量机模型运算过程中,可以了解到模型高维映射核函数参数g和处罚因子c对模型预测结果影响最为重要。因此结合上述MAP原理介绍,可以将支持向量机参数c和g作为海洋捕食者种群位置,每一个种群对应支持向量机的预测值,将这个预测值作为适应度进行上述海洋捕食者和猎物之间运动策略,更新优势解。
3 Matlab代码
3.1 伪代码
3.2 MPA主函数代码
%% 参数
% Max_iter 最大迭代次数
% Prey 猎物种群
% ub,lb 问题维度边界
% SYD 适应度函数
% Top_predator_pos 精英捕食者位置
% levy 飞行策略
%
while Iter<Max_iter
%探测顶级捕食者
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)=SYD(Prey(i,:),net);
net.trainParam.showWindow = 0;
if fitness(i,1)<Top_predator_fit
Top_predator_fit=fitness(i,1);
Top_predator_pos=Prey(i,:);
end
end
%海洋记忆
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;
%% 2.优化阶段
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); %模拟莱维运动的随机数向量
RB=randn(SearchAgents_no,dim); %布朗运动随机数向量
for i=1:size(Prey,1)
for j=1:size(Prey,2)
R=rand();
%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);
%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
%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
%更新顶级捕食者
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)=SYD(Prey(i,:),net);
net.trainParam.showWindow = 0;
if fitness(i,1)<Top_predator_fit
Top_predator_fit=fitness(i,1);
Top_predator_pos=Prey(i,:);
end
end
%海洋记忆
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;
%% 3.涡流形成或鱼群聚集装置(FADs)效应(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.3 MPA-SVM
1)回归模型:私信
2)分类模型:分类模型:海洋捕食者算法优化支持向量机模型(MPA-SVM)
4 视频讲解
B站搜索:‘ 不想学习的陈成 ’