遗传算法优化的BP神经网络建模
- 格式:docx
- 大小:146.20 KB
- 文档页数:14
用遗传算法优化BP神经网络的M a t l a b编程实例由于BP网络的权值优化是一个无约束优化问题,而且权值要采用实数编码,所%??进行优化,再用BP算法训练网络%--------------------------------------------------------------------------%数据归一化预处理nntwarnoffXX=premnmx(XX);YY=premnmx(YY);%创建网络net=newff(minmax(XX),[19,25,1],{ 'tansig','tansig','purelin'},'trainlgen=100;%遗传代数%下面调用gaot工具箱,其中目标函数定义为gabpEval[x,endPop,bPop,trace]=ga(aa,'gab pEval',[],initPpp,[1e-611],'maxGenTe rm',gen,...??'normGeomSelect',[0.09],['arit hXover'],[2],'nonUnifMutation',[2gen 3]);%绘收敛曲线图figure(1)-');-');;;xlabel('Generation');ylabel('Fittness');%下面将初步得到的权值矩阵赋给尚未开始训练的BP网络[W1,B1,W2,B2,P,T,A1,A2,SE,val]=g adecod(x);net.LW{2,1}=W1;net.LW{3,2}=W2;net.b{2,1}=B1;net.b{3,1}=B2;XX=P;%val-thefittnessofthisindividual%sol-theindividual,returnedtoall owforLamarckianevolution%options-[current_generation]loaddata2nntwarnoffXX=premnmx(XX);YY=premnmx(YY);P=XX;T=YY;R=size(P,1);长度loaddata2nntwarnoffXX=premnmx(XX);YY=premnmx(YY);P=XX;T=YY;R=size(P,1);S2=size(T,1);S1=25;%隐含层节点数S=R*S1+S1*S2+S1+S2;%遗传算法编码长度R*S1个%接着的S1个编码(即第R*S1+S1*S2个后的编码)为B1fori=1:S1,??B1(i,1)=x((R*S1+S1*S2)+i);end%接着的S2个编码(即第R*S1+S1*S2+S1个后的编码)为B2 fori=1:S2,??B2(i,1)=x((R*S1+S1*S2+S1)+i);end%计算S1与S2层的输出。
GA-BP神经网络仿真[摘要]:本文主要是对基于遗传算法优化的BP神经网络(GA-BP)进行仿真,BP神经网络在BP神经网络中已经做详细介绍,本文首先介绍了遗传算法的基本原理,然后对遗传算法进行了描述,最后给出用遗传算法优化BP神经网络的程序。
[关键词]:GA-BP;遗传算法;仿真1遗传算法遗传算法(Genetic Algorithm, GA)起源于对生物系统所进行的计算机模拟研究。
它是模仿自然界生物进化机制发展起来的随机全局搜索和优化方法,借鉴了达尔文的进化论和孟德尔的遗传学说。
其本质是一种高效、并行、全局搜索的方法,能在搜索过程中自动获取和积累有关搜索空间的知识,并自适应地控制搜索过程以求得最佳解。
1.1遗传算法基本原理遗传算法GA—模拟自然界遗传机制和生物进化论而成的一种并行随机搜索最优化方法。
(具有“生存+检测”的迭代过程的搜索算法)基于自然界“优胜劣汰,适者生存”的生物进化原理引入优化参数形成的编码串联群体中,按照所选择的适应度函数并通过遗传中的选择、交叉和变异对个体进行筛选,使适应度值好的个体被保留,适应度差的个体被淘汰,新的群体既继承了上一代的信息,又优于上一代。
反复循环,直至满足条件。
1.2遗传算法基本步骤种群中的每个个体是问题的一个解,称为“染色体”,染色体是一串符号,如二进制字符串。
利用“适值”(适应性函数)测量染色体的好坏。
遗传算法基本操作分为:(1)选择操作:以一定概率选择旧群体个体到新群体中,个体被选中的概率跟适应度值有关个体适应度越好被选中改了吧越大。
(2)交叉操作:信息交换思想选两个个体交换组合产生新的优秀个体,染色体位置互换。
(3)变异操作:—以一定的低概率发生,染色体位置产生变异(通常取值0.001-0.01之间)。
遗传算法是具有高效启发式搜索、并行计算等特点,应用于函数优化、组合优化及生产调度等方面。
1.3 算法实现1.3.1 种群初始化个体编码方法为实数编码,每隔个体均为一个实数串,由输入层和隐含层连接权值、隐含层阈值、隐含层与输出层连接权值以及输出层阈值4个部分组成。
编号:审定成绩:重庆邮电大学毕业设计(论文)设计(论文)题目:基于遗传算法的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 遗传算法的起源从生物学上看,生物个体是由细胞组成的,而细胞则主要由细胞膜、细胞质、和细胞核构成。
黑铉语言信麵与电睡China Computer & Communication2021年第1期基于遗传算法优化的B P神经网络在考研结果预测中的应用李驰(四川大学锦城学院计算机科学与软件工程系,四川成都611731)摘要:通过遗传算法先对BP神经网络的初始权值和阈值进行优化后,再将BP神经网络用于考研结果的预测模型中。
实验表明,这种优化后的预测模型因为克服了收敛速度慢、易产生局部最小等缺陷,比单纯使用BP神经网络建立的预测 模型准确度更高。
将这个预测模型用于考研报名之前供学生预测参考,方便学生做出合理的决策,具有一定的实际意义。
关键词:考研;预测;BP神经网络;遗传算法中图分类号:TD712 文献标识码:A文章编号:1003-9767 (2021) 01-038-04Application of BP Neural Network Based on Genetic Algorithms Optimization in Prediction of Postgraduate Entrance ExaminationLI Chi(Department of Computer Science and Software Engineering,Jincheng College of Sichuan University,Chengdu Sichuan611731, China) Abstract:F irs tly,the in itia l weight and threshold of BP neural network are optimized by genetic algorithm,and then BP neural netw ork is used in the pre diction model of the results o f the postgraduate entrance exam ination.The experim ent shows that the optim ized prediction model overcomes the shortcomings o f slow convergence speed and easy to produce local m inim um,so it is more accurate than the pre diction model established by BP neural network alone.This pre diction model can be used as a reference for students to make a reasonable decision before applying fo r postgraduate entrance examination.Key words:postgraduate entrance exam ination;prediction;BP neural network;genetic algorithms〇引言随着社会对于高素质知识型人才的需求越来越迫切,我 国报考研究生的人数呈现逐年大幅増加的趋势。
遗传算法在 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、BP神经网络介绍:BP神经网络是多层前向型神经网络,一般是由三层神经元构成的,每层有多个神经元且每个神经元自身相互独立。
当三层网络模型构建成功后给网络一个输入样本,样本向量开始由输入层神经元传输到隐含层单元,经过中间层逐层处理后又顺序输出到输出层单元,通过传递到输出层单元得出一个实际的样本输出,这种过程是逐层向前的传播修改状态,这就是前向传播过程。
当输出的样本向量与期望的输出不符时就产生了误差,误差需要逆向传播,逆向传播的过程也是逐层传递并修改各层连接权值的过程。
这样的传递过程需要不断的进行,直到一组训练模式结束或者误差达到了极小值,输出结果满足期望输出为止。
通过实验知道经过不断的修改神经元之间的权值和偏置可以使网络的输出在误差允许的范围内拟合所有的训练输入。
这个拟合的过程就是神经网络训练的过程,BP网络的梯度下降算法是比较快速的权值调整算法,可以不断地进行误差反向传输从而调整网络结构的权值和阈值达到预期目标。
由于BP神经网络的功能特性使它成为使用最为广泛的网络模型之一。
图1 BP神经网络基本结构2、遗传算法原理介绍:遗传算法(GeneticAlgorithm,GA)的理论是根据达尔文进化论而设计出来的算法,大体意思是生物是朝着好的方向进化的,在进化的过程中会自动选择优良基因淘汰劣等基因。
向好的方向进化就是最优解的方向,优良的基因是符合当前条件的样本基因,可以得到充分的选择。
遗传学机理中的生物进化过程中生物的一连串过程包括选测、交叉和变异三个主要的行为机制。
因此遗传算法也主要分为选择、交叉和变异这三类操作完成淘汰机制,使训练后的自我进化按照条件朝着有力的方向进行,最终取得最优个体和解集合。
作为一种算法的形成还需要编码、遗传变异计算适应度和解码等。
遗传算法的实现过程和运算过程如图2所示。
首先需要通过编码组成初始群体形成了遗传算法的基础;以后就是选择交叉和变异再选择的过程。
其中种群中个体的遗传算子的操作都是在一定概率的情况下发生的。
利用遗传算法设计神经网络模型神经网络是一种模拟人类神经系统功能的数学模型,广泛应用于机器学习和人工智能领域。
设计一个高效准确的神经网络模型是一个复杂而关键的任务。
而遗传算法则是一种基于进化的优化算法,具有全局搜索和自适应优化的特点。
本文将探讨如何利用遗传算法设计神经网络模型。
一、神经网络模型简介神经网络模型由多个神经元和连接它们的权重组成,可以通过训练来学习数据的特征和模式。
它是一种多层结构的模型,一般包括输入层、隐藏层和输出层。
输入层接收输入数据,隐藏层通过一系列非线性变换将输入数据转化为更高级的表示,输出层对隐藏层的输出进行分类或回归预测。
二、遗传算法简介遗传算法是一种模拟达尔文进化论的优化算法,通过模拟生物进化中的自然选择、交叉和变异等过程,来找到问题的最优解。
遗传算法的基本思想是将问题解空间中的每个解编码成染色体,通过基因的交叉和变异来生成新的个体,并利用适应度函数来评估每个个体的适应性。
经过多代进化,逐渐找到最优解。
三、利用遗传算法设计神经网络模型的步骤1. 确定神经网络结构首先,需要确定神经网络的结构,包括输入层的维度、隐藏层的层数和神经元数量,输出层的维度等。
这一步需要根据具体问题和数据情况进行决策。
2. 初始化种群使用遗传算法设计神经网络模型时,首先需要初始化一个种群,即一组初始解。
每个个体代表一个神经网络模型,通过染色体来编码模型的结构和权重。
3. 适应度评估根据适应度函数对种群中的每个个体进行评估,评估个体的适应性。
适应度函数可以根据实际问题来选择,一般可以选择模型在训练集上的准确率或者损失函数的值作为适应度。
4. 选择操作根据适应度函数的评估结果,使用选择操作选择适应度较高的个体作为父代,用于产生下一代。
选择操作可以使用轮盘赌算法、锦标赛选择等方法。
5. 交叉操作从选出的父代中进行交叉操作,生成新的个体。
交叉操作可以采用单点交叉、多点交叉或均匀交叉等方式。
6. 变异操作对新生成的个体进行变异操作,引入新的基因信息,增加种群的多样性。
遗传算法优化的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;。