0 引言
灰狼优化算法(Grey Wolf Optimizer,GWO)由澳大利亚格里菲斯大学学者 Mirjalili 等人于2014年提出来的一种群智能优化算法。它通过模拟狼群社会等级制度,将狼群种群按照社会等级高到低分为α、β、δ和ω四中类型狼,在地位等级最高α狼的带领下进行狩猎活动,包括:跟踪、包围猎物和攻击猎物等群体操作。
图1 灰狼的社会等级制度
1 数学模型
为了对灰狼算法进行数学建模,将最好三只狼(最优解)依次定义为α、β和δ,其余狼(候选解)定义为ω,它们由最好三只狼引导搜索目标,更新自身位置。
图2 灰狼位置更新
(1)包围猎物:灰狼搜索猎物时逐渐接近猎物并包围它,该行为数学模型如下:
式 (3. 1) 表示个体与猎物间的距离 , 式(3. 2)是灰狼的位置更 新公式。其中,t是目前的迭代代数,A和C是系数向量,Xp和X分别是猎物的位置向量和灰狼的位置向量。 a是收敛因子,随着迭代次数增加从 2 线性减小到 0 ,r1 和r2的是[0,1]的随机数 。
(2) 狩猎过程:每次迭代过程中,选出最优三只灰狼,最优三只灰狼利用自身位置判断猎物所在位置,同时强迫其他灰狼个体(ω)依据三只最优狼的位置进行更新自身的位置。
其中,Dα、Dβ和Dδ分别表示α、 β和δ与其他个体间的距离向量;Xα、Xβ和Xδ分别表示α、 β和δ狼当前的位置向量;C1、C2和C3是随机向量;X是当前灰狼的位置向量;X1、X2和X3分别定义了灰狼ω个体受α、 β和δ狼指导更新的位置。式(3.7)定义了灰狼最终位置。
(3) 攻击猎物(开发):灰狼在猎物停止移动时攻击目标完成捕猎行为,该过程主要由式(3.3)来完成,向量a是随着迭代次数增加从2到0线性递减,其对应系数向量A也在[-a,a]区间变化。如下图所示,当A的值在区间内时,灰狼的位置可以位与当前位置和猎物位置之间的任意位置,当A<1时,狼群发起攻击,也就是局部最优解。
图3 攻击猎物
(4)搜索猎物(勘探):灰狼根据 α ,β 和 δ 的位置来搜索猎物。灰狼在寻找猎物存在彼此分开,然后聚集在一起攻击猎物。基于数学建模中A向量大于1或者小于-1时迫使灰狼和猎物分离,实现全局搜索。如图4所示。同时GWO算法发掘新的解方案还依靠C系数向量,由式(3.4)可知,C系数向量是[0,2]之间随机值,表示为狼所在位置对猎物影响的随机权重。勘探过程避免了智能算法寻优过程中陷入局部最优状态。
图3 寻找猎物
2 优化BP神经网络
2.1 优化的方式
前篇对支持向量机(支持向量机原理及matlab代码讲解(分类SVM和回归SVR)-CSDN博客)原理讲解,从支持向量机模型运算过程中,可以了解到模型高维映射核函数参数g和处罚因子c对模型预测结果影响最为重要。因此结合上述GWO原理介绍,可以将支持向量机参数c和g作为灰狼种群,每一个种群对应支持向量机的预测值,将这个预测值作为适应度更新α、β和δ狼进行上述狩猎活动。
2.2 伪代码
3 matlab代码
3.1 主函数代码
% GWO数学模型
% dim 优化问题维度
% Max_iteration 最大迭代次数
% Positions 灰狼种群数
% SYD 适应度函数
% ub、lb 上下界限
% Alpha_score、Beta_score、Delta_score对应α,β,δ狼适应度
% Alpha_pos、Beta_pos、Delta_pos 对应α,β,δ狼位置
%% 主函数
while l<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<Alpha_score
Alpha_score=fitness; % α
Alpha_pos=Positions(i,:);
end
if fitness>Alpha_score && fitness<Beta_score
Beta_score=fitness; % β
Beta_pos=Positions(i,:);
end
if fitness>Alpha_score && fitness>Beta_score && fitness<Delta_score
Delta_score=fitness; % δ
Delta_pos=Positions(i,:);
end
end
a=2-l*((2)/Max_iteration); % a是从2到0线性递减的数
% 跟新ω狼寻找猎物
for i=1:size(Positions,1)
for j=1:size(Positions,2)
% 根据α狼群更新位置X1
r1=rand(); % r1是[0,1]随机分布的数;
r2=rand(); % r2是[0,1]随机分布的数;
% 计算A1和C1
A1=2*a*r1-a; % Eq3.3的系数向量
C1=2*r2; % Eq3.4的系数向量
% 计算α狼指导其他狼寻优的位置和距离
D_alpha=abs(C1*Alpha_pos(j)-Positions(i,j)); % Eq3.5的距离公式
X1=Alpha_pos(j)-A1*D_alpha; % Eq3.6的位置公式
%根据β狼群更新位置X2
r1=rand();
r2=rand();
A2=2*a*r1-a; % 同上
C2=2*r2; % 同上
D_beta=abs(C2*Beta_pos(j)-Positions(i,j)); % 同上
X2=Beta_pos(j)-A2*D_beta; % 同上
%根据Delta狼群更新位置X3
r1=rand();
r2=rand();
A3=2*a*r1-a; % Equation 同上
C3=2*r2; % Equation 同上
D_delta=abs(C3*Delta_pos(j)-Positions(i,j)); % 同上
X3=Delta_pos(j)-A3*D_delta; % 同上
%更新后的狼只位置
Positions(i,j)=(X1+X2+X3)/3;% ω狼的位置 Eq3.7
end
end
l=l+1;
Convergence_curve(l)=Alpha_score; % 返回最优α狼作为适应度
end
3.2 GWO-SVM代码
分类代码:分类器:灰狼算法优化支持向量机模型(GWO-SVM)
回归预测代码:回归预测:灰狼算法优化支持向量机模型(GWO-SVR)
4 视频讲解
B站搜索: ‘ 不想学习的陈成 ’