当前位置: 首页 > news >正文

基于遗传算法的BP神经网络在汇率预测中的应用研究(Matlab代码实现)

目录

1 遗传算法

2 实数编码的遗传算法与神经网络的结合

3 Matlab代码及详细文章

4 运行结果

 5 参考文献

6 写在最后


1 遗传算法

(1)遗传算法(Genetic Algorithms, GA)是一种全局寻优搜索算法,它通过将问题编码为由基因组成的染色体,然后通过模拟自然界的进化过程,对染色体的适应性进行选择、交叉、变异操作,经过不断的循环处理从而产生代表问题解的染色体。GA具有很强的鲁棒性,由于GA针对问题编码的染色体进行操作,隔离了问题本身的特性,所以具有广泛的适应性。同时由于算法从多初始点开始并行操作,可防止搜索过程收敛于局部极值。另一方面,交叉算子的使用是GA不同于盲目搜索与完全随机搜索、它是一种在当前最优的基础上构造更优解的过程,因此具有一定的启发式搜索和梯度搜索效率高的优点。GA通过群体实现搜索过程,使它不同于单点搜索,且易于并行化,从而提高算法的效率。
(2)遗传算法的一般描述。首先确定染色体(即个体)的编码形式,确定计算染色体适应值的函数,确定群体规模N,杂交率Pc,变异率Pm 等参数。然后可进行编程计算。
更详细总结见:

智能优化算法——遗传算法(Python&Matlab实现)

2 实数编码的遗传算法与神经网络的结合

用遗传算法训练神经网络可以采用二进制编码或实数编码。考虑到本文的神经网络规模较大,本文采用实数编码,步骤如下:

(6)重复(3). (4) . (5)直到下一代群体满为止。使用GA反复优化神经网络的权值,计算当前群体中个体的适应值,得到适应值最大的个体 bestpop.
(7)对 bestpop进行解码,此时得到的参数组合已经充分接近最佳参数组合、在此基础上用BP算法进行学习,得到网络的最优权值。
(8)用得到的最优权值进行模拟(预测)。


  

3 Matlab代码及详细文章

本文仅展现部分代码,全部代码及文章见:

基于遗传算法的BP神经网络在汇率预测中的应用研究(Matlab代码实现)

function error = objfun_BP(x,inputnum,hiddennum,outputnum,net,inputn,outputn)
%该函数用来计算适应度值
%x          input     个体
%inputnum   input     输入层节点数
%outputnum  input     隐含层节点数
%net        input     网络
%inputn     input     训练输入数据
%outputn    input     训练输出数据

%error      output    个体适应度值

%提取
w1=x(1:inputnum*hiddennum);
B1=x(inputnum*hiddennum+1:inputnum*hiddennum+hiddennum);
w2=x(inputnum*hiddennum+hiddennum+1:inputnum*hiddennum+hiddennum+hiddennum*outputnum);
B2=x(inputnum*hiddennum+hiddennum+hiddennum*outputnum+1:inputnum*hiddennum+hiddennum+hiddennum*outputnum+outputnum);


%网络进化参数
net.trainParam.epochs=20;
net.trainParam.lr=0.1;
net.trainParam.mc = 0.8;%动量系数,[0 1]之间
net.trainParam.goal=0.01;
net.trainParam.show=100;
net.trainParam.showWindow=0;
 
%网络权值赋值
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}=B2;

%网络训练
net=train(net,inputn,outputn);

an=sim(net,inputn);
error=sum(abs(an-outputn));

4 运行结果

 

 

 

 

 

 

 5 参考文献

[1]惠晓峰,胡运权,胡伟.基于遗传算法的BP神经网络在汇率预测中的应用研究[J].数量经济技术经济研究,2002(02):80-83.

6 写在最后

部分理论引用网络文献,如有侵权请联系删除。

相关文章:

  • vue3+three.js实现疫情可视化
  • UNIAPP day_05(9.3) Cookie、WebStorage、Session 和 Token的区别、uni-app最终部署
  • 1、代理模式
  • python-json校验-jsonpath
  • 解密Kerberos流量
  • [网鼎杯 2018]Comment
  • Java基础JDK命令行工具(jpd,jstat,jstack,jinfo)
  • 【构建并发程序】8-并发队列之阻塞队列
  • Mysql之用户管理
  • 内网边界代理
  • 【CSS】笔试题精讲
  • Java并发技术基础
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • python打包exe
  • ros rviz显示orb-slam2保存的轨迹
  • Akka系列(七):Actor持久化之Akka persistence
  • CSS 提示工具(Tooltip)
  • Docker下部署自己的LNMP工作环境
  • Elasticsearch 参考指南(升级前重新索引)
  • Electron入门介绍
  • ESLint简单操作
  • Github访问慢解决办法
  • Java深入 - 深入理解Java集合
  • Node 版本管理
  • Python语法速览与机器学习开发环境搭建
  • QQ浏览器x5内核的兼容性问题
  • quasar-framework cnodejs社区
  • rabbitmq延迟消息示例
  • Twitter赢在开放,三年创造奇迹
  • Vue--数据传输
  • 聚簇索引和非聚簇索引
  • 如何利用MongoDB打造TOP榜小程序
  • 如何设计一个微型分布式架构?
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 三分钟教你同步 Visual Studio Code 设置
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 学习HTTP相关知识笔记
  • 阿里云ACE认证学习知识点梳理
  • 进程与线程(三)——进程/线程间通信
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (function(){})()的分步解析
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (九十四)函数和二维数组
  • (三)终结任务
  • (三十五)大数据实战——Superset可视化平台搭建
  • (四)linux文件内容查看
  • (转)大型网站架构演变和知识体系
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .gitignore文件—git忽略文件
  • .NET CORE Aws S3 使用