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是隐含层节点数量,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 适应度函数公式
式中,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)的预测模型
BP神经网络优化 | MATLAB基于飞蛾扑火算法优化BP神经网络(MFO-BP)的预测模型(完整代码在文末)相关推荐
- 基于灰狼算法优化概率神经网络PNN的分类预测-附代码
基于灰狼算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于灰狼算法优化概率神经网络PNN的分类预测 - 附代码 1.PNN网络概述 2.变压器故障诊街系统相关背景 2.1 模型建立 3. ...
- BP神经网络优化 | MATLAB基于遗传算法优化BP神经网络(GA-BP)的预测模型(含完整代码)
文章目录 前言 一.遗传算法描述 二.优化思路 三.完整代码 预测结果 前言 首先需要安装一下遗传算法工具箱,可参考这篇博客 MATLAB遗传算法工具箱安装包及安装方法(图解)_周杰伦今天喝奶茶了吗的 ...
- 基于Adam算法优化GRU神经网络的短期负荷预测(Python代码实现)
目录 1 Adam优化算法 2 Adam算法中的学习率衰减策略 3 GRU神经网络 4 运行结果 5 参考文献 6 Python代码实现 1 Adam优化算法 2 Adam算法中的学习率衰减策略 该文 ...
- 【ELAMN预测】基于灰狼算法优化ELMAN神经网络实现数据回归预测matlab代码
1 简介 风能,作为一种重要,有潜力,无污染,可再生.可持续的能源,已经成为全球发电最为迅速的能源之一,越来越受到世界各国的青睐.近年来,为缓解能源短缺问题,改善环境,实现经济乃至人类的可持续发展,世 ...
- 【灰色神经预测】基于布谷鸟算法优化灰色神经网络模型实现数据回归预测含Matlab源码
1 简介 人工神经网络已成功应用到许多领域,如模式识别.机器学习.信号处理和信息融合等,但是,如果神经网络的学习算法或拓扑结构选择不当,可能导致出现神经网络的预测准确度低的问题.为此,许多研究者开始将 ...
- 【预测模型-ELAMN预测】基于蝙蝠算法优化ELMAN神经网络实现数据回归预测
1 简介 风能,作为一种重要,有潜力,无污染,可再生.可持续的能源,已经成为全球发电最为迅速的能源之一,越来越受到世界各国的青睐.近年来,为缓解能源短缺问题,改善环境,实现经济乃至人类的可持续发展,世 ...
- 【PNN分类】基于麻雀算法优化pnn神经网络实现数据分类附matlab代码
1 简介 概率神经网络(Probabilistic Neural Network,简称PNN)是利用贝叶斯定理和基于风险最小的贝叶斯决策规则对新样本进行分类的神经网络,具有训练时间短且不易收敛到局部极 ...
- 【预测模型-ElM分类】基于松鼠算法优化ElM神经网络实现数据分类附matlab代码
✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信.
- 【BP预测】基于鸟群算法优化BP神经网络实现数据预测附Matlab代码
1 简介 热舒适度是室内环境舒适性的评价指标,由于热舒适度的计算是一个复杂的非线性迭代过程,不便应用于空调实时控制系统中,为解决这一问题,可利用BP神经网络算法对热舒适度进行预测.但为了改善传统BP神 ...
最新文章
- python中list的运算,操作及实例
- Docker CEO Ben Golub:Docker借助开源、天时走向成功
- shell的debug模式
- 2018 年,新手前端是否真的很难找工作?
- MFC 教程【13_MFC工具条和状态栏 】
- python如何查看官方文档
- 安装Spark集群(在CentOS上)
- VBlog 的代码结构, 使用 element, vant 组件开发的纯前端博客
- Android 拼音搜索中文,包含多音字
- Facebook上市或造千亿美元航母
- 发送邮件被对方服务器退回是什么原因导致的?
- 实践数据湖iceberg 第十课 快照删除
- 数据库原理第四章测验(标黑的为答案)
- 【目标一】2019年9月15日 - 2019年9月22日晚 --- 周计划
- 推荐系统工程系列(1):浅谈推荐系统架构
- C语言模拟实现:atoi函数
- xshell中重启指令_远程服务器Xshell的使用 -- 重启服务器操作 和 linux的常用命令...
- 程序设计中常用的几种图
- RK3399 Android7.1按键进入Loader模式的原理
- 出bug就被甩锅?京东测试工程师教你如何避免
热门文章
- Vue实战开发(一)验证码与登录页面
- 平衡二叉树调整--LL-LR-RL-RR
- 跨域cooki 解决方案
- 【100个 Unity实用技能】☀️ | Unity中自定义 2D Sprite 精灵图显示顺序
- 计算机辅助应用论文,浅谈应用计算机辅助数学教学
- qduoj~前端~二次开发~打包docker镜像并上传到阿里云容器镜像仓库
- ftp设置用户只能够访问指定的目录
- 计算机函数if80到90分怎么弄,在EXCEL中制作成绩表如何统计80分以上的多少,90分以上的多少?excel分位数公式加条件...
- Mac版 Xcode+Tagent+airtest环境搭建
- WEB前端开讲啦!!!!