Mirjalili 等在 2014 年 提 出 了 灰 狼 优 化 ( Grey Wolf Optimizer,GWO) 算法,是一种新型群智能优化算法,通过模拟自然界中灰狼寻找、包围和攻击猎物等狩猎机制的过程来完成最优化工作。该算法将狼群划分为 4 个等级,将狼按照适应度值最优排序,选择适应度值的前 3 个分别作为最优灰狼 α,次优灰狼 β 和第三优灰狼 δ,剩余灰狼作为 ω。在捕食过程中,由α、β、δ灰狼进行猎物的追捕,而剩余灰狼 ω追随前三者进行追踪和围捕,猎物的位置便是问题的解。研究证明GWO 算法在全局寻优方面明显优于粒子群优化 ( Particle Swarm Optimization,PSO) 算法、遗传算法( Genetic Algorithm, GA) 和 进 化 策 略( Evolutionary Strategy,ES) 等 智 能 优 化 算法。因此,本文利用 GWO 来优化 BP 神经网络的权重和阈值。下面给出灰狼算法的主要数学模型:
Step4 计算适应度值,选取最优灰狼 α、次优灰狼 β 和第 三优灰狼 δ,根据式( 3) 更新剩余灰狼 ω 的位置信息,并更新 参数 A 和 C 及 a。
Step5 记录训练样本和检验样本的误差及所对应的最 优灰狼 α 的位置。
Step6 判断个体每一维度是否存在越界,将越界的值设 置为灰狼维度的上界 ( ub) 或下界( lb) 。
Step7 判断是否满足设定的误差或者达到最大迭代次 数; 否则重复 Step4 ~ Step7,直到满足条件。
Step8 最后返回结果为最优灰狼位置 α 及对应的最小 误差; 训练样本和检验样本的误差及训练过程每一次迭代最 优灰狼 α 的位置。
%灰狼优化多输入多输出BP神经网络代码
clear
clc
tic
global SamIn SamOut HiddenUnitNum InDim OutDim TrainSamNum
%% 导入训练数据
data = xlsread('test_data1.xlsx');
[data_m,data_n] = size(data);%获取数据维度
P = 80; %百分之P的数据用于训练,其余测试
Ind = floor(P * data_m / 100);
train_data = data(1:Ind,1:end-1)';
train_result = data(1:Ind,end)';
test_data = data(Ind+1:end,1:end-1)';% 利用训练好的网络进行预测
test_result = data(Ind+1:end,end)';
%% 初始化参数
[InDim,TrainSamNum] = size(train_data);% 学习样本数量
[OutDim,TrainSamNum] = size(train_result);
HiddenUnitNum = 7; % 隐含层神经元个数
[SamIn,PS_i] = mapminmax(train_data,0,1); % 原始样本对(输入和输出)初始化
[SamOut,PS_o] = mapminmax(train_result,0,1);
W1 = HiddenUnitNum*InDim; % 初始化输入层与隐含层之间的权值
B1 = HiddenUnitNum; % 初始化输入层与隐含层之间的阈值
W2 = OutDim*HiddenUnitNum; % 初始化输出层与隐含层之间的权值
B2 = OutDim; % 初始化输出层与隐含层之间的阈值
L = W1+B1+W2+B2; %粒子维度
%%优化参数的设定
dim=L; % 优化的参数 number of your variables
for j=1:L
lb(1,j)=-3.5; % 参数取值下界
ub(1,j)=3.5;
end% 参数取值上界
test_error=test_result(1,:)-Forcast_data_test(1,:);
mean_error=mean(abs(test_error)/test_result)
% test_mse=mean(test_error.^2)
test_mse=sqrt(mean(test_error.^2))
%% 绘制结果
figure
plot(Convergence_curve,'r')
xlabel('迭代次数')
ylabel('适应度')
title('收敛曲线')
figure
subplot(2,2,1);
plot(train_result(1,:), 'r-*')
hold on
plot(Forcast_data(1,:), 'b-o');
legend('真实值','拟合值')
title('输出训练集拟合效果')
subplot(2,2,2);
plot(test_result(1,:), 'r-*')
hold on
plot(Forcast_data_test(1,:), 'b-o');
legend('真实值','预测值')
title('输出测试集预测效果')
subplot(2,2,3);
stem(train_result(1,:) - Forcast_data(1,:))
title('输出训练集误差')
subplot(2,2,4);
stem(test_result(1,:) - Forcast_data_test(1,:))
title('输出测试集误差')
toc
%save('灰狼算法预测2-4')
[1]石峰, 楼文高, 张博. 基于灰狼群智能最优化的神经网络PM2.5浓度预测[J]. 计算机应用, 2017, 037(010):2854-2860.
[2]张文胜, 郝孜奇, 朱冀军,等. 基于改进灰狼算法优化BP神经网络的短时交通流预测模型[J]. 交通运输系统工程与信息, 2020, 20(2):8.
部分理论引用网络文献,若有侵权联系博主删除。