BP神经网络优化 | MATLAB基于飞蛾扑火算法优化BP神经网络(MFO-BP)的预测模型(完整代码在文末)

飞蛾扑火( Moth-flame optimization algorithm,MFO) 是Seyedali Mirjalili等于2015年提出的一种新型智能优化算法。该算法具有并行优化能力强,全局性优且不易落入局部极值的性能特征,逐渐引起了学术界和工程界的关注。

目录

1.飞蛾扑火算法描述

1.1 算法步骤

 2.MFO优化BP神经网络流程

 3.模型介绍

3.1 确定BP神经网络的拓扑结构

3.2 BP神经网络参数

3.3 飞蛾扑火算法初始参数

3.4 适应度函数公式 

3.5 优化后的权重与阈值赋给BP

3.6 MFO优化后的BP神经网络训练与仿真预测 

4.运行结果

4.1 飞蛾扑火算法进化曲线

4.2 飞蛾扑火算法MFO优化BP神经网络的预测结果

 4.3 飞蛾扑火算法MFO优化BP神经网络的预测误差

 4.4 预测值和真实值的误差计算

 5.完整代码


1.飞蛾扑火算法描述

飞蛾火焰优化算法((moth-flame optimization,MFO)是由自然界中飞蛾横向定位导航机制演变而来的。在夜间,飞蛾飞行时把遥远的月亮当作参考物,可以将月光视为平行光,飞蛾根据光照方向来和自身夹角来调整飞行方向,由于人工火焰距离较近,飞蛾飞行时与火焰保持固定的角度,飞蛾与火焰的距离会不断变化,最终产生螺旋式逼近火焰的飞行路径。MFO算法并行优化能力强,总体特性好,对于非凸函数而言,由于非凸函数具有大量的局部最优点,因此MFO算法能够广泛探索搜索空间,并发现其中存在全局最优点的概率更大的区域。

1.1 算法步骤

1)初始化算法参数。设置输入控制变量维度,飞蛾种群规模,最大迭代次数以及自变量上下限等参数。
2)在搜索空间中随机生成飞蛾位置,对飞蛾种群中每只飞蛾进行适应度评价。
3)重复如下过程指导达到停止标准
3.1)自适应更新火焰个数n。将飞蛾空间位置以适应度值递增的顺序排序后赋值给火焰,作为第一代中火焰的空间位置。当迭代次数为1时,飞蛾个数即为火焰个数。
3.2)将更新后的火焰位置与飞蛾位置的适应度值重新排序,选取适应度值更优的空间位置更新为下一代火焰的位置。
3.3)自适应机制减少火焰数量,更新飞蛾的搜索参数。
3.4)更新飞蛾位置。根据每只飞蛾对应的火焰与飞行参数更新飞蛾的位置
4)输出所得最优解(火焰)


 2.MFO优化BP神经网络流程

Step1:初始化BP神经网络的权值和阈值
Step2:计算MFO的决策变量长度,选取预测误差的范数作为优化的目标函数。
Step3:设置算法停止准则,使用飞蛾扑火算法优化神经网络的权值和阈值参数。
Step4:将优化得到的权值和阈值参数赋给BP神经网络。
Step5:优化后的BP神经网络训练与测试,与优化前的BP神经网络进行误差分析和精度对比。


 3.模型介绍

3.1 确定BP神经网络的拓扑结构

输入层和输出层节点使用size函数直接获取。 隐含层节点数量参考经验公式:

n=2m+1

式中,n是隐含层节点数量,m是输入层节点数量

inputnum=size(P_train,2); %输入层神经元节点个数
hiddennum=2*inputnum+1;%隐含层神经元节点个数
outputnum=size(T_train,2);%输出层神经元节点个数

3.2 BP神经网络参数

net=newff(p_train,t_train,hiddennum);               %隐含层为hiddennum个神经元
%设定参数网络参数
net.trainParam.epochs=1000;
net.trainParam.goal=1e-3;
net.trainParam.lr=0.01;
net.trainParam.showwindow=false;                    %高版MATLAB使用 不显示图形框

3.3 飞蛾扑火算法初始参数

%% 定义算法参数
N=50;%种群规模
Max_iteration=50;%最大迭代代数
lb=-0.5;%下限
ub=0.5;%上限

3.4 适应度函数公式 

err=norm(T_{sim}-T_{test})

式中,T_sim,T_test,分别为训练集和测试集的样本。使用飞蛾扑火算法优化后,适应度函数值越小,即预测误差的范数越小,表明训练越准确,且模型的预测精度更好。

3.5 优化后的权重与阈值赋给BP

net.iw{1,1}=reshape(W1,hiddennum,inputnum);          %为神经网络的输入层到隐含层权值赋值
net.lw{2,1}=reshape(W2,outputnum,hiddennum);         %为神经网络的隐含层到输出层权值赋值
net.b{1}=reshape(B1,hiddennum,1);                    %为神经网络的隐层神经元阈值赋值
net.b{2}=reshape(B2,outputnum,1);                    %为神经网络的输出层阈值赋值

3.6 MFO优化后的BP神经网络训练与仿真预测 

net = train(net,p_train,t_train);
%% 测试网络
t_sim = sim(net,p_test);
T_sim = mapminmax('reverse',t_sim,ps_output);   %反归一化

4.运行结果

4.1 飞蛾扑火算法进化曲线

4.2 飞蛾扑火算法MFO优化BP神经网络的预测结果

 4.3 飞蛾扑火算法MFO优化BP神经网络的预测误差

 

 4.4 预测值和真实值的误差计算


 5.完整代码

代码链接放这,不需要积分:MATLAB基于飞蛾扑火算法优化BP神经网络(MFO-BP)的预测模型

  • 2
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zh_vancy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值