目录
0 引言
鲸鱼算法(Whale Optimization Algorithm,WOA)是Seyedali Mirjalili于2016年基于基于捕食的合作想象提出群智能算法,该算法模拟鲸鱼采用最佳座头鲸或者随机鲸鱼搜索猎物,并对猎物发动螺旋气泡攻击和包围攻击的捕猎方法进行问题寻优。
1 数学模型
WOA的数学模型主要通过模拟座头鲸进行环绕猎物、螺旋泡泡网捕食策略和寻找猎物的数学模拟,具体模型如下:
1)围捕猎物:座头鲸可以识别猎物的位置并包围它们,因此座头鲸采用以下模型来更新自身围捕猎物位置和距离。
式中D为鲸鱼和猎物位置距离,X为鲸鱼位置向量更新,X*为最佳鲸鱼的位置,A,C为系数向量,a为2到0的线性下降系数。
2)开发阶段(气泡网攻击):鲸鱼捕食行为主要俩个机制:利用1)包围猎物达到一定程度攻击猎物,第二个采用起泡网捕食,其数学模型如下:
式中D’为当前搜索个体和最佳个体的位置向量,b是定义对数螺旋形状的常数,l是[−1,1]中的随机数
3)捕食行为:座头鲸在一个不断缩小的圆圈内环绕猎物,或者沿着一个螺旋状的路径包围猎物。为了模拟俩种包围猎物后的捕食行为,给定一个50%概率让座头鲸选择一种方式来捕食,其数学模型如下:
4)搜索阶段(搜索猎物):为了保证WOA随机性,座头鲸根据随机选择个体而不是目前发现的最佳个体来更新探索阶段的位置。其数学模型如下:
2 优化方式
前篇对BP神经网络原理讲解(BP神经网络原理及Matlab代码复现-CSDN博客),从BP神经网络原理讲解中可以发现预测值主要受权值和阈值调整修正完成。因此结合上述WOA原理介绍,可以将BP神经网络权值和阈值作为鲸鱼种群位置,每一个种群位置对应BP神经网络的预测值,将这个预测值作为适应度更新座头鲸在搜索猎物,捕食猎物行为,更新优势座头鲸位置。
3 Matlab代码
3.1 伪代码
3.2 WOA主函数代码
while t<Max_iteration %white(t<最大迭代次数)
for i=1:size(Positions,1) %智能体个数
% 超出边界处理
Flag4ub=Positions(i,:)>ub;
Flag4lb=Positions(i,:)<lb;
Positions(i,:)=(Positions(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb; %返回限制边界
% 计算狼群的适应度函数
X = reshape(Positions(i,:),1,dim);
fitness = SYD(X,net);
net.trainParam.showWindow = 0; % 关闭训练窗口
% 跟新领导者
if fitness < Leader_score
Leader_score = fitness;
Leader_pos = Positions(i,:);
end
end
a = 2-t*((2)/Max_iteration);
a2 = -1 + t*((-1)/Max_iteration);
for i = 1: size(Positions, 1)
r1 = rand();
r2 = rand();
A = 2 *a *r1 -a;
C =2*r2;
b = 1;
l =(a2 -1)*rand +1;
p = rand();
for j = 1: size(Positions, 2)
if p< 0.5
if abs(A)>=1
rand_leader_index = floor(SearchAgents_no* rand()+ 1);
x_rand = Positions(rand_leader_index, :);
D_x_rand = abs(C*x_rand(j) -Positions(i,j));
Positions(i,j) = x_rand(j) - A*D_x_rand;
elseif abs(A)<1
D_Leader = abs(C * Leader_pos(j) -Positions(i,j));
Positions(i,j) = Leader_pos(j) -A* D_Leader;
end
elseif p>=0.5
distance2Leader = abs (Leader_pos(j)- Positions(i,j));
Positions(i,j) = distance2Leader* exp(b.*l).* cos(l.*2*pi)+ Leader_pos(j);
end
end
end
t =t+1;
Convergence_curve(t) = Leader_score;
[t Leader_score];
end
end
3.3 WOA-BP
单输出回归模型、多输出回归模型、分类模型和时间序列模型代码: