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);