一、狼群算法简介

1 狼种分类
头狼、探狼、猛狼。

2 猎物分配规则
论功行赏,先强后弱。

3 狼群算法的主体构成
探狼游走、头狼召唤、猛狼围攻3种智能行为,“胜者为王”的头狼角逐规则和“优胜劣汰”的狼群更新规则。
Step1:在解空间中随机初始化狼群的空间坐标,依据目标函数值的大小角逐出人工头狼。
Step2:探狼开始随机游走搜索猎物,若发现某个位置的目标函数值大于头狼的目标函数值,将更新头狼位置,同时头狼发出召唤行为;若未发现,探狼继续游走直到达到最大游走次数,头狼在原本的位置发出召唤行为。
Step3:听到头狼召唤的猛狼以较大的步长快速向头狼奔袭,若奔袭途中猛狼的目标函数值大于头狼的目标函数值,则将对头狼位置进行更新;否则,猛狼将继续奔袭直到进入围攻范围。
Step4:靠近头狼的猛狼将联合探狼对猎物(把头狼位置视为猎物)进行围捕,围捕过程中若其他人工狼的目标函数值大于头狼的目标函数值,则对头狼位置进行更新,直到捕获猎物。
Step5:淘汰狼群中目标函数值较小的人工狼,并在解空间中随机生成新的人工狼,实现狼群的更新。
Step6:最后判断头狼的目标函数值是否达到精度要求或算法是否达到最大迭代次数。

4 人工狼群算法的若干规则
4.1 头狼产生规则
初始解空间中,具有最优目标函数值的人工狼即为头狼;在迭代过程中,将每次迭代后最优狼的目标函数值与前一代中头狼的值进行比较,若更优则对头狼位置进行更新,若此时存在多匹的情况,则随机选一匹成为头狼。头狼不执行3种智能行为,直接进入迭代,直到被其他更强的人工狼代替。

4.2 游走行为


5 人工狼群算法的具体步骤

6 BP神经网络的结构与数学原理
此节的内容 极!其!重!要!但是要涉及到一些数学,所以我尽量用人话去跟大家细细解释,并且结合实例来给大家进行一下分析。


这里一共是 11 组数据(数据量很少),很明显 y 是关于 x1,x2,x3 的三元函数,通常情况下,想要通过一套固定的套路来拟合出一个三元函数的关系式,是一件很复杂的事。而实际问题中的参数往往不止三个,可能成千上百,也就是说 决定 y 的参数会有很多,这样的问题更是复杂的很,用常规的方法去拟合,几乎不可能,那么换一种思路,用 Bp神经网络的方法来试一下。
根据上表给出的条件和问题,我们先来分析一下。首先,我们的输入信息是 3 个参数,x1,x2,x3 。输出结果是 1 个数 y 。那么可以画一个这样的关系网路图(直接手画了,凑合看吧···):

在这个网络中,输入层(input )有三个节点(因为有三个参数),隐藏层(hidden )先不表示,输出层(output )有1个节点(因为我们要的结果只有一个 y )。那么关键的问题来了,如何进行这一通操作,它的结构究竟是怎样的?

6.1 正向传播
正向传播就是让信息从输入层进入网络,依次经过每一层的计算,得到最终输出层结果的过程。
我直接把设计好的结构图给大家画出来,然后再一点一点地解释。结构如下:

看到这儿你可能会有点懵,不过不要紧,一步一步来分析。先来看网络的结构,输入层(input )没有变,还是三个节点。输出层(input )也没有变。重点看隐藏层(hidden ),就是图中红色虚线框起的部分,这里我设计了一个隐藏层为两层的网络,hidden_1和hidden_2 ,每层的节点为 2 个,至于为什么是两层,节点数为什么是 2 两个 ,这里你只需要知道,实验证明,解决这个问题,这样的网络就够用了。具体的一会儿讲。

关键看一下连线代表的意义,和计算过程。可以从图上看到,每层的节点都与下一层的每个节点有一一对应的连线,每条连线代表一个权重,这里你可以把它理解为信息传输的一条通路,但是每条路的宽度是不一样的,每条通路的宽度由该通道的参数,也就是该通路的权重来决定。为了说明这个问题,拿一个节点的计算过程来进行说明,看下图:





图像来自百度百科,可以看到sigmoid函数能够将函数限制在 0到1 的范围之内。
这里还要进行一下说明,sigmoid 是最早使用的激励函数,实际上还有更多种类的激励函数 ,比如 Relu ,tanh 等等,性质和表达式各有不同,以后再说,这里先用 sigmoid 来说明。
如果说看到这儿,你对 激励函数 这个概念还是不太懂的话 ,没关系,可以假装自己明白了,你就知道这个东西很有用,里面必有道道就行了,以后慢慢体会,慢慢理解,就行了。接着往下看。
刚刚解释了一个节点的计算过程,那么其他节点也就可以举一反三,一一计算出来。现在我们来简化一下网络。我们可以把x1,x2,x3作为一个向量 [x1,x2,x3] ,权重矩阵 u 也作为一个 3x2 的矩阵 ,w 作为一个 2x2 的矩阵 ,v作为一个 2x1 的矩阵,三个矩阵如下:

可以看到这三个矩阵与网络中的结构图中是一一对应的。下面我们把隐藏层与输出层也写成矩阵的形式:

可以看到这两层隐藏层(hidden)的输入Hi 与 Ho 均为 1x2 的矩阵,输出层(output )为 1x1 的矩阵。下面就可以把网络简化为下面的结构:

根据我们刚才讲过的每个节点的计算方法,以及我们简化后的网络,则可以将整个计算过程等效的化为以下几个矩阵相城的步骤(矩阵相乘是怎么会回事,请复习线性代数…):

注意:下式中,除sigmoid代表激励函数以外,其余各个符号都代表一个矩阵(或者向量),而非常数,乘积符号“ x ”代表常规的矩阵乘法计算。

6.2 反向传播
那么有正向传播,就必须得有反向传播,下面来讲一下 反向传播 的过程。首先明确一点,反向传播的信息是什么,不卖关子,直接给答案,反向传播的信息是误差,也就是 输出层(output )的结果 与 输入信息 x 对应的真实结果 之间的差距(表达能力比较差,画个图说明…)。
拿出上文的数据表中的第一组数据 x1 = 1,x2=1,x3=2,y=2 为例。








6.3 网络的训练
通过一次正向传播,和一次反向传播,我们就可以将网络的参数更新一次,所谓训练网络,就是让正向传播和反向传播不断的往复进行,不断地更新网络的参数,最终使网络能够逼近真实的关系。

理论上,只要网络的层数足够深,节点数足够多,可以逼近任何一个函数关系。但是这比较考验你的电脑性能,事实上,利用 Bp 网络,能够处理的数据其实还是有限的,比如 Bp 网络在图像数据的识别和分类问题中的表现是很有限的。但是这并不影响 Bp 网络是一种高明的策略,它的出现也为后来的 AI 技术做了重要的铺垫。

二、部分源代码

%% 改进WPA-BP神经网络
%% 清空环境
clear all;
close all;
clc;
data=xlsread('Test.xlsx','Sheet1','A2:G46');%读取数据
[M,NN]=size(data);%M是样本数,N是变量数
inputn=data(:,1:NN-1)';%训练样本输入
outputn=data(:,NN)';%训练样本输出
%节点个数
inputnum=NN-1;%输入个数
hiddennum=12;%隐藏层
outputnum=1;%输出个数
%构建网络
net=newff(inputn,outputn,hiddennum);
%% 狼群算法参数设置
tictime = toc;
disp(['用时=  ',num2str(time)])
x=zbest;
%% 把最优初始阀值权值赋予网络预测%% BP网络训练
%网络进化参数
net.trainParam.epochs=100;%bp神经网络的代数
net.trainParam.lr=0.1;
%net.trainParam.goal=0.00001;%网络训练
[net,per2]=train(net,inputn,outputn);
%% BP网络预测
% load data inputn_test output_test
inputn_test=inputn;%测试数据输入
output_test=outputn;%测试数据输出
an=sim(net,inputn_test);%预测
error=(an-output_test);%误差
error_xiangdui=(an-output_test)./output_test;%相对误差
figure(1)
plot(error_xiangdui,'ko-')
ylabel('相对误差值')
title('狼群优化BP神经网络')
figure(2)
plot(error,'ro-')
ylabel('误差值')
title('狼群优化BP神经网络')
figure(3)
plot(output_test,'r + -');
hold on;
plot(an,'b * -')
hold off
legend('真实值','预测值');
title('狼群优化BP神经网络')

三、运行结果

四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.
[3]周品.MATLAB 神经网络设计与应用[M].清华大学出版社,2013.
[4]陈明.MATLAB神经网络原理与实例精解[M].清华大学出版社,2013.
[5]方清城.MATLAB R2016a神经网络设计与应用28个案例分析[M].清华大学出版社,2018.

【BP数据预测】基于matlab狼群算法优化BP神经网络数据预测【含Matlab源码 658期】相关推荐

  1. 【Matlab身份证识别】身份证号码识别【含GUI源码 014期】

    一.代码运行视频(哔哩哔哩) [Matlab身份证识别]身份证号码识别[含GUI源码 014期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MAT ...

  2. 【Matlab车牌识别】停车计费系统【含GUI源码 735期】

    一.代码运行视频(哔哩哔哩) [Matlab车牌识别]停车计费系统[含GUI源码 735期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MATLA ...

  3. 【Matlab生物电信号】生物电信号仿真【含GUI源码 684期】

    一.代码运行视频(哔哩哔哩) [Matlab生物电信号]生物电信号仿真[含GUI源码 684期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]董兵,超于毅,李 ...

  4. 【Matlab语音分析】语音信号分析【含GUI源码 1718期】

    一.代码运行视频(哔哩哔哩) [Matlab语音分析]语音信号分析[含GUI源码 1718期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]韩纪庆,张磊,郑铁 ...

  5. 【Matlab水果识别】自助水果超市【含GUI源码 594期】

    一.代码运行视频(哔哩哔哩) [Matlab水果识别]自助水果超市[含GUI源码 594期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]倪云峰,叶健,樊娇娇 ...

  6. 【FNN回归预测】基于matlab蝙蝠算法优化前馈神经网络数据回归预测【含Matlab源码 2070期】

    一.粒子群优化前馈神经网络简介 1 前馈神经网络FNN 前馈神经网络FNN是解决非线性问题的很好模型,它通过梯度下降算法进行网络训练.FNN与时间序列法等传统方法相比,能够更好地来描述问题的非线性特性 ...

  7. 【预测模型-BP分类】基于人工蜂群算法优化BP神经网络实现数据分类附matlab代码

    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信.

  8. 【BP分类】基于哈里斯鹰算法优化BP神经网络实现数据分类含Matlab源码

    ​1 简介 2 部分代码 function [fbst, xbst, performance] = hho( objective, d, lmt, n, T, S)%Harris hawks opti ...

  9. 【SVM分类】基于matlab鸽群算法优化支持向量机SVM分类【含Matlab源码 2242期】

    ⛄一.鸽群算法简介 基于鸽群在归巢过程中的特殊导航行为,Duan等提出了一种仿生群体智能优化算法---鸽群优化算法.在这个算法中,通过模仿鸽子在寻找目标的不同阶段使用不同导航工具这一机制,提出了2种不 ...

  10. 【BP数据预测】基于matlab鸟群算法优化BP神经网络数据预测【含Matlab源码 1772期】

    一.鸟群算法优化BP神经网络简介 1 BP 神经网络 BP神经网络是一种按误差逆向传播算法训练的多层前馈网络, 主要由输入层.中间层和输出层组成, 拓扑结构如图1所示. BP 神经网络是通过不断对样本 ...

最新文章

  1. 【机器学习】多项式回归原理介绍
  2. 强大的vim配置文件,让编程更随意
  3. 海康威视摄像头安装插件检测不到_海康威视摄像机常见问题解答
  4. java基础提升篇:深入浅出Java多线程
  5. ios uiview 如何刷新_ios – 从另一个UIViewController刷新表
  6. PyTorch基础(part8)--LSTM
  7. #if DEBUG 和 if (env.IsDevelopment()) 的用法区别
  8. 基于Linux的SOCKET编程之TCP半双工Client-Server聊天程序
  9. MVC常见的控制器,接口,数据层之间的操作
  10. 使用CocoaPods被卡住:Updating local specs repositories
  11. string.split方法 保留分隔符_Python pandas库159个常用方法使用说明
  12. 別人的心得。。。。。學習
  13. 图纸管理协同办公软件推荐
  14. 仙剑3外传(问情篇)Win7(32/64位)不能运行的完全解决办法【转载】
  15. Unity镜头光晕模拟开源库
  16. 创客集结号:国内无人机技术发展的难点有哪些?
  17. 示例程序009--阙值化(二值化,cvThreshold)
  18. 【ZeloEngine】ImGui汇总
  19. 论文写作 1: 学术论文的基本概念
  20. 在MySQL中 NULL的含义是_mysql null的含义是什么

热门文章

  1. 小程序--模板的使用 说明--详细版的
  2. 教育实习手册高中计算机,计算机教育实习论文大纲格式模板 计算机教育实习论文框架如何写...
  3. 火狐浏览器的同步问题
  4. java没有pom文件_java – Maven依赖没有得到相应的POM文件下载
  5. 企业如何应用ERP?企业应用ERP流程详解。
  6. Java SE、OpenJDK、Java EE、Java 框架、Java ME 等概念之间的区别
  7. linux虚拟机简单部署以及安装可视化界面
  8. css阿拉伯数字,css 古文排版(含阿拉伯数字)
  9. Kali Linux渗透测试——WEB渗透(二)
  10. 【论文阅读】2018-基于深度学习的网络流量分类及异常检测方法研究_王伟