- 积分
- 12
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2016-5-18
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
clear all;
clc;
load('D:\\Software\\Matlab\\MATLAB\\input.mat','inputtrain') ;
load('D:\\Software\\Matlab\\MATLAB\output.mat','ptrain') ;
inputtrain=inputtrain';
%从1到600间随机排序
k=rand(1,600);
[m,n]=sort(k);
%找出训练数据和预测数据
inputtrain_train=inputtrain(n(1:500),:)';
ptrain_train=ptrain(:,n(1:500));
inputtrain_test=inputtrain(n(501:600),:)';
ptrain_test=ptrain(:,n(501:600));
%选连样本输入输出数据归一化
[inputtrain1,inputps]=mapminmax(inputtrain_train);
[ptrain1,pputps]=mapminmax(ptrain_train);
inputtrain=inputtrain';
net=newff([-1 1],[12 4 3]);
net.layers{2}.transferFcn='elliotsig';
net.inputs{1}.range=[-1 1;-1 1;-1 1];
net.trainParam.epochs=10;
% 参数初始化
inputnum=3;
hiddennum1=12;
hiddennum2=4;
outputnum=3;
%粒子群算法中的两个参数
c1 = 1.49445;
c2 = 1.49445;
maxgen=250; % 进化次数
sizepop=60; %种群规模
Vmax=1;
Vmin=-1;
popmax=5;
popmin=-5;
i=1;
for i=1:60
net=init(net);
[net,tr]=train(net,inputtrain1,ptrain1);
para_1_1=net.iw{1,1};
para_1=reshape(para_1_1,1,[]);
para_2_1=net.b{1};
para_2=reshape(para_2_1,1,[]);
para_3_1=net.lw{2,1};
para_3=reshape(para_3_1,1,[]);
para_4_1=net.b{2};
para_4=reshape(para_4_1,1,[]);
para_5_1 =net.lw{3,2};
para_5=reshape(para_5_1,1,[]);
para_6_1=net.b{3};
para_6=reshape(para_6_1,1,[]);
pop(i,1:115)=[para_1,para_2,para_3,para_4,para_5,para_6];
V(i,:)=rands(1,115);
fitness(i)=fun1(pop(1,:),inputnum,hiddennum1,hiddennum2,outputnum,net,inputtrain,ptrain);
end
% 个体极值和群体极值
[bestfitness, bestindex]=min(fitness);
zbest=pop(bestindex,:); %全局最佳
gbest=pop; %个体最佳
fitnessgbest=fitness; %个体最佳适应度值
fitnesszbest=bestfitness; %全局最佳适应度值
x=zbest;
w1=x(1:inputnum*hiddennum1);%1:36
B1=x(inputnum*hiddennum1+1:inputnum*hiddennum1+hiddennum1);%37:48
w2=x(inputnum*hiddennum1+hiddennum1+1:inputnum*hiddennum1+hiddennum1+hiddennum1*hiddennum2);%49:96
B2=x(inputnum*hiddennum1+hiddennum1+hiddennum1*hiddennum2+1:inputnum*hiddennum1+hiddennum1+hiddennum1*hiddennum2 ...
+hiddennum2);%97:100
w3=x(inputnum*hiddennum1+hiddennum1+hiddennum1*hiddennum2+hiddennum2+1: ...
inputnum*hiddennum1+hiddennum1+hiddennum1*hiddennum2+hiddennum2+hiddennum2*outputnum );%101:112
B3=x(inputnum*hiddennum1+hiddennum1+hiddennum1*hiddennum2+hiddennum2+1+hiddennum2*outputnum :115); %113:115
net.iw{1,1}=reshape(w1,hiddennum1,inputnum);
net.lw{2,1}=reshape(w2,hiddennum2,hiddennum1);
net.lw{3,2}=reshape(w3,outputnum,hiddennum2);
net.b{1}=reshape(B1,12,[]);
net.b{2}=reshape(B2,4,[]);
net.b{3}=reshape(B3,3,[]);
%% BP网络训练
%网络进化参数
net.trainParam.epochs=5000;
net.trainParam.lr=0.1;
%网络训练
net1=train(net,inputtrain1,ptrain1);
%% BP网络预测
%预测数据归一化
inputtrainn_test=mapminmax('apply',inputtrain_test,inputps);
%网络预测输出
an=sim(net,inputtrainn_test);
%网络输出反归一化
BPoutput=mapminmax('reverse',an,pputps);
B=[ptrain_test(1,:);BPoutput(1,:)]
[m,n]=size(B);
x=1:n;
plot(x,B(1,:),'m-');
hold on;
plot(x,B(2,:),'b-');
hold off
D=[ptrain_test(2,:);BPoutput(2,:)]
[m,n]=size(D);
x=1:n;
plot(x,D(1,:),'m-');
hold on;
plot(x,D(2,:),'b-');
hold off
E=[ptrain_test(3,:);BPoutput(3,:)]
[m,n]=size(E);
x=1:n;
plot(x,E(1,:),'m-');
hold on;
plot(x,E(2,:),'b-');
hold off
|
|