一、Elman神经网络介绍

1.特点
Elman神经网络是一种典型的动态递归神经网络,它是在BP网络基本结构的基础上,在隐含层增加一个承接层,作为一步延时算子,达到记忆的目的,从而使系统具有适应时变特性的能力,增强了网络的全局稳定性,它比前馈型神经网络具有更强的计算能力,还可以用来解决快速寻优问题。
2.结构
Elman神经网络是应用较为广泛的一种典型的反馈型神经网络模型。一般分为四层:输入层、隐层、承接层和输出层。其输入层、隐层和输出层的连接类似于前馈网络。输入层的单元仅起到信号传输作用,输出层单元起到加权作用。隐层单元有线性和非线性两类激励函数,通常激励函数取Signmoid非线性函数。而承接层则用来记忆隐层单元前一时刻的输出值,可以认为是一个有一步迟延的延时算子。隐层的输出通过承接层的延迟与存储,自联到隐层的输入,这种自联方式使其对历史数据具有敏感性,内部反馈网络的加入增加了网络本身处理动态信息的能力,从而达到动态建模的目的。其结构图如下图1所示,

其网络的数学表达式为:



其中,y为m维输出节点向量;x为n维中间层节点单元向量;u为r维输入向量;为n维反馈状态向量;为中间层到输出层连接权值;为输入层到中间层连接权值;为承接层到中间层连接权值;g()为输出神经元的传递函数,是中间层输出的线性组合;f()为中间层神经元的传递函数,常采用S函数。
3.与BP网络的区别
它是动态反馈型网络,它能够内部反馈、存储和利用过去时刻输出信息,既可以实现静态系统的建模,还能实现动态系统的映射并直接反应系统的动态特性,在计算能力及网络稳定性方面都比BP神经网络更胜一筹。
4.缺点
与BP神经网络一样,算法都是采用基于梯度下降法,会出现训练速度慢和容易陷入局部极小点的缺点,对神经网络的训练较难达到全局最优。

二、粒子群算法

粒子群算法是在1995年由Eberhart博士和Kennedy博士一起提出的,它源于对鸟群捕食行为的研究。它的基本核心是利用群体中的个体对信息的共享从而使整个群体的运动在问题求解空间中产生从无序到有序的演化过程,从而获得问题的最优解。设想这么一个场景:一群鸟进行觅食,而远处有一片玉米地,所有的鸟都不知道玉米地到底在哪里,但是它们知道自己当前的位置距离玉米地有多远。那么找到玉米地的最佳策略,也是最简单有效的策略就是搜寻目前距离玉米地最近的鸟群的周围区域。

在PSO中,每个优化问题的解都是搜索空间中的一只鸟,称之为"粒子",而问题的最优解就对应于鸟群中寻找的"玉米地"。所有的粒子都具有一个位置向量(粒子在解空间的位置)和速度向量(决定下次飞行的方向和速度),并可以根据目标函数来计算当前的所在位置的适应值(fitness value),可以将其理解为距离"玉米地"的距离。在每次的迭代中,种群中的例子除了根据自身的经验(历史位置)进行学习以外,还可以根据种群中最优粒子的"经验"来学习,从而确定下一次迭代时需要如何调整和改变飞行的方向和速度。就这样逐步迭代,最终整个种群的例子就会逐步趋于最优解。

上面的解释可能还比较抽象,下面通过一个简单的例子来进行说明

在一个湖中有两个人他们之间可以通信,并且可以探测到自己所在位置的最低点。初始位置如上图所示,由于右边比较深,因此左边的人会往右边移动一下小船。

现在左边比较深,因此右边的人会往左边移动一下小船

一直重复该过程,最后两个小船会相遇

得到一个局部的最优解

将每个个体表示为粒子。每个个体在某一时刻的位置表示为,x(t),方向表示为v(t)

p(t)为在t时刻x个体的自己的最优解,g(t)为在t时刻所有个体的最优解,v(t)为个体在t时刻的方向,x(t)为个体在t时刻的位置

下一个位置为上图所示由x,p,g共同决定了

种群中的粒子通过不断地向自身和种群的历史信息进行学习,从而可以找到问题的最优解。

但是,在后续的研究中表表明,上述原始的公式中存在一个问题:公式中V的更新太具有随机性,从而使整个PSO算法的全局优化能力很强,但是局部搜索能力较差。而实际上,我们需要在算法迭代初期PSO有着较强的全局优化能力,而在算法的后期,整个种群应该具有更强的局部搜索能力。所以根据上述的弊端,shi和Eberhart通过引入惯性权重修改了公式,从而提出了PSO的惯性权重模型:

每一个向量的分量表示如下

其中w称为是PSO的惯性权重,它的取值介于【0,1】区间,一般应用中均采用自适应的取值方法,即一开始令w=0.9,使得PSO全局优化能力较强,随着迭代的深入,参数w进行递减,从而使的PSO具有较强的局部优化能力,当迭代结束时,w=0.1。参数c1和c2称为学习因子,一般设置为1,4961;而r1和r2为介于[0,1]之间的随机概率值。

整个粒子群优化算法的算法框架如下:

step1种群初始化,可以进行随机初始化或者根据被优化的问题设计特定的初始化方法,然后计算个体的适应值,从而选择出个体的局部最优位置向量和种群的全局最优位置向量。

step2 迭代设置:设置迭代次数,并令当前迭代次数为1

step3 速度更新:更新每个个体的速度向量

step4 位置更新:更新每个个体的位置向量

step5 局部位置和全局位置向量更新:更新每个个体的局部最优解和种群的全局最优解

step6 终止条件判断:判断迭代次数时都达到最大迭代次数,如果满足,输出全局最优解,否则继续进行迭代,跳转至step 3。

  对于粒子群优化算法的运用,主要是对速度和位置向量迭代算子的设计。迭代算子是否有效将决定整个PSO算法性能的优劣,所以如何设计PSO的迭代算子是PSO算法应用的研究重点和难点。

三、算法流程

步骤1:输入影响因素数据与目标输出数据,ELMAN神经网络划分训练集与测试集,对数据归一化处理,

步骤2:构建ELMAN神经网络,初始化网络结构。

步骤3:粒子群算法参数初始化。初始化最大迭代次数N,种群大小n,以及c1,c2,w参数。

步骤4:初始化粒子群算法PSO的种群位置。根据步骤2的网络结构,计算需要优化的变量元素个数。

步骤5:使用粒子群算法优化。将适应度函数设为ELMAN预测的均方误差。执行PSO的循环体过程,即速度更新和位置更新,直至达到最大迭代次数,终止粒子群优化算法。

步骤6:将PSO优化后的权值和阈值参数,赋给ELMAN神经网络。(或者在循环体当中,将网络结构理解为优化变量,输出最优的网络结构)。

步骤7:PSO优化后的ELMAN神经网络训练和预测,并与优化前的ELMAN神经网络进行预测误差分析和对比。

四、演示代码

clc;clear;close all;
%% 初始化种群
N = 500;                         % 初始种群个数
d = 24;                          % 空间维数
ger = 300;                      % 最大迭代次数   % 设置位置参数限制(矩阵的形式可以多维)
vlimit = [-0.5, 0.5;-0.5, 0.5;-0.5, 0.5;-0.5, 0.5;-0.5, 0.5;-0.5, 0.5;-0.5, 0.5;-0.5, 0.5;-0.5, 0.5;-0.5, 0.5;-0.5, 0.5;-0.5, 0.5;-0.5, 0.5;-0.5, 0.5;-0.5, 0.5;-0.5, 0.5;-0.5, 0.5;-0.5, 0.5;-0.5, 0.5;-0.5, 0.5;-0.5, 0.5;-0.5, 0.5;-0.5, 0.5;-0.5, 0.5;];               % 设置速度限制
c_1 = 0.8;                        % 惯性权重
c_2 = 0.5;                       % 自我学习因子
c_3 = 0.5;                       % 群体学习因子 for i = 1:dx(:,i) = limit(i, 1) + (limit(i, 2) - limit(i, 1)) * rand(N, 1);%初始种群的位置
end
v = 0.5*rand(N, d);                  % 初始种群的速度
xm = x;                          % 每个个体的历史最佳位置
ym = zeros(1, d);                % 种群的历史最佳位置
fxm = 100000*ones(N, 1);               % 每个个体的历史最佳适应度
fym = 10000;                      % 种群历史最佳适应度
%% 粒子群工作
iter = 1;
times = 1;
record = zeros(ger, 1);          % 记录器
while iter <= gerfor i=1:Nfx(i) = calfit(x(i,:)) ; % 个体当前适应度 endfor i = 1:N      if fxm(i) > fx(i)fxm(i) = fx(i);     % 更新个体历史最佳适应度xm(i,:) = x(i,:);   % 更新个体历史最佳位置end end
if fym > min(fxm)[fym, nmax] = min(fxm);   % 更新群体历史最佳适应度ym = xm(nmax, :);      % 更新群体历史最佳位置endv = v * c_1 + c_2 * rand *(xm - x) + c_3 * rand *(repmat(ym, N, 1) - x);% 速度更新% 边界速度处理for i=1:d for j=1:Nif  v(j,i)>vlimit(i,2)v(j,i)=vlimit(i,2);endif  v(j,i) < vlimit(i,1)v(j,i)=vlimit(i,1);endendend       x = x + v;% 位置更新% 边界位置处理for i=1:d for j=1:Nif  x(j,i)>limit(i,2)x(j,i)=limit(i,2);endif  x(j,i) < limit(i,1)x(j,i)=limit(i,1);endendendrecord(iter) = fym;%最大值记录iter = iter+1;times=times+1;
end
disp(['最小值:',num2str(fym)]);
disp(['变量取值:',num2str(ym)]);
figure
plot(record)
xlabel('迭代次数');
ylabel('适应度值')

五、仿真结果

  粒子群算法的进化曲线


  PSO-ELMAN预测与优化前ELMAN预测的误差对比分析


六、参考文献

《排土场沉降预测的Elman模型及_省略_性分析_以大宝山矿李屋排土场为例_宁志杰》

【ELMAN预测】基于粒子群算法改进ELMAN动态递归神经网络实现数据预测matlab源码相关推荐

  1. 【微电网优化】基于粒子群算法求解混合储能系统容量优化问题含Matlab源码

    1 简介 为了提高供电的稳定性.可靠性,实现日夜发电,在太阳能.风能资源比较丰富的区域,建立风能.太阳能互补发电系统.但是由于系统投入成本过高,风.光又存在间歇性和不稳定性等问题,需要配置储能系统来平 ...

  2. 【优化调度】粒子群算法求解水火电调度优化问题【含Matlab源码 1181期】

    ⛄一.粒子群算法简介 1 引言 自然界中的鸟群和鱼群的群体行为一直是科学家的研究兴趣所在.生物学家Craig Reynolds在1987年提出了一个非常有影响的鸟群聚集模型,在他的仿真中,每一个个体都 ...

  3. 【WSN】基于樽海鞘群算法实现无线传感器网络WSN节点的部署优化matlab源码

    1 算法介绍 一种基于樽海鞘群算法的无线传感器网络节点定位方法,包括初始化樽海鞘群个体节点,判断节点位置,将节点位置作为食物源对周围环境进行链式搜索,找到其余节点进行确认,并转为食物源变量进行迭代搜索 ...

  4. 【路径规划】粒子群算法机器人避障路径规划【含GUI Matlab源码 923期】

    ⛄一.简介 1 粒子群算法的概念 粒子群优化算法(PSO:Particle swarm optimization) 是一种进化计算技术(evolutionary computation).源于对鸟群捕 ...

  5. 【ELAMN预测】基于粒子群算法优化ELMAN神经网络实现数据回归预测 matlab代码

    1 简介 风能,作为一种重要,有潜力,无污染,可再生.可持续的能源,已经成为全球发电最为迅速的能源之一,越来越受到世界各国的青睐.近年来,为缓解能源短缺问题,改善环境,实现经济乃至人类的可持续发展,世 ...

  6. 基于粒子群算法改进的DELM预测 -附代码

    粒子群算法改进的深度极限学习机DELM的回归预测 文章目录 粒子群算法改进的深度极限学习机DELM的回归预测 1.ELM原理 2.深度极限学习机(DELM)原理 3.粒子群算法 4.粒子群算法改进DE ...

  7. 【ELMAN预测】基于布谷鸟算法改进ELMAN动态递归神经网络实现数据预测matlab源码

    一.Elman神经网络介绍 1.特点 Elman神经网络是一种典型的动态递归神经网络,它是在BP网络基本结构的基础上,在隐含层增加一个承接层,作为一步延时算子,达到记忆的目的,从而使系统具有适应时变特 ...

  8. 【ELM预测】基于粒子群算法改进极限学习机ELM实现数据预测matlab源码

    一.极限学习机的概念 极限学习机(Extreme Learning Machine) ELM,是由黄广斌提出来的求解单隐层神经网络的算法. ELM最大的特点是对于传统的神经网络,尤其是单隐层前馈神经网 ...

  9. 【PSO三维路径规划】基于matlab粒子群融合遗传算法多无人机三维路径规划【含Matlab源码 333期】

    一.无人机简介 0 引言 随着现代技术的发展,飞行器种类不断变多,应用也日趋专一化.完善化,如专门用作植保的大疆PS-X625无人机,用作街景拍摄与监控巡察的宝鸡行翼航空科技的X8无人机,以及用作水下 ...

最新文章

  1. 拒绝了我们的连接请求_职场上,我们该如何巧妙而优雅的拒绝同事忙的请求呢?...
  2. python列出文件夹所有文件_python-列出所有目录及子目录文件
  3. python画曲线-python绘制动态曲线教程
  4. 一行Java代码实现将数组转成List
  5. PST文件的读取(待整理)
  6. leetcode 303. 区域和检索 - 数组不可变
  7. 韩媒体:900万人个人信息被非法泄露到中国
  8. linux系统C语言实现域名解析功能
  9. tornado异步请求响应速度的实例测试
  10. java 内存管理_高性能Java代码之内存管理
  11. 矩阵迹(trace)与行列式(determinate)的一些性质
  12. Oracle怎样创建共享文件夹,OracleVirtualBox虚拟机如何实现文件夹共享
  13. 三步快速搭建android开发环境 (下载包已集成可用sdk,无需费心到google相应网站下载,快哉!)
  14. 耳机不怕丢,Belkin最新降噪耳机支持苹果 Find My
  15. JPEG文件中默认Huffman表说明
  16. 战略选址、渠道精耕,数说故事数智化地图助力零售行业高质量扩张
  17. 推荐四个事半功倍小工具(vscode也算小工具的话)
  18. Windows系统盘清理
  19. python反爬与反反爬常用知识点
  20. 在米思齐上实现数码管图形化编程

热门文章

  1. 《校园宿舍管理系统》之数据库程序设计/GUI/java/eclipse/MySQL/JDBC
  2. java走棋_Java五子棋小游戏(控制台纯Ai算法)
  3. Github无法加载或不显示图片解决办法
  4. #芯片# N25Q128A21BSF40F
  5. python打印商品列表_python 列表应用-简单的购物车
  6. 查看iOS手机系统日志,在mac/window电脑上查看
  7. 神经网络量化入门--基本原理
  8. Liunx下Qos功能实现简析
  9. 【现代简约风格装修案例】诠释不一样的简单 !
  10. IMPERVA - WAF syslog配置及注意事项