鲸鱼优化算法WOA优化BP神经网络(WOA

编程入门 行业动态 更新时间:2024-10-18 20:31:42

鲸鱼优化算法WOA优化BP<a href=https://www.elefans.com/category/jswz/34/1769690.html style=神经网络(WOA"/>

鲸鱼优化算法WOA优化BP神经网络(WOA

一、鲸鱼优化算法WOA(代码获取:评论区或者私信获取)

        鲸鱼优化算法(Whale Optimization Algorithm,WOA)是由Mirjalili等人于2016年提出的一种新型启发式优化算法。WOA算法的灵感来源于座头鲸的狩猎行为,作为群居哺乳动物,它们狩猎时会通过相互合作的方式对猎物实行围捕,鲸鱼在群体狩猎中有包围和驱赶两种行为,群体中的鲸鱼通过朝着其它鲸鱼移动以实现包围猎物,通过环形游动并喷出气泡形成气泡网以实现驱赶猎物,这种独特的狩猎方法被称为泡泡网觅食法。WOA算法的核心思想就是源于座头鲸特殊的泡泡网觅食法,通过随机或最佳搜索代理来模拟鲸鱼的围捕行为,通过螺旋来模拟泡泡网觅食的攻击机制,以此进行数学建模达到优化目的。WOA算法具有操作简单、调整参数少以及跳出局部最优能力强的优点。WOA的算法流程为:

(1)初始化WOA参数,包括初始化鲸鱼群体的规模、最大迭代次数、鲸鱼种群位置;

(2)计算鲸鱼群体的适应度,并根据适应度选择初始鲸鱼种群个数;

(3)计算个体适应度并选择当前最优位置;

(4)迭代更新下一代鲸鱼群体位置;

(5)达到终止条件,输出最优个体,即找到全局最优解。

二、WOA-BP预测模型建

        WOA算法优化BP神经网络的初始权值阈值,从而建立稳定的WOA-BP预测模型,提高预测精度和泛化能力。具体过程如下:

(1)数据归一化,建立BP神经网络,确定拓扑结构并初始化网络的权值和阈值;

(2)初始化WOA参数,计算WOA算法的决策长度,选取均方误差作为优化的目标函数;

(3)设置算法停止准则,利用WOA优化BP神经网络的权值阈值参数;

(4)WOA算法优化后的最优权值阈值参数赋予BP神经网络,即输出最优的WOA-BP模型,利用WOA-BP进行训练和预测并与优化前的BP网络进行对比分析。 

三、关键代码

%% 建立BP模型
net=newff(inputn,outputn,hiddennum_best,{'tansig','purelin'},'trainlm');% 设置BP参数
net.trainParam.epochs=1000;        % 训练次数
net.trainParam.lr=0.01;            % 学习速率
net.trainParam.goal=0.00001;       % 训练目标最小误差
net.trainParam.show=25;            % 显示频率
net.trainParam.mc=0.01;            % 动量因子
net.trainParam.min_grad=1e-6;      % 最小性能梯度
net.trainParam.max_fail=6;         % 最高失败次数%% 设置WOA参数
popsize=30;    %初始种群规模
maxgen=50;     %最大进化代数
dim=inputnum*hiddennum_best+hiddennum_best+hiddennum_best*outputnum+outputnum;    %自变量个数
lb=repmat(-3,1,dim);    %自变量下限
ub=repmat(3,1,dim);     %自变量上限
%初始化位置向量和领导者得分
Leader_pos=zeros(1,dim);
Leader_score=10^20;   %% 初始化种群
for i=1:dimub_i=ub(i);lb_i=lb(i);Positions(:,i)=rand(popsize,1).*(ub_i-lb_i)+lb_i;
end
curve=zeros(maxgen,1);%初始化收敛曲线%% 进化过程
h0=waitbar(0,'WOA优化中...');
for t=1:maxgenfor i=1:size(Positions,1)%对每个个体一个一个检查是否越界% 返回超出搜索空间边界的搜索代理Flag4ub=Positions(i,:)>ub;Flag4lb=Positions(i,:)<lb;Positions(i,:)=(Positions(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;fit(i)=fitness(Positions(i,:),inputnum,hiddennum_best,outputnum,net,inputn,outputn,output_train,inputn_test,outputps,output_test);     % 更新领导者位置if fit(i)<Leader_scoreLeader_score=fit(i);Leader_pos=Positions(i,:);endenda=2-t*((2)/maxgen);a2=-1+t*((-1)/maxgen);%参数更新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.5if abs(A)>=1rand_leader_index = floor(popsize*rand()+1);X_rand = Positions(rand_leader_index, :);D_X_rand=abs(C*X_rand(j)-Positions(i,j));Positions(i,j)=X_rand(j)-A*D_X_rand;elseif abs(A)<1D_Leader=abs(C*Leader_pos(j)-Positions(i,j));Positions(i,j)=Leader_pos(j)-A*D_Leader;endelseif p>=0.5distance2Leader=abs(Leader_pos(j)-Positions(i,j));Positions(i,j)=distance2Leader*exp(b.*l).*cos(l.*2*pi)+Leader_pos(j);endendendcurve(t)=Leader_score;waitbar(t/maxgen,h0)
end
close(h0)
setdemorandstream(pi);%% 权重阈值更新
w1=Leader_pos(1:inputnum*hiddennum_best);   
B1=Leader_pos(inputnum*hiddennum_best+1:inputnum*hiddennum_best+hiddennum_best);  
w2=Leader_pos(inputnum*hiddennum_best+hiddennum_best+1:inputnum*hiddennum_best+hiddennum_best+hiddennum_best*outputnum);   
B2=Leader_pos(inputnum*hiddennum_best+hiddennum_best+hiddennum_best*outputnum+1:inputnum*hiddennum_best+hiddennum_best+hiddennum_best*outputnum+outputnum);  
% 矩阵重构
net.iw{1,1}=reshape(w1,hiddennum_best,inputnum);
net.lw{2,1}=reshape(w2,outputnum,hiddennum_best);
net.b{1}=reshape(B1,hiddennum_best,1);
net.b{2}=reshape(B2,outputnum,1);

四、仿真结果

(1)根据经验公式,通过输入输出节点数量,求得最佳隐含层节点数量:

(2)WOA-BP和BP的预测对比图和误差图

 (3)BP和WOA-BP的各项误差指标,预测准确率

(4)鲸鱼优化算法WOA适应度进化曲线

 (5)BP和WOA-BP模型的回归图

 (6)BP和WOA-BP模型的误差直方图

五、BP算法优化

BP算法优化
遗传算法  GA-BP灰狼算法  GWO-BP
鲸鱼算法  WOA-BP粒子群算法  PSO-BP
麻雀算法  SSA-BP布谷鸟算法  CS-BP

更多推荐

鲸鱼优化算法WOA优化BP神经网络(WOA

本文发布于:2024-02-06 06:30:21,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1746915.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:神经网络   鲸鱼   算法   WOA   BP

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!