遗传算法优化BP神经网络-非线性函数拟合.docVIP

遗传算法优化BP神经网络-非线性函数拟合.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
遗传算法优化BP神经网络-非线性函数拟合

%读取数据 data=xlsread(data.xls); %训练预测数据 data_train=data(1:113,:); data_test=data(118:123,:); input_train=data_train(:,1:9); output_train=data_train(:,10); input_test=data_test(:,1:9); output_test=data_test(:,10); %数据归一化 [inputn,mininput,maxinput,outputn,minoutput,maxoutput]=premnmx(input_train,output_train); %对p和t进行字标准化预处理 net=newff(minmax(inputn),[10,1],{tansig,purelin},trainlm); net.trainParam.epochs=100; net.trainParam.lr=0.1; net.trainParam.goal=0.00001; %net.trainParam.show=NaN %网络训练 net=train(net,inputn,outputn); %数据归一化 inputn_test = tramnmx(input_test,mininput,maxinput); an=sim(net,inputn); test_simu=postmnmx(an,minoutput,maxoutput); error=test_simu-output_train; plot(error) k=error./output_train %%code function ret=Code(lenchrom,bound) %本函数将变量编码成染色体,用于随机初始化一个种群 % lenchrom input : 染色体长度 % bound input : 变量的取值范围 % ret output: 染色体的编码值 flag=0; while flag==0 pick=rand(1,length(lenchrom)); ret=bound(:,1)+(bound(:,2)-bound(:,1)).*pick; %线性插值,编码结果以实数向量存入ret中 flag=test(lenchrom,bound,ret); %检验染色体的可行性 end %%cross function 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)==0 pick=rand(1,2); end index=ceil(pick.*sizepop); % 交叉概率决定是否进行交叉 pick=rand; while pick==0 pick=rand; end if pickpcross continue; end flag=0; while flag==0 % 随机选择交叉位 pick=rand; while pick==0 pick=rand; end pos=ceil(pick.*sum(lenchrom)); %随机选择进行交叉的位置,即选择第几个变量进行交叉,注意:两个染色体交叉的位置相同 pick=rand; %交叉开始 v1=chrom(index(1),pos); v2=chrom(index(2),pos); chrom(index(1),

文档评论(0)

shenlan118 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档