clear all
clc
warning off
nntwarn off
%% 声明全局变量
global p % 训练集输入数据
global t % 训练集输出数据
global R % 输入神经元个数
global S2 % 输出神经元个数
global S1 % 隐层神经元个数
global S % 编码长度
input=xlsread('C:\Users\Administrator\Desktop\GA-PSO-BP\chengxu\100\in.xlsx');
output=xlsread('C:\Users\Administrator\Desktop\GA-PSO-BP\chengxu\100\out.xlsx');
q=[1.05 9.88 19.94 28.80 38.25 48.97 59.08 70.99 84.48 101.17 125.44 159.76 195.78 221.76 241.67 257.03 271.21 283.38 295.02 307.03 317.53 328.09 339.15 350.06;
1.05 9.88 19.94 28.80 38.25 48.97 59.08 70.99 84.48 101.17 125.44 159.76 195.78 221.76 241.67 257.03 271.21 283.38 295.02 307.03 317.53 328.09 339.15 350.06;
1.05 9.88 19.94 28.80 38.25 48.97 59.08 70.99 84.48 101.17 125.44 159.76 195.78 221.76 241.67 257.03 271.21 283.38 295.02 307.03 317.53 328.09 339.15 350.06;
1.05 9.88 19.94 28.80 38.25 48.97 59.08 70.99 84.48 101.17 125.44 159.76 195.78 221.76 241.67 257.03 271.21 283.38 295.02 307.03 317.53 328.09 339.15 350.06;
1.05 9.88 19.94 28.80 38.25 48.97 59.08 70.99 84.48 101.17 125.44 159.76 195.78 221.76 241.67 257.03 271.21 283.38 295.02 307.03 317.53 328.09 339.15 350.06]';
z=[0 15 30 45 60 75 90 105 120 135 150 165 180 195 210 225 240 255 270 285 300 315 330 345;
0 15 30 45 60 75 90 105 120 135 150 165 180 195 210 225 240 255 270 285 300 315 330 345;
0 15 30 45 60 75 90 105 120 135 150 165 180 195 210 225 240 255 270 285 300 315 330 345;
0 15 30 45 60 75 90 105 120 135 150 165 180 195 210 225 240 255 270 285 300 315 330 345;
0 15 30 45 60 75 90 105 120 135 150 165 180 195 210 225 240 255 270 285 300 315 330 345]';
[p,inputps]=mapminmax(input'); %训练输入样本归一化
[t,outputps]=mapminmax(output');%训练输出样本归一化
net=newff(minmax(p),[11,5],{'tansig','purelin'},'trainlm');
net.trainParam.lr=0.05;
net.trainParam.epochs=1000;
net.trainParam.goal=1e-5;
[net,tr]=train(net,p,t);
%% GA-BP神经网络
S1=11;
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; % 遗传代数
% 调用GAOT工具箱,其中目标函数定义为gabpEval
[x,endPop,bPop,trace]=ga(aa,'gabpEval',[],initPpp,[1e-6 1 1],'maxGenTerm',gen,...
'normGeomSelect',[0.09],['arithXover'],[2],'nonUnifMutation',[2 gen 3]);
% 绘均方误差变化曲线
figure(2)
plot(trace(:,1),1./trace(:,3),'r-');
hold on
plot(trace(:,1),1./trace(:,2),'b-');
xlabel('Generation');
ylabel('Sum-Squared Error');
% 绘制适应度函数变化
figure(3)
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);
inputn_test=mapminmax('apply',q',inputps);%测试样本输入归一化
an=sim(net,inputn_test); %仿真,预测输出
test_simu=mapminmax('reverse',an,outputps); %预测输出反归一化
% 仿真测试
figure(1)
plot(test_simu,'b+-');
Z=test_simu-z'
plot(Z(1,:),'r-');
评论1