遗传算法优化的BP神经网络建模[精选.]

合集下载

基于遗传算法的BP神经网络气象预报建模

基于遗传算法的BP神经网络气象预报建模

基于遗传算法的BP神经网络气象预报建模 wxyhome20世纪90年代以来,国内外在大气学科中开展了很多有关神经网络预报建模和气候分析等应用研究。

然而随着神经网络方法在大气科学领域研究的不断深入,研究人员发现神经网络方法在实际业务天气预报应用中存在一个重要的问题,即在利用神经网络方法进行气象预报建模时,神经网络的初始权值、网络结构以及网络的学习参数,动量因子难以确定,往往是通过反复训练来确定网络的结构和各种参数,这样会导致在应用中出现过拟合问题,严重影响网络的泛化能力,极大限制神经网络在实际天气业务中的应用([1-8])。

该问题的研究不仅关系到在大气学科中能否进一步深入开展有关人工神经网络方法的业务预报应用,并且也是目前人工神经网络应用理论研究中尚未得到很好解决的关键技术问题。

神经网络如何有效提高神经网络的泛化能力,我简单以下分析影响神经网泛化能力的因素。

首先我简单介绍以下神经人工神经网络(Artificial Neural Networks,ANN),简称“神经网络”(NN),它是作为对人脑最简单的一种抽象和模拟,是对人的大脑系统一定特性的描述。

简单地讲,它是一个数学模型,可以用电子线路来实现或用计算机来模拟人的自然智能。

其中BP神经网络是目前应用最为广泛的神经网络模型之一,也是应用最具有成效的神经网络模型之一。

它在大气科学预报集成、观测资料优化等方面都有应用。

BP神经网络(Back-propagation Neutral Network) 通常是指基于误差反向传播算法(BP算法)的多层前向神经网络,采用由导师的训练方式。

它是 D.E.Rumelhart和J.L.McCelland及其研究小组在1986年研究并设计出来的。

BP算法已成为目前应用最为广泛的神经网络学习算法,绝大部分的神经网络模型是采用BP算法或它的变化形式,它也是前向神经网络的核心部分,体现了神经网络最精华的部分。

由于它可以实现输入和输出的任意非线性映射,这使得它在诸如函数逼近、模式识别、数据压缩等领域有广泛的应用。

基于遗传算法的BP神经网络算法

基于遗传算法的BP神经网络算法

基于遗传算法的BP神经网络算法基于遗传算法的BP神经网络算法是一种将遗传算法与BP神经网络相结合的机器学习算法。

BP神经网络是一种具有自适应学习功能的人工神经网络,它通过反向传播算法来不断调整网络的权重和阈值,从而实现对样本数据的学习和预测。

遗传算法是一种模拟生物进化过程的优化算法,它通过选择、交叉和变异等操作来产生下一代的优秀个体,从而逐步寻找到最优解。

在基于遗传算法的BP神经网络算法中,遗传算法用于优化BP神经网络的初始权重和阈值,以提高网络的学习和泛化能力。

1.初始化个体群体:随机生成一组个体,每个个体代表BP神经网络的初始权重和阈值。

2.适应度评估:使用生成的个体来构建BP神经网络,并使用训练数据进行训练和验证,评估网络的适应度,即网络的性能指标。

3.选择操作:根据个体的适应度值确定选择概率,选择一些适应度较高的个体作为父代。

4.交叉操作:从父代中选择两个个体,通过交叉操作生成两个新的子代个体。

5.变异操作:对新生成的子代个体进行变异操作,引入一定的随机扰动,增加种群的多样性。

6.替换操作:根据一定的替换策略,用新生成的子代个体替代原来的父代个体。

7.终止条件判断:根据预先设定的终止条件(如达到最大迭代次数或达到一些适应度值阈值)判断是否终止算法。

8.返回结果:返回适应度最高的个体,即最优的BP神经网络参数。

然而,基于遗传算法的BP神经网络算法也存在一些缺点。

首先,算法的收敛速度较慢,需要较长的时间进行优化。

其次,算法需要设置一些参数,如种群大小、交叉概率和变异概率等,不同的参数组合可能对算法的性能产生较大影响,需要经过一定的试错过程。

综上所述,基于遗传算法的BP神经网络算法是一种结合了两种优化方法的机器学习算法,能够有效提高BP神经网络的学习和泛化能力。

同时,也需要在实际应用中根据具体情况选择合适的参数设置和终止条件,以获得更好的算法性能。

遗传算法优化确定BP神经网络的遥感图像分类

遗传算法优化确定BP神经网络的遥感图像分类

遗传算法优化确定BP神经网络的遥感图像分类遥感图像分类是遥感技术应用的重要方向之一,其主要目的是根据遥感图像上包含的信息对不同类别的地物进行自动划分和分类。

由于遥感图像存在着复杂的光谱、空间和时间相关性,因此其分类任务具有一定的难度。

为了提高遥感图像分类的准确度和可靠性,近年来,研究者们开始尝试采用神经网络等方法进行分类优化。

其中BP神经网络是一种常用的方法,它具有学习能力强、处理能力高等优点,但是其性能往往会受到参数设置的影响,因此如何优化BP神经网络成为了一个热门的研究方向。

遗传算法是一种基于自然选择和遗传变异机制的优化算法,其优点是具有全局搜索能力、可以处理非线性优化问题、不易陷入局部最优等。

因此,采用遗传算法来优化BP神经网络在遥感图像分类中应用的可行性被越来越多地研究和验证。

1. 特征提取:对遥感图像进行初步处理,提取出有用的特征信息,包括光谱、空间和纹理等多个维度的特征。

2. 数据预处理:将提取出来的特征进行归一化处理,消除量纲差异和数据离散化等影响因素。

3. BP神经网络建模:根据预处理后的数据,采用BP神经网络作为分类模型,确定神经网络的结构和参数,包括隐含层神经元个数、学习速率、动量系数等。

4. 遗传算法优化:采用遗传算法来搜索最佳的BP神经网络参数组合,优化网络模型的性能。

具体来说,将BP神经网络的结构和参数进行编码,构建适应度函数,通过选择、交叉和变异等基本遗传算子进行群体演化,搜索适应度函数最大的BP神经网络参数组合,从而得到最终的优化结果。

5. 训练模型:根据优化后的BP神经网络参数组合,对遥感图像进行训练,不断调整网络权值和阈值,直至达到收敛条件。

6. 测试预测:将训练好的模型应用到新的未知遥感图像上,对其进行分类预测,在验证集和测试集上进行性能评估,并与其他分类方法进行比较。

总体来说,遗传算法优化BP神经网络的遥感图像分类方法具有较高的效率和准确率。

但是,由于其需要进行大量的参数调节和计算,因此需要充分考虑计算时间和资源的限制,从而使其成为一个更为普及和实用的优化方法。

基于遗传算法的BP神经网络算法

基于遗传算法的BP神经网络算法

基于遗传算法的BP神经网络算法人工神经网络(Artificial Neural Network,ANN)是一种模拟人脑中神经元运作原理的数学模型。

反向传播神经网络(Back Propagation Neural Network,BPNN)是一种常用的人工神经网络模型,其训练方法是通过计算输出与期望输出之间的误差,并将误差反向传播进行网络参数的调整。

遗传算法(Genetic Algorithm,GA)是一种基于生物进化理论的优化方法,通过模拟基因遗传和进化的过程来最优解。

BP神经网络算法结合遗传算法能够提高网络的训练效果,并进一步提升算法的性能。

1.随机初始化BP神经网络的权重和阈值。

BP神经网络的训练需要初始化网络的权重和阈值,遗传算法可以随机生成初始值作为种群的个体。

2.选择适应度函数。

适应度函数用于评估每个个体的适应度程度,即个体在解决问题中的优劣程度。

对于BP神经网络,适应度函数可以选择网络的误差函数,如均方误差。

3.选择遗传算子。

遗传算子包括选择、交叉和变异操作。

选择操作根据个体的适应度确定被选中参与下一代个体的概率。

交叉操作模拟基因交换,通过交叉操作可以产生新的个体。

变异操作则模拟基因突变,通过变异操作可以增加种群的多样性。

4.根据选择的适应度函数计算种群的适应度值。

对于BP神经网络,可以使用遗传算法对初始种群进行迭代并通过BP算法进行训练,根据训练结果计算个体的适应度值。

5.根据选择的适应度值进行选择操作。

根据适应度值选择种群中的个体,并根据选择的概率生成新的种群。

6.进行交叉操作。

通过交叉操作将选定的个体进行基因交换,并生成新的个体。

7.进行变异操作。

对选定的个体进行基因突变,增加种群的多样性。

8.根据选择的适应度函数计算新种群的适应度值。

对新生成的个体进行适应度评估。

9.判断终止条件。

终止条件可以根据算法的需求进行设置,如达到指定的迭代次数或达到指定的适应度阈值。

10.重复进行步骤5至步骤9,直到满足终止条件。

遗传算法优化BP神经网络权值和阈值(完整版)

遗传算法优化BP神经网络权值和阈值(完整版)

/viewthread.php?tid= 50653&extra=&highlight=%E9%81%97%E4%BC%A0%E7% AE%97%E6%B3%95&page=1Matlab遗传算法优化神经网络的例子(已调试成功)最近论坛里问到用遗传算法优化神经网络问题的人很多,而且论坛里有很多这方面的代码。

但可惜的是所有代码都或多或少有些错误!最郁闷的莫过于只有发帖寻求问题答案的探索者,却很少有对问题进行解答的victor。

本人在论坛里看到不少会员对能运行成功的遗传算法优化神经网络例子的需求是多么急切,我也深有感触!现把调试成功的一个例子贴出来,供大家参考!(本例子是基于一篇硕士论文里的代码为蓝本改编的,此处就不再注明作者了。

)遗传算法优化bp.rar (3.34 KB)注:该代码是由会员“书童”耗费了一整天的时间调试成功的,在此再次对我们的“书童”同学乐于助人的高尚品德致敬,并对其深表感谢!PS:参考会员“ilovexyq”意见,先对其做以补充。

该网络为遗传算法优化bp的一个典型例子,输入为7,输出为7,隐层为25。

该网络输入输出数据就是为了说明问题而随便加的,没有实际意义。

如用于自己的实际问题,把数据替换并根据需要改一下网络结构就行了。

PS:如有问题,请先阅读此贴:/thread-52587-1-1.html###[本帖最后由 yuthreestone 于 2009-10-15 10:52 编辑]搜索更多相关主题的帖子: 调试例子算法Matlab神经网络/thread-52587-1-1.html遗传算法优化BP神经网络权值和阈值(完整版)会员renjia前一段时间分享的程序,地址如下:/viewthread.php?tid=50653&extra=&highlight=% E9%81%97%E4%BC%A0%E7%AE%97%E6%B3%95&page=1:(1)renjia提供的程序存在一些小错误,主要是设计的bp网络是两个隐含层,但编码的时候只有一个隐含层。

毕业设计论文基于遗传算法的BP神经网络的优化问题研究.doc

毕业设计论文基于遗传算法的BP神经网络的优化问题研究.doc

编号:审定成绩:重庆邮电大学毕业设计(论文)设计(论文)题目:基于遗传算法的BP神经网络的优化问题研究学院名称:学生姓名:专业:班级:学号:指导教师:答辩组负责人:填表时间:2010年06月重庆邮电大学教务处制摘要本文的主要研究工作如下:1、介绍了遗传算法的起源、发展和应用,阐述了遗传算法的基本操作,基本原理和遗传算法的特点。

2、介绍了人工神经网络的发展,基本原理,BP神经网络的结构以及BP算法。

3、利用遗传算法全局搜索能力强的特点与人工神经网络模型学习能力强的特点,把遗传算法用于神经网络初始权重的优化,设计出混合GA-BP算法,可以在一定程度上克服神经网络模型训练中普遍存在的局部极小点问题。

4、对某型导弹测试设备故障诊断建立神经网络,用GA直接训练BP神经网络权值,然后与纯BP算法相比较。

再用改进的GA-BP算法进行神经网络训练和检验,运用Matlab软件进行仿真,结果表明,用改进的GA-BP算法优化神经网络无论从收敛速度、误差及精度都明显高于未进行优化的BP神经网络,将两者结合从而得到比现有学习算法更好的学习效果。

【关键词】神经网络BP算法遗传算法ABSTRACTThe main research work is as follows:1. Describing the origin of the genetic algorithm, development and application, explain the basic operations of genetic algorithm, the basic principles and characteristics of genetic algorithms.2. Describing the development of artificial neural network, the basic principle, BP neural network structure and BP.3. Using the genetic algorithm global search capability of the characteristics and learning ability of artificial neural network model with strong features, the genetic algorithm for neural network initial weights of the optimization, design hybrid GA-BP algorithm, to a certain extent, overcome nerves ubiquitous network model training local minimum problem.4. A missile test on the fault diagnosis of neural network, trained with the GA directly to BP neural network weights, and then compared with the pure BP algorithm. Then the improved GA-BP algorithm neural network training and testing, use of Matlab software simulation results show that the improved GA-BP algorithm to optimize neural network in terms of convergence rate, error and accuracy were significantly higher than optimized BP neural network, a combination of both to be better than existing learning algorithm learning.Key words:neural network back-propagation algorithms genetic algorithms目录第一章绪论 (1)1.1 遗传算法的起源 (1)1.2 遗传算法的发展和应用 (1)1.2.1 遗传算法的发展过程 (1)1.2.2 遗传算法的应用领域 (2)1.3 基于遗传算法的BP神经网络 (3)1.4 本章小结 (4)第二章遗传算法 (5)2.1 遗传算法基本操作 (5)2.1.1 选择(Selection) (5)2.1.2 交叉(Crossover) (6)2.1.3 变异(Mutation) (7)2.2 遗传算法基本思想 (8)2.3 遗传算法的特点 (9)2.3.1 常规的寻优算法 (9)2.3.2 遗传算法与常规寻优算法的比较 (10)2.4 本章小结 (11)第三章神经网络 (12)3.1 人工神经网络发展 (12)3.2 神经网络基本原理 (12)3.2.1 神经元模型 (12)3.2.2 神经网络结构及工作方式 (14)3.2.3 神经网络原理概要 (15)3.3 BP神经网络 (15)3.4 本章小结 (21)第四章遗传算法优化BP神经网络 (22)4.1 遗传算法优化神经网络概述 (22)4.1.1 用遗传算法优化神经网络结构 (22)4.1.2 用遗传算法优化神经网络连接权值 (22)4.2 GA-BP优化方案及算法实现 (23)4.3 GA-BP仿真实现 (24)4.3.1 用GA直接训练BP网络的权值算法 (25)4.3.2 纯BP算法 (26)4.3.3 GA训练BP网络的权值与纯BP算法的比较 (28)4.3.4 混合GA-BP算法 (28)4.4 本章小结 (31)结论 (32)致谢 (33)参考文献 (34)附录 (35)1 英文原文 (35)2 英文翻译 (42)3 源程序 (47)第一章绪论1.1 遗传算法的起源从生物学上看,生物个体是由细胞组成的,而细胞则主要由细胞膜、细胞质、和细胞核构成。

基于遗传算法的BP神经网络优化算法

案例3:基于遗传算法的BP神经网络优化算法******************************************************************************* ****论坛申明:1 案例为原创案例,论坛拥有帖子的版权,转载请注明出处(MATLABSKY论坛,《MATLAB智能算法30个案例分析》2 案例内容为书籍原创内容,内容为案例的提纲和主要内容。

3 作者长期驻扎在板块,对读者和会员问题有问必答。

4 案例配套有教学视频和完整的MATLAB程序,MATLAB程序在购买书籍后可以自由下载,教学视频需要另外购买。

MATLAB书籍预定方法和优惠服务:/thread-9258-1-1.html点击这里,预览该案例程序:/znsf/view/s3/GABPMain.html 已经预定的朋友点此下载程序源代码:/thread-11921-1-1.html ******************************************************************************** **1、案例背景BP网络是一类多层的前馈神经网络。

它的名字源于在网络训练的过程中,调整网络的权值的算法是误差的反向传播的学习算法,即为BP学习算法。

BP算法是Rumelhart等人在1986年提出来的。

由于它的结构简单,可调整的参数多,训练算法也多,而且可操作性好,BP 神经网络获得了非常广泛的应用。

据统计,有80%~90%的神经网络模型都是采用了BP网络或者是它的变形。

BP网络是前向网络的核心部分,是神经网络中最精华、最完美的部分。

BP神经网络虽然是人工神经网络中应用最广泛的算法,但是也存在着一些缺陷,例如:①、学习收敛速度太慢;②、不能保证收敛到全局最小点;③、网络结构不易确定。

另外,网络结构、初始连接权值和阈值的选择对网络训练的影响很大,但是又无法准确获得,针对这些特点可以采用遗传算法对神经网络进行优化。

遗传算法优化确定BP神经网络的遥感图像分类

遗传算法优化确定BP神经网络的遥感图像分类遗传算法(Genetic Algorithm,GA)是一种应用于求解优化问题的智能算法。

遥感图像分类是一种常见的图像处理任务,而BP神经网络是一种常用的分类模型。

将遗传算法与BP神经网络相结合,可以提高遥感图像分类的准确性和效率。

在遥感图像分类中,首先需要准备训练样本和测试样本。

训练样本用于训练BP神经网络的权重和阈值,而测试样本用于评估网络的分类性能。

然后,通过遗传算法确定BP神经网络的参数。

遗传算法的核心思想是模拟生物进化中的自然选择和优胜劣汰的过程。

具体而言,遗传算法通过三个操作模拟自然进化的过程:选择、交叉和变异。

根据适应度函数选择适应度较高的个体(即BP神经网络参数)作为父代。

然后,通过交叉操作将两个父代个体的染色体(即网络参数)进行交叉组合,生成子代。

通过变异操作对子代的染色体进行随机变换,以增加种群的多样性。

这样,经过多次迭代,遗传算法可以找到适应度最高的个体,即最优的BP神经网络参数。

在遥感图像分类中,适应度函数可以通过网络的分类准确率来定义。

遗传算法的优势在于可以在大量参数空间中进行搜索,并通过自然选择机制不断优化,从而找到最优解。

而BP神经网络作为分类模型,具有很好的学习能力和非线性拟合能力,可以更好地处理遥感图像分类问题。

将遗传算法应用于优化BP神经网络的遥感图像分类任务,可以提高分类准确率和效率。

这种方法可以广泛应用于遥感图像的土地利用分类、目标检测等相关问题,具有很好的应用前景。

但是需要注意的是,遗传算法的效果受到问题复杂度、种群大小、交叉和变异的概率等参数的影响,需要通过实验和调优来确定最佳的参数设置。

基于遗传算法的优化BP神经网络算法研究

1引言神经网络是一种模仿动物神经网络行为特征,进行分布式并行信息处理的算法数学模型,凭借着复杂的系统结构,通过对系统内部节点连接关系的调节,实现对信息的高效处理。

作为技术最为成熟的神经网络模拟,BP 神经网络具有良好的自学习、自适应以及泛化能力,在许多领域中都有着广泛的应用。

而针对BP 神经网络在应用环节存在的问题,需要采取相应的优化算法,提升神经网络的收敛速度和处理能力。

2遗传算法与BP 神经网络遗传算法遵循的是生物界中适者生存的法则,其基本原理,是指将问题参数进行编码,形成染色体,通过迭代的方式,运用选择、变异、交叉等运算,对种群中染色体的信息进行交换,继而形成能够满足优化目标的染色体。

BP (Back Propagation )神经网络最初产生于1986年,属于一种依照误差逆传播算法训练的多层前馈网络,也是当前技术条件下应用最为广泛的神经网络模型之一,其可以对输入-输出模式的映射关系进行学习和存储,同时不需要对能够揭示这些映射关系的方程进行描述。

神经网络具备自适应和自组织能力,在进行学习和训练的过程中,可以通过改变突触权重值的方式,更好地适应周边环境的变化。

在同一个神经网络中,如果内容不同,学习方式不同,则会产生不同的功能。

人工神经网络从本质上看,更加接近具备自主学习能力的系统,可以通过不断的学习,超出最初设计的知识水平。

在人工神经网络中,比较常见的学习方法有两种,一是有监督的学习,可以结合标准样本,进行分类或者模仿,二是无监督的学习,在制定相应的学习规则后,系统会根据自身所处环境,进行学习内容的分析和选择,更加接近人脑的功能特点。

3基于遗传算法的优化BP 神经网络算法3.1算法基本原理①BP 算法。

BP 神经网络算法主要包括了数据流的前向计算和误差信号的反向传播两个方面的内容,结合三层BP 神经【基金项目】廊坊市科技计划项目(2016011077)。

【作者简介】王军涛(1980-)男,讲师,河北邯郸人,从事计算机应用研究。

遗传算法在BP神经网络优化中的应用

遗传算法在 BP 神经网络优化中的应用2O世纪80年代后期 ,多机器人协作成为一种新的机器人应用形式日益引起国内外学术界的兴趣与关注.一方面,由于任务的复杂性,在单机器人难以完成任务时,人们希望通过多机器人之间的协调与合作来完成.另一方面,人们也希望通过多机器人间的协调与合作,来提高机器人系统在作业过程中的效率。

1943年,Maeullocu和 Pitts融合了生物物理学和数学提出了第一个神经元模型。

从这以后,人工神经网络经历了发展、停滞、再发展的过程,时至今日正走向成熟,在广泛领域里得到了应用,其中将人工神经网络技术应用到多机器人协作成为新的研究领域。

本文研究通过人工神经网络控制多机器人完成协作搬运的任务—3 J,并应用遗传算法来对神经网络进行优化。

仿真结果表明,经过遗传算法优化后的搬运工作效率显著提高,误差降低.1 人工神经网络 ANN)的基本原理和结构人工神经网络(Artiifcial Neural Network,ANN)) 是抽象、简化与模拟大脑神经结构的计算模型,又称并行分布处理模型 J。

ANN 由大量功能简单且具有自适应能力的信息处理单元——人工神经元按照大规模并行的方式通过一定的拓扑结构连接而成。

ANN拓扑结构很多,其中采用反向传播(Back—Propa—gation,BP)算法的前馈型神经网络(如下图1所示),即BP人工神经网络,是人工神经网络中最常用、最成熟的神经网络之一 .BP网络模型处理信息的基本原理是:输入信号x;通过中间节点(隐层点 )作用于出节点,经过非线形变换,产生输出信Yk,网络训练的每个样本包括输入向量x和期望输出量 T,网络输出值Y与期望输出值T之间的偏差,通过调整输入节点与隐层节点的联接强度取值w;;和隐层节点与输出节点之间的联接强度Y以及阈值,使误差沿梯度方向下降,经过反复学习训练,确定与最小误差相对应的网络参数 (权值和阈值),训练即告停止.此时经过训练的神经网络即能对类似样本的输入信息,自行处理输出误差最小的经过非线形转换的信息。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

遗传算法优化的BP神经网络建模十一月匆匆过去,每天依然在忙碌着与文档相关的东西,在寒假前一个多月里,努力做好手头上的事的前提下多学习专业知识,依然是坚持学习与素质提高并重,依然是坚持锻炼身体,为明年找工作打下基础。

遗传算法优化的BP神经网络建模借鉴别人的程序做出的仿真,最近才有时间整理。

目标:对y=x1^2+x2^2非线性系统进行建模,用1500组数据对网络进行构建网络,500组数据测试网络。

由于BP神经网络初始神经元之间的权值和阈值一般随机选择,因此容易陷入局部最小值。

本方法使用遗传算法优化初始神经元之间的权值和阈值,并对比使用遗传算法前后的效果。

步骤:未经遗传算法优化的BP神经网络建模1、随机生成2000组两维随机数(x1,x2),并计算对应的输出y=x1^2+x2^2,前1500组数据作为训练数据input_train,后500组数据作为测试数据input_test。

并将数据存储在data中待遗传算法中使用相同的数据。

2、数据预处理:归一化处理。

3、构建BP神经网络的隐层数,次数,步长,目标。

4、使用训练数据input_train训练BP神经网络net。

5、用测试数据input_test测试神经网络,并将预测的数据反归一化处理。

6、分析预测数据与期望数据之间的误差。

遗传算法优化的BP神经网络建模1、读取前面步骤中保存的数据data;2、对数据进行归一化处理;3、设置隐层数目;4、初始化进化次数,种群规模,交叉概率,变异概率5、对种群进行实数编码,并将预测数据与期望数据之间的误差作为适应度函数;6、循环进行选择、交叉、变异、计算适应度操作,直到达到进化次数,得到最优的初始权值和阈值;7、将得到最佳初始权值和阈值来构建BP神经网络;8、使用训练数据input_train训练BP神经网络net;9、用测试数据input_test测试神经网络,并将预测的数据反归一化处理;10、分析预测数据与期望数据之间的误差。

算法流程图如下:运行后使用遗传算法改进前后误差的对比图:程序:1、未经遗传算法优化的BP神经网络建模clear;clc;%%%%%%%%%%%%%输入参数%%%%%%%%%%%%%% N=2000; %数据总个数M=1500; %训练数据%%%%%%%%%%%%%训练数据%%%%%%%%%%%%%% for i=1:Ninput(i,1)=-5+rand*10;input(i,2)=-5+rand*10;endoutput=input(:,1).^2+input(:,2).^2;save data input outputload data.mat%从1到N随机排序k=rand(1,N);[m,n]=sort(k);%找出训练数据和预测数据input_train=input(n(1:M),:)';output_train=output(n(1:M),:)';input_test=input(n((M+1):N),:)';output_test=output(n((M+1):N),:)';%数据归一化[inputn,inputs]=mapminmax(input_train); [outputn,outputs]=mapminmax(output_train);%构建BP神经网络net=newff(inputn,outputn,5);net.trainParam.epochs=100;net.trainParam.lr=0.1;net.trainParam.goal=0.0000004;%BP神经网络训练net=train(net,inputn,outputn);%测试样本归一化inputn_test=mapminmax('apply',input_test,inputs); %BP神经网络预测an=sim(net,inputn_test);%%网络得到数据反归一化BPoutput=mapminmax('reverse',an,outputs);figure(1)%plot(BPoutput,':og');scatter(1:(N-M),BPoutput,'rx');hold on;%plot(output_test,'-*');scatter(1:(N-M),output_test,'o');legend('预测输出','期望输出','fontsize',12);title('BP网络预测输出','fontsize',12);xlabel('样本','fontsize',12);xlabel('优化前输出的误差','fontsize',12);figure(2)error=BPoutput-output_test;plot(1:(N-M),error);xlabel('样本','fontsize',12);ylabel('优化前输出的误差','fontsize',12);%save net net inputs outputs2、遗传算法优化的BP神经网络建模(1)主程序%清空环境变量clcclear%读取数据load data.mat%节点个数inputnum=2;hiddennum=5;outputnum=1;%训练数据和预测数据input_train=input(1:1500,:)';input_test=input(1501:2000,:)';output_train=output(1:1500)';output_test=output(1501:2000)';%选连样本输入输出数据归一化[inputn,inputps]=mapminmax(input_train); [outputn,outputps]=mapminmax(output_train);%构建网络net=newff(inputn,outputn,hiddennum);%% 遗传算法参数初始化maxgen=10; %进化代数,即迭代次数sizepop=30; %种群规模pcross=[0.3]; %交叉概率选择,0和1之间pmutation=[0.1]; %变异概率选择,0和1之间%节点总数numsum=inputnum*hiddennum+hiddennum+hiddennum*outputnum+outputnum;lenchrom=ones(1,numsum);bound=[-3*ones(numsum,1) 3*ones(numsum,1)]; %数据范围%------------------------------------------------------种群初始化------------------------------%--------------------------individuals=struct('fitness',zeros(1,sizepop), 'chrom',[]); %将种群信息定义为一个结构体%avgfitness=[]; %每一代种群的平均适应度bestfitness=[]; %每一代种群的最佳适应度bestchrom=[]; %适应度最好的染色体%初始化种群for i=1:sizepop%随机产生一个种群individuals.chrom(i,:)=Code(lenchrom,bound); %编码x=individuals.chrom(i,:);%计算适应度individuals.fitness(i)=fun(x,inputnum,hiddennum,outputnum,net,inputn,outputn); %染色体的适应度end%找最好的染色体[bestfitness bestindex]=min(individuals.fitness);bestchrom=individuals.chrom(bestindex,:); %最好的染色体%avgfitness=sum(individuals.fitness)/sizepop; %染色体的平均适应度% 记录每一代进化中最好的适应度和平均适应度%trace=[avgfitness bestfitness];%% 迭代求解最佳初始阀值和权值% 进化开始for i=1:maxgeni% 选择individuals=Select(individuals,sizepop);% avgfitness=sum(individuals.fitness)/sizepop;%交叉individuals.chrom=Cross(pcross,lenchrom,individuals.chrom,sizepop,bound);% 变异individuals.chrom=Mutation(pmutation,lenchrom,individuals.chrom,sizepop,i,maxgen,bound);% 计算适应度for j=1:sizepopx=individuals.chrom(j,:); %解码individuals.fitness(j)=fun(x,inputnum,hiddennum,outputnum,net,inputn,outputn);end%找到最小和最大适应度的染色体及它们在种群中的位置[newbestfitness,newbestindex]=min(individuals.fitness);[worestfitness,worestindex]=max(individuals.fitness);% 代替上一次进化中最好的染色体if bestfitness>newbestfitnessbestfitness=newbestfitness;bestchrom=individuals.chrom(newbestindex,:);endindividuals.chrom(worestindex,:)=bestchrom;individuals.fitness(worestindex)=bestfitness;%avgfitness=sum(individuals.fitness)/sizepop;% trace=[trace;avgfitness bestfitness]; %记录每一代进化中最好的适应度和平均适应度end%% 遗传算法结果分析%figure(3)%[r c]=size(trace);%plot([1:r]',trace(:,2),'b--');%title(['适应度曲线 ' '终止代数=' num2str(maxgen)]);%xlabel('进化代数');ylabel('适应度');%legend('平均适应度','最佳适应度');disp('适应度变量');x=bestchrom;%% 把最优初始阀值权值赋予网络预测% %用遗传算法优化的BP网络进行值预测w1=x(1:inputnum*hiddennum);B1=x(inputnum*hiddennum+1:inputnum*hiddennum+hiddennum);w2=x(inputnum*hiddennum+hiddennum+1:inputnum*hiddennum+hiddennum+hiddennum*outp utnum);B2=x(inputnum*hiddennum+hiddennum+hiddennum*outputnum+1:inputnum*hiddennum+hiddennum +hiddennum*outputnum+outputnum);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;%% BP网络训练%网络进化参数net.trainParam.epochs=100;net.trainParam.lr=0.1;%net.trainParam.goal=0.00001;%网络训练[net,per2]=train(net,inputn,outputn);%% BP网络预测%数据归一化inputn_test=mapminmax('apply',input_test,inputps);an=sim(net,inputn_test);test_simu=mapminmax('reverse',an,outputps);error=test_simu-output_test;%figure(4);hold on;plot(1:500,error,'r');legend('优化前的误差','优化后的误差','fontsize',12)(2)编码子程序code.mfunction ret=Code(lenchrom,bound)%本函数将变量编码成染色体,用于随机初始化一个种群% lenchrom input : 染色体长度% bound input : 变量的取值范围% ret output: 染色体的编码值flag=0;while flag==0pick=rand(1,length(lenchrom));ret=bound(:,1)'+(bound(:,2)-bound(:,1))'.*pick; %线性插值,编码结果以实数向量存入ret中 flag=test(lenchrom,bound,ret); %检验染色体的可行性end(3)适应度函数fun.mfunction error = fun(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*outp utnum);B2=x(inputnum*hiddennum+hiddennum+hiddennum*outputnum+1:inputnum*hiddennum+hidde nnum+hiddennum*outputnum+outputnum);net=newff(inputn,outputn,hiddennum);%网络进化参数net.trainParam.epochs=20;net.trainParam.lr=0.1;net.trainParam.goal=0.00001;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)选择操作Select.mfunction ret=select(individuals,sizepop)% 该函数用于进行选择操作% individuals input 种群信息% sizepop input 种群规模% ret output 选择后的新种群%求适应度值倒数[a bestch]=min(individuals.fitness);%b=individuals.chrom(bestch);%c=individuals.fitness(bestch);fitness1=10./individuals.fitness; %individuals.fitness为个体适应度值%个体选择概率sumfitness=sum(fitness1);sumf=fitness1./sumfitness;%采用轮盘赌法选择新个体index=[];for i=1:sizepop %sizepop为种群数pick=rand;while pick==0pick=rand;endfor i=1:sizepoppick=pick-sumf(i);if pick<0index=[index i];break;endendend%index=[index bestch];%新种群individuals.chrom=individuals.chrom(index,:); %individuals.chrom为种群中个体individuals.fitness=individuals.fitness(index);%individuals.chrom=[individuals.chrom;b];%individuals.fitness=[individuals.fitness;c];ret=individuals;(5)交叉操作cross.mfunction ret=Cross(pcross,lenchrom,chrom,sizepop,bound)%本函数完成交叉操作% pcorss input : 交叉概率% lenchrom input : 染色体的长度% chrom input : 染色体群% sizepop input : 种群规模% ret output : 交叉后的染色体for i=1:sizepop %每一轮for循环中,可能会进行一次交叉操作,染色体是随机选择的,交叉位置也是随机选择的,%但该轮for循环中是否进行交叉操作则由交叉概率决定(continue 控制)% 随机选择两个染色体进行交叉pick=rand(1,2);while prod(pick)==0pick=rand(1,2);endindex=ceil(pick.*sizepop);% 交叉概率决定是否进行交叉pick=rand;while pick==0pick=rand;endif pick>pcrosscontinue;endflag=0;while flag==0% 随机选择交叉位pick=rand;while pick==0pick=rand;endpos=ceil(pick.*sum(lenchrom)); %随机选择进行交叉的位置,即选择第几个变量进行交叉,注意:两个染色体交叉的位置相同pick=rand; %交叉开始v1=chrom(index(1),pos);v2=chrom(index(2),pos);chrom(index(1),pos)=pick*v2+(1-pick)*v1;chrom(index(2),pos)=pick*v1+(1-pick)*v2; %交叉结束flag1=test(lenchrom,bound,chrom(index(1),:)); %检验染色体1的可行性flag2=test(lenchrom,bound,chrom(index(2),:)); %检验染色体2的可行性if flag1*flag2==0flag=0;else flag=1;end %如果两个染色体不是都可行,则重新交叉endendret=chrom;(6)变异操作Mutation.mfunction ret=Mutation(pmutation,lenchrom,chrom,sizepop,num,maxgen,bound)% 本函数完成变异操作% pcorss input : 变异概率% lenchrom input : 染色体长度% chrom input : 染色体群% sizepop input : 种群规模% opts input : 变异方法的选择% pop input : 当前种群的进化代数和最大的进化代数信息% bound input : 每个个体的上届和下届% maxgen input :最大迭代次数% num input : 当前迭代次数% ret output : 变异后的染色体for i=1:sizepop %每一轮for循环中,可能会进行一次变异操作,染色体是随机选择的,变异位置也是随机选择的,%但该轮for循环中是否进行变异操作则由变异概率决定(continue控制)% 随机选择一个染色体进行变异pick=rand;while pick==0pick=rand;endindex=ceil(pick*sizepop);% 变异概率决定该轮循环是否进行变异pick=rand;if pick>pmutationcontinue;endflag=0;while flag==0% 变异位置pick=rand;while pick==0pick=rand;endpos=ceil(pick*sum(lenchrom)); %随机选择了染色体变异的位置,即选择了第pos个变量进行变异pick=rand; %变异开始fg=(rand*(1-num/maxgen))^2;if pick>0.5chrom(i,pos)=chrom(i,pos)+(bound(pos,2)-chrom(i,pos))*fg; elsechrom(i,pos)=chrom(i,pos)-(chrom(i,pos)-bound(pos,1))*fg; end %变异结束flag=test(lenchrom,bound,chrom(i,:)); %检验染色体的可行性 endendret=chrom;最新文件仅供参考已改成word文本。

相关文档
最新文档