www.gusucode.com > matlab编程遗传算法优化阈值训练神经网络源码程序 > matlab编程遗传算法优化阈值训练神经网络源码程序/GABP/Untitled.m
clear all clc warning off nntwarn off %% 声明全局变量 global p % 训练集输入数据 global t % 训练集输出数据 global R % 输入神经元个数 global S2 % 输出神经元个数 global S1 % 隐层神经元个数 global S % 编码长度 S1=9; % 410S+20R x1=[0.036 12.56 0 0.315 0.473 0.002 0.002 0.14 0 0 0.58 0.23 0.005 0.015 ]; %0Cr13Al+16MnR x2=[ 0.08 13.5 0 1.00 1.00 0.03 0.035 0.170 0.230 0.15 1.540 0.26 0.007 0.022 ]; %0Cr13+20R x3=[0.080 13.100 0.6 0.800 0.600 0.020 0.030 0.14 0 0 0.58 0.23 0.005 0.015 ]; %0Cr13+16MnR x4=[ 0.080 13.100 0.6 0.800 0.600 0.020 0.030 0.170 0.230 0.15 1.540 0.26 0.007 0.022 ]; % 410S+16MnR x5= [ 0.036 12.56 0 0.315 0.473 0.002 0.002 0.170 0.230 0.15 1.540 0.26 0.007 0.022]; X=[x1' x2' x3' x4' x5']; t1=[ 20 40 192.0 262 182.7 320 440 30.5 10 ]; t2=[ 18 25 165.0 222.0 149.8 390 525 30.5 62 ]; t3=[ 20 40 141.0 208.0 155.2 310 455 29.5 91 ]; t4=[ 23 30 145.0 201.0 139.5 385 535 27 58 ]; t5=[ 20 40 147.0 228.0 154.3 340 525 28.5 62 ]; T=[t1' t2' t3' t4' t5']; [Xn,minX,maxX,Tn,minT,maxT] = premnmx(X,T); p=Xn(:,1:4); t=Tn(:,1:4); k1=x5'; kn=tramnmx(k1,minX,maxX); % net=newff(minmax(p14),[9,9],{'tansig','logsig'},'trainlm'); %net.trainParam.goal=0.01;%训练目标误差 %net.trainParam.show=200;%训练时候每次展示的结果 %net.trainParam.epochs=5000;% 总的迭代次数 %net.trainParam.mc=0.95;%动量因子 % net=train(net,p14,t14); % 网络创建 net=newff(minmax(p),[S1,9],{'tansig','purelin'},'trainlm'); % 设置训练参数 net.trainParam.goal=0.01;%训练目标误差 net.trainParam.show=200;%训练时候每次展示的结果 net.trainParam.epochs=5000;% 总的迭代次数 net.trainParam.mc=0.95;%动量因子 % 网络训练 [net,tr]=train(net,p,t); % 仿真测试 k1=x5'; kn=tramnmx(k1,minX,maxX); %% GA-BP神经网络 R=size(p,1); S2=size(t,1); S=R*S1+S1*S2+S1+S2; aa=ones(S,1)*[-1,1]; % 变量上下项矩阵 popu=50; % 种群规模 initPpp=initializega(popu,aa,'gabpEval'); % 初始化种群 gen=100; % 遗传代数 [x,endPop,bPop,trace]=ga(aa,'gabpEval',[],initPpp,[1e-6 1 0],'maxGenTerm',gen,... 'normGeomSelect',[0.09],['arithXover'],[2 0; 2 3;2 0],'nonUnifMutation',[2 gen 3]); % 绘均方误差变化曲线 figure(1) plot(trace(:,1),1./trace(:,3),'r-'); hold on plot(trace(:,1),1./trace(:,2),'b-'); xlabel('Generation'); ylabel('Sum-Squared Error'); % 绘制适应度函数变化 figure(2) plot(trace(:,1),trace(:,3),'r-'); hold on plot(trace(:,1),trace(:,2),'b-'); xlabel('Generation'); ylabel('Fittness'); % 计算最优的权值和阈值 [W1,B1,W2,B2,val]=gadecod(x); net.IW{1,1}=W1; net.LW{2,1}=W2; net.b{1}=B1; net.b{2}=B2; % 利用新的权值和阈值进行训练 net=train(net,p,t);