目录
0 引言
白鲸算法(Beluga whale optimization,BWO)是由Changting Zhong等人于2022年基于模拟白鲸群体行为的元启发式算法。该算法建立了探索、开发和捕鲸三个阶段,分别对应于对游、猎物和落鲸的行为。其中BWO中鲸鱼跌倒的平衡因子和概率是自适应的,对控制勘探开发能力起着重要作用,开发阶段引入了征税飞行,以增强全球收敛性。
1 数学模型
BWO算法模拟了白鲸的行为,如游泳、捕食和鲸鱼坠落。BWO数学模型和大部分智能算法类似包含了探索阶段和开发阶段。探索阶段通过随机选择白鲸,保证了设计空间中的全局搜索能力,开发阶段控制着设计空间中的局部搜索能力。其数学模型分别见下式:
1)初始化:由于BWO基于种群的机制,需要对其种群基于问题维度等参数进行构建初始白鲸位置及适应度(满足问题的解)。
式(1)为白鲸的初始化位置,n为其种群数,d为问题维度,Fx为白鲸X对应的适应度。
2)探索阶段转向开发阶段的概率平衡因子:勘探阶段发生在平衡因子Bf > 0.5,而开发阶段发生在Bf≤0.5。
式中B0为0到1之间的随机值,T为当前迭代,Tmax为最大迭代次数。
3)探索阶段(游泳行为):白鲸可以在不同的姿势下进行社会性行为,如两对白鲸以同步或镜像的方式紧密地游泳,其数学建模如下:
式中p为从d问题维度中随机选取一个值,r1和r2为增强勘探阶段的随机算子,sin和cos表示指镜面白鲸的鳍朝向水面,根据奇数(odd)和偶数(even)选择的维度,更新后的位置反映了白鲸在游泳或潜水时的同步或镜像行为。
4)开发阶段(捕食行为):白鲸根据附近白鲸的位置协同觅食和移动。
式中Xbest为当前最优的鲸鱼,C1 = 2r4(1-T /Tmax)是测量莱维飞行的随机跳跃强度。LF为莱维飞行步长,其式见式(6)、(7),u和v是正态分布的随机数,β为常数项,取1.5,Γ为阶乘。
5)鲸落:在迁徙和觅食的过程中,白鲸受到了来自虎鲸、北极熊和人类的威胁没有幸存下来,掉进了海底,这种现象被称为“鲸鱼坠落”。为了模拟每次迭代中鲸鱼坠落的行为,我们从种群中的个体中选择一个鲸鱼坠落的概率作为我们的主观假设,来模拟群体中的微小变化。该数学模型表示为:
式中r5、r6和r7是0到1之间的随机数,Xstep为鲸鱼坠落的步长,其数学模型见式(9),C2为与鲸鱼下降概率和种群大小相关的步长因子(C2 = 2Wf ×n),Wf数学模型见式(10),ub,lb为问题维度上下界限。
2 优化方式
前篇对BP神经网络原理讲解(BP神经网络原理及matlab代码-CSDN博客),从BP神经网络原理讲解中可以发现预测值主要受权值和阈值调整修正完成。因此结合上述BWO原理介绍,可以将BP神经网络权值和阈值作为白鲸种群,每一个种群对应BP神经网络的预测值,将这个预测值作为适应度进行上述白鲸游泳行为、捕食和鲸洛行为更新自身位置。
3 Maltab代码
3.1 伪代码
3.2 BWO主函数代码
%% 参数
% Npop 种群大小
% Max_it 最大迭代次数
% nD 问题维度
% pos 种群
% fit 种群对应适应度
% SYD 适应度函数
%% BWO主函数
while T <= Max_it
newpos = pos;
WF = 0.1-0.05*(T/Max_it); % Eq(10) 鲸鱼坠落的概率
kk = (1-0.5*T/Max_it)*rand(Npop,1); % 搜索和开发的概率:平衡因子
for i = 1:Npop
% 搜索阶段
if kk(i) > 0.5
r1 = rand();
r2 = rand();
RJ = ceil(Npop*rand); % 轮盘选择
while RJ == i
RJ = ceil(Npop*rand);
end
% 同步或镜像游泳行为时位置更新Eq(4)
if nD <= Npop/5
params = randperm(nD,2);
newpos(i,params(1)) = pos(i,params(1))+(pos(RJ,params(1))-pos(i,params(2)))*(r1+1)*sin(r2*360);
newpos(i,params(2)) = pos(i,params(2))+(pos(RJ,params(1))-pos(i,params(2)))*(r1+1)*cos(r2*360);
else
params=randperm(nD);
for j = 1:floor(nD/2)
newpos(i,2*j-1) = pos(i,params(2*j-1))+(pos(RJ,params(1))-pos(i,params(2*j-1)))*(r1+1)*sin(r2*360);
newpos(i,2*j) = pos(i,params(2*j))+(pos(RJ,params(1))-pos(i,params(2*j)))*(r1+1)*cos(r2*360);
end
end
% 开发阶段
else
r3 = rand();
r4 = rand();
C1 = 2*r4*(1-T/Max_it);%衡量Levy飞行强度的随机跳跃强度。
RJ = ceil(Npop*rand); % 轮盘选择
while RJ == i
RJ = ceil(Npop*rand);
end
alpha=3/2;%默认常量
sigma=(gamma(1+alpha)*sin(pi*alpha/2)/(gamma((1+alpha)/2)*alpha*2^((alpha-1)/2)))^(1/alpha); %Eq(7)
u=randn(1,nD).*sigma;%正态分布的随机数
v=randn(1,nD);%正态分布的随机数
S=u./abs(v).^(1/alpha);
KD = 0.05;
LevyFlight=KD.*S; % Levy飞行函数:增加收敛性能
newpos(i,:) = r3*xposbest - r4*pos(i,:) + C1*LevyFlight.*(pos(RJ,:)-pos(i,:));%Eq(5)
end
% 边界检测
Flag4ub = newpos(i,:)>ub;
Flag4lb = newpos(i,:)<lb;
newpos(i,:)=(newpos(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;
newfit(i,1) = SYD(newpos(i,:),net);
net.trainParam.showWindow = 0;
Counts_run = Counts_run+1;
if newfit(i,1) < fit(i,1)
pos(i,:) = newpos(i,:);
fit(i,1) = newfit(i,1);
end
end
% 鲸落阶段
for i = 1:Npop
if kk(i) <= WF
RJ = ceil(Npop*rand);
r5 = rand();
r6 = rand();
r7 = rand();
C2 = 2*Npop*WF;%与鲸鱼坠落概率和种群数量相关的阶跃因子
stepsize2 = (ub-lb)*exp(-C2*T/Max_it);%Eq(9)
newpos(i,:) = (r5*pos(i,:) - r6*pos(RJ,:)) + r7*stepsize2;%Eq(8)
Flag4ub = newpos(i,:)>ub;
Flag4lb = newpos(i,:)<lb;
newpos(i,:)=(newpos(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;
newfit(i,1) = SYD(newpos(i,:),net);
net.trainParam.showWindow = 0;
Counts_run = Counts_run+1;
if newfit(i,1) < fit(i,1)
pos(i,:) = newpos(i,:);
fit(i,1) = newfit(i,1);
end
end
end
[fval,index]=min(fit);
if fval<fvalbest
fvalbest = fval;
xposbest = pos(index,:);
end
kk_Record(T) = kk(1);
Curve(T) = fvalbest;
T = T+1;
end
3.3 BWO-BP
1)单输出回归预测:单输出回归预测:白鲸算法优化BP神经网络模型(BWO-BP)
2)多输出回归预测:私信
3)分类模型:私信
4)时间序列:私信
4 视频讲解
B站搜索:‘ 不想学习的陈成 ’