资源描述:
《遗传算法优化BP神经网络实现代码》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、%读取数据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,maxoutpu
2、t]=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_tes
3、t=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_trainfunctionret=Cross(pcross,lenchrom,chrom,sizepop,bound)%本函数完成交叉操作%pcorssinput:交叉概率%lenchrominput:染色体的长度%
4、chrominput:染色体群%sizepopinput:种群规模%retoutput:交叉后的染色体fori=1:sizepop%每一轮for循环中,可能会进行一次交叉操作,染色体是随机选择的,交叉位置也是随机选择的,%但该轮for循环中是否进行交叉操作则由交叉概率决定(continue控制)%随机选择两个染色体进行交叉pick=rand(1,2);whileprod(pick)==0pick=rand(1,2);endindex=ceil(pick.*sizepop);%交叉概率决定是否进行交叉pick=rand;whil
5、epick==0pick=rand;endifpick>pcrosscontinue;endflag=0;whileflag==0%随机选择交叉位pick=rand;whilepick==0pick=rand;endpos=ceil(pick.*sum(lenchrom));%随机选择进行交叉的位置,即选择第几个变量进行交叉,注意:两个染色体交叉的位置相同pick=rand;%交叉开始v1=chrom(index(1),pos);v2=chrom(index(2),pos);chrom(index(1),pos)=pick*v
6、2+(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的可行性ifflag1*flag2==0flag=0;elseflag=1;end%如果两个染色体不是都可行,则重新交叉endendret=chrom;%清空环境变量clcclear%%%网络结构建
7、立%读取数据loaddatainputoutput%节点个数inputnum=2;hiddennum=5;outputnum=1;%训练数据和预测数据input_train=input(1:1900,:)';input_test=input(1901:2000,:)';output_train=output(1:1900)';output_test=output(1901:2000)';%选连样本输入输出数据归一化[inputn,inputps]=mapminmax(input_train);[outputn,outputps
8、]=mapminmax(output_train);%构建网络net=newff(inputn,outputn,hiddennum);%%遗传算法参数初始化maxgen=10;%进化代数,即迭代次数sizepop=10;%种群规模pcross=[0.3];%交叉概率选择,0和