【BP数据预测】灰狼算法优化BP神经网络GWO-BP数据预测(多输入多输出)【含Matlab源码 2026期】

⛄一、运行结果

在这里插入图片描述
在这里插入图片描述

✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。
🍎个人主页:海神之光
🏆代码获取方式:
海神之光Matlab王者学习之路—代码获取方式
⛳️座右铭:行百里者,半于九十。

更多Matlab仿真内容点击👇
Matlab图像处理(进阶版)
路径规划(Matlab)
神经网络预测与分类(Matlab)
优化求解(Matlab)
语音处理(Matlab)
信号处理(Matlab)
车间调度(Matlab)

⛄二、灰狼算法及BP神经网络简介

1 BP算法
BP (Back—Propagation) 神经网络是由Rumelhart, McClelland提出的概念, 其结构简单、可操作性强, 具有非线性映射能力, 是目前应用最广泛的人工神经网络。但BP算法存在收敛速度慢、容易陷入局部最优等缺陷, 在很大程度上影响了预测结果。BP模型如图1所示, 该模型包括输入层、隐层、输出层, 其中W、V为连接权矩阵, 跨层的神经元之间则不连接。
在这里插入图片描述
图1 BP神经网络结构图
BP神经网络算法由信号的正向传播和误差的反向传播两个过程组成。正向传播, 输入信号通过隐含层处理, 经过非线性变换, 转向输出层产生输出信号, 若输出值与期望值不符, 则转入反向传播过程。误差反传是将输出误差信号通过隐含层向输入层逐层反传, 通过修改各神经元的权值, 使误差沿梯度方向下降, 这样反复学习训练, 直到输出的误差达到要求或者达到最大迭代次数, 训练停止。
(1)权值初始化
将网络中的所有权值随机初始化。
(2) 根据实例的输入, 计算输出层每个单元的输出。
网络的实际输出及隐层单元的状态Okj, 由公式 (1) 计算:
在这里插入图片描述
公式中, θj是阈值, 一般可采用Sigmoid函数, 即公式 (2) 作为激励函数作用于它。
在这里插入图片描述
(3) 计算网络各层误差信号
对于输出层的每个单元k, 误差δk, 由公式 (3) 计算:
在这里插入图片描述
Ok是单元k的实际输出值, Ok (1-Ok) 是Logistic函数的导数, 而Tk是基于k给定训练元组的已知目标值。
而对于隐藏层单元h的误差由公式 (4) 计算:
在这里插入图片描述
(4)调整各层的权值
公式 (5) 是权值的更新公式, 公式 (6) 阈值的更新公式。
在这里插入图片描述
(5)核查算法是否符合结束条件
如果网络总误差满足设定的精度要求或符合结束条件, 训练过程结束。否则, 继续进行下一轮训练。

2 GWO算法
GWO算法是Mirjalil等人2014年提出的一种新型群智能优化算法, 该算法通过模拟自然界中灰狼的狩猎跟踪、追捕、包围和攻击等建立一个数学模型, 进而完成最优化工作。整个狼群按照适应度值被分为最优灰狼α、次优灰狼β、第三优灰狼β和其他狼ω四个等级。在捕食过程中α、β、δ灰狼追捕猎物, ω狼追随前三者进向着目标搜索。捕食过程中, 灰狼个体与猎物的距离为:
在这里插入图片描述
公式中t表示迭代次数;Xp (t) 是猎物的位置, X (t) 表示第t代时灰狼的位置, D表示猎物与灰狼之间的距离, C=2r1。
灰狼位置更新为:
在这里插入图片描述
其中, a是收敛因子, 取值[0, 2], max是最大迭代次数;r2和r2均是[0, 1]的随机数:当|A|>1时, 灰狼群体将搜索范围扩大, 进行全局搜索;|A|<1时, 灰狼群体将包围圈缩小, 进行局部搜索。

在狼群中, 利用α、β、δ这三头狼的位置跟踪猎物的数学描述如下:
在这里插入图片描述
式 (12) 和式 (13) 定义了狼群内ω与α、β、δ的距离关系。
在这里插入图片描述
式 (13) 根据α、β、δ的位置计算ω狼的最终位置。

3 GWO优化BP神经网络
由于BP神经网络采用均方误差梯度下降方向进行收敛, 因此容易陷入局部最优, 且收敛速度慢, 而且BP神经网络对初始化参数中的权值和阀值具有较大的敏感性。本文采用GWO优化BP神经网络, 以达到克服BP算法的缺陷, 避免陷入局部最优, 而且使收敛加速。
用GWO优化BP神经网络, 即将灰狼的位置信息作为BP神经网络的权重和阈值, 灰狼不断对猎物的位置进行判断和更新, 相当于在不断更新BP神经网络的阈值和权重, 通过多次迭代, 最终计算全局最优结果。优化BP神经网络具体步骤:
1.初始化参数。包括灰狼种群大小、灰狼个体位置信息的维度、灰狼维度的上界和下界, 最大迭代次数、随机初始化灰狼位置。
2.将灰狼的位置映射给BP神经网络, 按照公式计算适应度
3.适应度值的计算:狼群内部按照等级被分为最优、次优、第三优、和普通狼四组, 并根据与的位置, 用公式 (11) ~ (13) 更新的位置信息, 并更新参数a、A和C的值。
4.判断灰狼个体的每一维度越界情况, 如有越界, 把灰狼维度的上界或下界设置为越界的值。
5.判断迭代次数:如果小于最大迭代次数, 重复步骤2-步骤5, 继续下一次迭代, 直到满足条件;否则结束算法。

⛄三、部分源代码

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 = HiddenUnitNumInDim; % 初始化输入层与隐含层之间的权值
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% 参数取值上界

%%GWO算法初始化
SearchAgents_no=150; % 狼群数量,Number of search agents
Max_iteration=3000; % 最大迭代次数,Maximum numbef of iterations

% initialize alpha, beta, and delta_posAlpha_pos=zeros(1,dim); % 初始化Alpha狼的位置
Alpha_score=inf; % 初始化Alpha狼的目标函数值,change this to -inf for maximization problems

Beta_pos=zeros(1,dim); % 初始化Beta狼的位置
Beta_score=inf; % 初始化Beta狼的目标函数值,change this to -inf for maximization problems

Delta_pos=zeros(1,dim); % 初始化Delta狼的位置
Delta_score=inf; % 初始化Delta狼的目标函数值,change this to -inf for maximization problems

%Initialize the positions of search agents
Positions=initialization(SearchAgents_no,dim,ub,lb);

Convergence_curve=zeros(1,Max_iteration);

l=0; % Loop counter循环计数器

% Main loop主循环
while l<Max_iteration % 对迭代次数循环

for i=1:size(Positions,1)  % 遍历每个狼


  
    % Update Alpha, Beta, and Delta
    if fitness<Alpha_score % 如果目标函数值小于Alpha狼的目标函数值
        Alpha_score=fitness; % 则将Alpha狼的目标函数值更新为最优目标函数值,Update alpha
        Alpha_pos=Positions(i,:); % 同时将Alpha狼的位置更新为最优位置
    end

    if fitness>Alpha_score && fitness<Beta_score % 如果目标函数值介于于Alpha狼和Beta狼的目标函数值之间
        Beta_score=fitness; % 则将Beta狼的目标函数值更新为最优目标函数值,Update beta
        Beta_pos=Positions(i,:); % 同时更新Beta狼的位置
    end

    if fitness>Alpha_score && fitness>Beta_score && fitness<Delta_score  % 如果目标函数值介于于Beta狼和Delta狼的目标函数值之间
        Delta_score=fitness; % 则将Delta狼的目标函数值更新为最优目标函数值,Update delta
        Delta_pos=Positions(i,:); % 同时更新Delta狼的位置
    end
end

a=2-l*((2)/Max_iteration); % 对每一次迭代,计算相应的a值,a decreases linearly fron 2 to 0

% Update the Position of search agents including omegas
for i=1:size(Positions,1) % 遍历每个狼
    for j=1:size(Positions,2) % 遍历每个维度

        

        % Alpha狼位置更新
        D_alpha=abs(C1*Alpha_pos(j)-Positions(i,j)); % Equation (3.5)-part 1
        X1=Alpha_pos(j)-A1*D_alpha; % Equation (3.6)-part 1

        r1=rand();
        r2=rand();

        A2=2*a*r1-a; % 计算系数A,Equation (3.3)
        C2=2*r2; % 计算系数C,Equation (3.4)

        % Beta狼位置更新


        A3=2*a*r1-a; % 计算系数A,Equation (3.3)
        C3=2*r2; % 计算系数C,Equation (3.4)

        % Delta狼位置更新
        D_delta=abs(C3*Delta_pos(j)-Positions(i,j)); % Equation (3.5)-part 3
        X3=Delta_pos(j)-A3*D_delta; % Equation (3.5)-part 3 
        
        % 位置更新
        Positions(i,j)=(X1+X2+X3)/3;% Equation (3.7)
        

    end
end

l=l+1
Convergence_curve(l)=Alpha_score;

end
x=Alpha_pos;
%%
% x = gb;
W1 = x(1:HiddenUnitNumInDim);
L1 = length(W1);
W1 = reshape(W1,[HiddenUnitNum, InDim]);
B1 = x(L1+1:L1+HiddenUnitNum)';
L2 = L1 + length(B1);
W2 = x(L2+1:L2+OutDim
HiddenUnitNum);
L3 = L2 + length(W2);
W2 = reshape(W2,[OutDim, HiddenUnitNum]);
B2 = x(L3+1:L3+OutDim)';
HiddenOut = logsig(W1 * SamIn + repmat(B1, 1, TrainSamNum)); % 隐含层网络输出
NetworkOut = W2 * HiddenOut + repmat(B2, 1, TrainSamNum); % 输出层网络输出
Error = SamOut - NetworkOut; % 实际输出与网络输出之差

SamIn_test= mapminmax(‘apply’,test_data,PS_i); % 原始样本对(输入和输出)初始化
HiddenOut_test = logsig(W1 * SamIn_test + repmat(B1, 1, ForcastSamNum)); % 隐含层输出预测结果
NetworkOut = W2 * HiddenOut_test + repmat(B2, 1, ForcastSamNum); % 输出层输出预测结果
Forcast_data_test = mapminmax(‘reverse’,NetworkOut,PS_o);
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’)

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]于淑香,温一军.基于GWO-BP算法的软件缺陷预测模型[J].安徽电子信息职业技术学院学报. 2018,17(06)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

🍅 仿真咨询
1 各类智能优化算法改进及应用

生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化

2 机器学习和深度学习方面
卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小二乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM、XGBOOST、TCN实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断

3 图像处理方面
图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知

4 路径规划方面
旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划、天线线性阵列分布优化、车间布局优化

5 无人机应用方面
无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配

6 无线传感器定位及布局方面
传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化

7 信号处理方面
信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化

8 电力系统方面
微电网优化、无功优化、配电网重构、储能配置

9 元胞自动机方面
交通流 人群疏散 病毒扩散 晶体生长

10 雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值