目录
0 引言
海马优化算法(Sea-horse optimizer,SHO)是Shijie Zhao等人于2023年提出群智能算法,该算法模拟了海马的运动、捕食和繁殖行为。在前两个阶段,SHO分别模拟了海马的不同运动模式和概率捕食机制。此外由于海马妊娠的独特特点,有利于增加种群多样性。
1 数学模型
SHO的数学模型主要模拟海马的运动、捕食和繁殖行为。其中运动阶段主要分为受海洋涡旋作用影响的浮动螺旋模式和沿当前波的漂移模式。捕食策略以一定的概率捕获猎物的成败,繁殖阶段则保持男亲正信息的同时繁殖后代,有利于增加种群多样性。具体模型如下:
1)初始化:SHO为群智能算法,该算法种群初始化为随机生成,具体如下。
式中Xi为第i个个体的海马种群位置,UB,LB为问题维度边界,Dim问题维度,Pop为种群数量,Xeite为精英个体,f为适应度函数。
2)海马的运动:海马的运动主要模拟受海洋涡旋作用影响的浮动螺旋模式和沿当前波的漂移模式,前者为海马正跟随螺旋运动向精英精英移动,避免了局部对SHO的过度利用;后者则是利用布朗运动模拟海马的另一个运动长度,以确保其在搜索空间中更好的探索,提高全局搜索性能。
2.1)螺旋运动:该运动中海马正跟随螺旋运动向精英精英移动,采用Levy飞行来模拟海马的运动步长,有利于海马在早期迭代中高概率穿越到其他位置。具体模型如下:
式中levy为莱维飞行分布函数,x = ρ×cos (θ)、y = ρ×sin (θ)和z = ρ×θ分别表示螺旋运动下的坐标(x、y、z)的三维分量,其中ρ = u × e^(θv),uv为螺旋常数。入为0到2随机数,s为固定常数,w和k为0到1之间的随机数,Γ为阶乘。
2.2)布朗运动:海马随海浪变化时的运动,在漂移作用下,利用布朗运动模拟海马的另一个运动长度,以确保其在搜索空间中更好的探索。具体模型如下:
式中l为系数常量,βt为布朗运动的随机游走系数,服从正态分布。
3)捕食行为:海马捕食浮游动物和小型甲壳类动物有两种结果:成功和失败。考虑到海马成功捕获食物的概率超过90%,我们设计了SHO的随机数r2来区分这两个结果,这种捕食行为的数学表达式是:
式中α为随迭代次数减少系数,t为当前迭代次数,T为最大迭代次数。
4)繁殖行为:根据适合度值将其分为雄性和雌性组。值得强调的是,由于雄性海马负责繁殖,SHO算法将健康值最好的个体的一半作为父亲,另一半作为母亲。这种划分将促进父母之间的良好的遗传特征,以产生下一代,并避免新的解决方案的过度定位。海马角色分配的简明数学表达式为:
式中Xsort为适应度排列的种群位置,r3为0到1的随机数。
2 优化方式
前篇对BP神经网络原理讲解(BP神经网络原理及Matlab代码复现-CSDN博客),从BP神经网络原理讲解中可以发现预测值主要受权值和阈值调整修正完成。因此结合上述SHO原理介绍,可以将BP神经网络权值和阈值作为海马种群位置,每一个种群位置对应BP神经网络的预测值,将这个预测值作为适应度更新海马精英个体及雄雌性,进行算法的运动、捕食及繁殖等社会运动,更新更优的下一代个体位置向量。
3 MATLAB代码
3.1 伪代码
3.2 SHO主函数代码
while t<Max_iter+1
beta=randn(pop,Dim);%布朗运动的随机游走系数
Elite=repmat(Position,pop,1);% 精英海马
%海马的运动行为
r1=randn(1,pop);
omega = 1.5;
Step_length=levy(pop,Dim,omega);%levy飞行模拟海马的运动步长
for i=1:pop
for j=1:Dim
if r1(i)>0
r=rand();
theta=r*2*pi;%[0,2π]之间的随机值
row=u*exp(theta*v);%螺旋常数u,v定义的长度
x=row*cos(theta);%
y=row*sin(theta);%
z=row*theta;%三维分量
%螺旋运动模式
Sea_horses_new1(i,j)=Sea_horses(i,j)+Step_length(i,j)*((Elite(i,j)-Sea_horses(i,j)).*x.*y.*z+Elite(i,j));%Eq.(4)
else
%布朗运动模式
Sea_horses_new1(i,j)=Sea_horses(i,j)+rand()*l*beta(i,j)*(Sea_horses(i,j)-beta(i,j)* Elite(i,j));%Eq.(7)
end
end
end
for i=1:pop
%边界检测
Tp=Sea_horses_new1(i,:)>UB;
Tm=Sea_horses_new1(i,:)<LB;
Sea_horses_new1(i,:)=(Sea_horses_new1(i,:).*(~(Tp+Tm)))+UB.*Tp+LB.*Tm;
end
% 海马的捕食行为,90%成功率
for i=1:pop
for j=1:Dim
r1=rand();
r2(i)=rand();
alpha=(1-t/Max_iter)^(2*t/Max_iter);%Eq(11)随着迭代而线性减小
if r2(i)>0.1
Sea_horses_new2(i,j)=alpha*(Elite(i,j)-rand()*Sea_horses_new1(i,j))+(1-alpha)*Elite(i,j); %Eq.(10)
else
Sea_horses_new2(i,j)=(1-alpha)*(Sea_horses_new1(i,j)-rand()*Elite(i,j))+alpha*Sea_horses_new1(i,j); %Eq.(10)
end
end
end
for i=1:pop
%边界检查
Tp=Sea_horses_new2(i,:)>UB;
Tm=Sea_horses_new2(i,:)<LB;
Sea_horses_new2(i,:)=(Sea_horses_new2(i,:).*(~(Tp+Tm)))+UB.*Tp+LB.*Tm;
%计算所有海马的体能
Sea_horsesFitness1(1,i)=SYD(Sea_horses_new2(i,:),net);
net.trainParam.showWindow = 0;
end
[~,index]=sort(Sea_horsesFitness1);
%海马的繁殖行为
Sea_horses_father=Sea_horses_new2(index(1:pop/2),:); %Eq.(12)雄性
Sea_horses_mother=Sea_horses_new2(index(pop/2+1:pop),:); %Eq.(12)雌性
for k=1:pop/2
r3=rand();
Si(k,:)=r3*Sea_horses_father(k,:)+(1-r3)*Sea_horses_mother(k,:); %Eq.(13)
end
Sea_horses_offspring=Si;%后代
for i=1:pop*0.5
%边界检查
Tp=Sea_horses_offspring(i,:)>UB;
Tm=Sea_horses_offspring(i,:)<LB;
Sea_horses_offspring(i,:)=(Sea_horses_offspring(i,:).*(~(Tp+Tm)))+UB.*Tp+LB.*Tm;
Sea_horsesFitness2(1,i)=SYD(Sea_horses_offspring(i,:),net);
net.trainParam.showWindow = 0;
end
%海马对比
Sea_horsesFitness=[Sea_horsesFitness1,Sea_horsesFitness2];
Sea_horses_new=[Sea_horses_new2;Sea_horses_offspring];
[~,sorted_indexes]=sort(Sea_horsesFitness);
Sea_horses=Sea_horses_new(sorted_indexes(1:pop),:);
SortfitbestN = Sea_horsesFitness(sorted_indexes(1:pop));
fitness_history(:,t)=SortfitbestN';
population_history(:,:,t)=Sea_horses;
Trajectories(:,t)=Sea_horses(:,1);
%更新最优解
if SortfitbestN(1)<Fitness
Position=Sea_horses(1,:);
Fitness=SortfitbestN(1);
end
Convergence_curve(t)=Fitness;
t = t + 1;
end
3.3 SHO-BP
单输出回归预测模型、多输出回归预测模型、分类模型和时间序列模型代码复现:
标签:horses,海马,BP,MATLAB,Sea,new1,优化,SHO From: https://blog.csdn.net/2403_88401503/article/details/143868704