目录
0 引言
鲸鱼优化算法 (Whale Optimization Algorithm,WOA)是 2016 年由澳大利亚格里菲斯大学的Mirjalili 等提出的一种新的群体智能优化算法。该算法是模拟了座头鲸的狩猎行为,即寻找猎物、环绕猎物和气泡攻击。
1 数学模型
WOA狩猎行为是一种特殊的狩猎方法,这种觅食行为被称为“bubble-net”捕食策略,如图1所示,以下是对其算法原理数学模型构建:
图1 座头鲸的泡泡网捕食行为
(1) 包围猎物:座头鲸在狩猎时需进行包围猎物
式(2.1)为鲸鱼包围猎物的距离,式子(2.2)为对应的位置,A和C为系数向量对应公式为(2.3)和(2.4),a为从2到0的线性下降的向量
(2)狩猎行为:螺旋运动:模拟座头鲸螺旋运动游向猎物时更新位置(开发阶段)
式中D向量为最好座头鲸与猎物之间距离,X*(t)为最好鲸鱼的位置,b为一个定义螺旋形状的常数,I为±1之间随机数。
(3)狩猎行为:收缩包围机制:鲸鱼以螺旋形状游向猎物同时也在不断收缩包围圈更新鲸鱼位置,因此在这俩种狩猎行为中,作者假设一个概率Pi,当Pi时进行收缩包围机制,在1-Pi时进行上述螺旋运动。其数学模型见下(开发阶段)
(4)搜索猎物:为了防止WOA算法陷入局部最优,算法还进行上述活动的过程随机生成一只鲸鱼在其他位置进行上述运动,体现模型全局性(搜索阶段)
式中Xrand为随机鲸鱼的位置向量。
2 优化支持向量机
2.1 优化的方式
前篇对支持向量机原理讲解(支持向量机原理及matlab代码讲解(分类SVM和回归SVR)-CSDN博客),从支持向量机模型运算过程中,可以了解到模型高维映射核函数参数g和处罚因子c对模型预测结果影响最为重要。因此结合上述WOA原理介绍,可以将支持向量机参数c和g作为鲸鱼种群,每一个种群对应支持向量机的预测值,将这个预测值作为适应度进行上述鲸鱼狩猎活动,更新最优座头鲸。
2.2 伪代码
3 matlab代码
3.1 主函数代码
%% 参数
% Max_iteration 最大迭代次数
% Positions 种群数量
% SYD %适应度函数
% Leader_score %最优座头鲸适应度
% Leader_pos % 最优座头鲸位置
% dim %问题维度
% 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));%Eq(2.7)
Positions(i,j) = x_rand(j) - A*D_x_rand;%Eq(2.8)
elseif abs(A)<1
D_Leader = abs(C * Leader_pos(j) -Positions(i,j));% Eq(2.6)
Positions(i,j) = Leader_pos(j) -A* D_Leader;% Eq(2.6)
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);% Eq(2.5)
end
end
end
t =t+1;
Convergence_curve(t) = Leader_score;
[t Leader_score]
end
3.2 WOA-SVM的matlab代码
1)回归预测(WOA-SVR):回归:鲸鱼算法优化支持向量机(WOA-SVR)
2)分类(WOA-SVM):分类:鲸鱼算法优化支持向量机(WOA-SVM)
4 代码视频讲解
B站搜索:‘ 不想学习的陈成 ’