【电池健康状态预测】基于matlab灰狼算法优化BP神经网络GWO( 三 )


a=2-t*((2)/Max_iter); % 等式(3)中a随迭代次数从2线性下降至0 %a2从-1线性下降至-2,计算l时会用到a2=-1+t*((-1)/Max_iter);
(5)对每个代理的每一维度进行位置更新 。
【【电池健康状态预测】基于matlab灰狼算法优化BP神经网络GWO】% Update the Position of search agents for i=1:size(Positions,1)r1=rand(); % r1为[0,1]之间的随机数r2=rand(); % r2为[0,1]之间的随机数A=2*a*r1-a;% 等式(3)C=2*r2;% 等式(4)b=1;%等式(5)中的常数bl=(a2-1)*rand+1;%等式(5)中的随机数lp = rand();%等式(6)中的概率pfor j=1:size(Positions,2)if p<0.5if abs(A)>=1rand_leader_index = floor(SearchAgents_no*rand()+1);X_rand = Positions(rand_leader_index, :);D_X_rand=abs(C*X_rand(j)-Positions(i,j)); % 等式(7)Positions(i,j)=X_rand(j)-A*D_X_rand;% 等式(8)elseif abs(A)<1D_Leader=abs(C*Leader_pos(j)-Positions(i,j)); % 等式(1)Positions(i,j)=Leader_pos(j)-A*D_Leader;% 等式(2)endelseif p>=0.5distance2Leader=abs(Leader_pos(j)-Positions(i,j));% 等式(5)Positions(i,j)=distance2Leader*exp(b.*l).*cos(l.*2*pi)+Leader_pos(j);endendend
2 WOA算法优化BP神经网络
WOA算法优化BP神经网络的基本思想是:利用改进后的WOA算法优化BP神经网络的初始权值和阈值,将BP神经网络的训练误差作为个体的适应度值,选择最优的BP神经网络初始权值和阈值 。具体的流程如下:
1)BP神经网络初始化 。确定网络的输入和输出结构、初始的连接权值和阈值 。
2)改进后的WOA初始化 。将步骤1)中的初始权值和阈值转化为改进后的WOA的位置向量;并且初始化算法的其他基本参数,设置种群规模N、最大迭代次数Tmax、初始最小权重w1、初始最大权重w2和收敛因子a 。同时,将改进的WOA的适应度函数F(x)作为模型预测输出值与实测值之间的均方误差 。
3)计算个体适应度值 。找出最优适应度值的位置,记录下位置向量并将其作为当前最优个体位置xbest(t) 。
4)根据A的值来采取不同的位置更新策略 。如果|A|≥1,按式(2)更新下一代的位置;如果|A| 5)满足最大迭代次数或达到误差精度要求后终止寻优算法,将当前的最优参数赋值给BP神经网络 。
改进后的预测模型的流程图如图2所示 。
图2 改进的预测模型流程图
?二、部分源代码
%% 初始化
clear
close all
clc
off
%% 数据读取
data=http://www.kingceram.com/post/(‘CS2-34.xlsx’,‘’,‘A1:A700’); %%使用函数读取EXCEL中对应范围的数据即可
n=10;
[input,]=(data’,n);%前n个时刻 预测下一个时刻
%输入输出数据
% input=data(:,1:end-1); %data的第一列-倒数第二列为特征指标
% =data(:,end); %data的最后面一列为输出的指标值
N=(); %全部样本数目
=15; %设定测试样本数目
=N-; %计算训练样本数目
%% 划分训练集、测试集
= input(1:,:)‘;
=(1:)’;
=input(+1:+,:)‘;
=(+1:+)’;
%% 数据归一化
[,]=(,0,1);
[,]=();
=(‘apply’,,);
%% 获取输入层节点、输出层节点个数
=size(input,2);
=size(,2);
disp(‘/’)
disp(‘神经网络结构…’)
disp([‘输入层的节点数为:’,()])
disp([‘输出层的节点数为:’,()])
disp(’ ')
disp(‘隐含层节点的确定过程…’)
%确定隐含层节点个数
%采用经验公式=sqrt(m+n)+a,m为输入层节点个数,n为输出层节点个数,a一般取为1-10之间的整数
MSE=1e+5; %初始化最小误差
for =fix(sqrt(+))+1:fix(sqrt(+))+10
?三、运行结果
?四、版本及参考文献
1 版本