GA-BP神经网络应用实例之MATLAB程序.docx
GA-BP神经网络应用实例之MAT1AB程序%gap.x1s中存储训练样本的原始输入数据37组%gatx1s中存储训练样本的原始输出数据37组%pjest.x1s中存储测试样本的原始输入数据12组%t_test.x1s中存储测试样本的原始输出数据12组%其中gabpEva1.m适应度值计算函数,gadecod.m解码函数%nntwarnoff;%nntwarn函数可以临时关闭神经网络工具箱的警告功能,当代码使用到神经%网络工具箱的函数时会产生大量的警告而这个函数可以跳过这些警告但%是,为了保证代码可以在新版本的工具箱下运行,我们不鼓励这么做pc=x1sread(,gap.x1s,);tc=×1sread('gat.x1s,);p_test=x1sread('p_test.x1s');tjest=x1sread('tjest.x1s,);P=PC;t=tc'p_test=p_test't_test=t_test'%归一化处理fori=1:2P(i,:)=(p(i,:)-min(p(i,:)/(max(p(i,:)-min(p(i,:);endfori=1:4T(i)=(t(i)-min(t(i)(max(t(i)-min(t(if:);endfori=1:2Pjest(i)=(pjest(i)-min(p.test(i,)(max(pjest(i)-min(pjest(i,:);end%创建BP神经网络,隐含层节点数为12net=newff(minmax(P),12,4,tansig,pure1in',train1m,);%下面使用遗传算法对网络进行优化R=SiZe(叫;BP神经网络输入层节点数S2=size(T,1);%BP神经网络输出层节点数SI=I2;%隐含层节点数S=R*S1+S1*S2+S1+S2;%遗传算法编码长度aa=ones(S,1)*-1,1;PoPU=Io0;%种群规模initPop=initia1izega(popuxaagabpEva)%初始化种群gen=500;%遗传代数%下面调用gaot工具箱,其中目标函数定义为gabpEva1×,endPopjbPop,trace=ga(aa,gabpEvazfinitPop,1e-611,'ma×GenTerm.gen,'normGeomSe1ect',0.09,arithXover',2,nonUnifMutation',2gen3);%绘收敛曲线图figure;p1ot(trace(;1),1.trace(;3)r-1;ho1don;p1ot(trace(,1)11.trace(,2)1,b-');X1abeI('遗传代数);y1abe1('平方和误差)figure;P1ot(traced),trace(:,3),'r-');ho1don;p1ot(trace(;1),traceC,2),b-');X1abeIC遗传代数');y1abeC适应度);Iegend(,平均适应度值),最优适应度值);%下面将初步得到的权值矩阵赋给尚未开始训I练的BP网络W1,B1,W2,B2,RT,A1,A2,SE,va1=gadecod(x);net.IW1,1=W1;net1W2,1=W2;netb1=B1;net.b2=B2;%设置训练参数net.trainParam.epochs=3000;net.trainParam.goa1=1e-6;%训练网络net=train(net,RT);w1=net.IW1,1;w2=net.1W2,1;b1=net.b1;b2=net.b2;%测试网络性能ternp=sim(net,P_test);yuce1=temp(1,temp(2)zjtemp(3)jtemp(4,:);fori=1:4yuce(i)=yuce1(i)*(max(tjest(i)-min(t.test(i)+min(tjest(i,:);end%测试输出结果之一figure;p1ot(1:12,yuce(1,:),'bo-');y1abe1('切口外径mm,);ho1don;Iegend('测试结果测试样本');figure;p1ot(12,yuce(1)-tjest(1)z,b-');y1abe1('误差mm');tit1e。测试结果与测试样本误差);figure;p1ot(112,(yuce(1)-tjest(1)tjest(1,0)*100,b*');y1abeC百分比);tit®'测试结果与测试样本误差);%测试输出结果之二figure;p1ot(112,yuce(2f0,bo-');y1abe1(切口内径mm');ho1don;PIot(1:12IteSt(2,:),'r*');Iegend('测试结果测试样本');figure;PIOt(1:12,yuce(2,:)-t_test亿y1abe1('误差mm');tit1e('测试结果与测试样本误差);figure;p1ot(112X(yuce(2)-tJest(2)tJest(2)*100,b*');yabe1(百分比);tit®'测试结果与测试样本误差');%测试输出结果之三figure;p1ot(112,yuce(3),(bo-');y1abe1('最大滚切力N');ho1don;PIOt(1:12,七test(3)r*');Iegend('测试结果测试样本');figure;PIOt(1:12,yuce(3,:)-t_test(3,:),'b-');yabe1('误差N');tit1e('测试结果与测试样本误差');figure;p1ot(112,(yuce(3)-tjest(3)tjest(3)*100,'b*');y1abe1('百分比');tit1e。测试结果与测试样本误差');%测试输出结果之四figure;p1ot(1:12,yuce(4,:)Zbo-');y1abe1('切断时间s');ho1don;p1ot(112,tjest(4)r*-');Iegend(测试结果'测试样本');figure;PIot(1:12,yuce(4,:)-t_test(4,:),'b-');yabeC误差s,);tit®'测试结果与测试样本误差);figure;p1ot(112,(yuce(4)-tJest(4)tJest(4)*100Zb*');y1abe1('百分比');titm'测试结果与测试样本误差);