发布时间 : 星期日 文章2011年电工杯数学建模全国一等奖论文更新完毕开始阅读
output_train=input_test; output_test=output_test';
[inputn,inputps]=mapminmax(input_train); [outputn,outputps]=mapminmax(output_train);
net=newff(inputn,outputn,hiddennum);
maxgen=10; sizepop=10; pcross=[0.3]; pmutation=[0.1];
numsum=inputnum*hiddennum+hiddennum+hiddennum*outputnum+outputnum;
lenchrom=ones(1,numsum);
bound=[-3*ones(numsum,1) 3*ones(numsum,1)];
--------------------------------------------------
individuals=struct('fitness',zeros(1,sizepop), 'chrom',[]); avgfitness=[]; bestfitness=[]; bestchrom=[]; for i=1:sizepop
individuals.chrom(i,:)=Code(lenchrom,bound); x=individuals.chrom(i,:);
individuals.fitness(i)=fun(x,inputnum,hiddennum,outputnum,net,inputn,outputn);
end
[bestfitnessbestindex]=min(individuals.fitness);
43
bestchrom=individuals.chrom(bestindex,:); avgfitness=sum(individuals.fitness)/sizepop; trace=[avgfitnessbestfitness];
for i=1:maxgen i
individuals=Select(individuals,sizepop); avgfitness=sum(individuals.fitness)/sizepop;
individuals.chrom=Cross(pcross,lenchrom,individuals.chrom,sizepop,bound);
individuals.chrom=Mutation(pmutation,lenchrom,individuals.chrom,sizepop,i,maxgen,bound);
for j=1:sizepop
x=individuals.chrom(j,:);
individuals.fitness(j)=fun(x,inputnum,hiddennum,outputnum,net,inputn,outputn);
end
[newbestfitness,newbestindex]=min(individuals.fitness); [worestfitness,worestindex]=max(individuals.fitness); ifbestfitness>newbestfitness bestfitness=newbestfitness;
bestchrom=individuals.chrom(newbestindex,:); end
individuals.chrom(worestindex,:)=bestchrom; individuals.fitness(worestindex)=bestfitness;
avgfitness=sum(individuals.fitness)/sizepop;
trace=[trace;avgfitnessbestfitness];
44
end figure(1)
[r c]=size(trace);
plot([1:r]',trace(:,2),'b--'); x=bestchrom;
w1=x(1:inputnum*hiddennum);
B1=x(inputnum*hiddennum+1:inputnum*hiddennum+hiddennum); w2=x(inputnum*hiddennum+hiddennum+1:inputnum*hiddennum+hiddennum+hiddennum*outputnum);
B2=x(inputnum*hiddennum+hiddennum+hiddennum*outputnum+1:inputnum*hiddennum+hiddennum+hiddennum*outputnum+outputnum);
net.iw{1,1}=reshape(w1,hiddennum,inputnum); net.lw{2,1}=reshape(w2,outputnum,hiddennum); net.b{1}=reshape(B1,hiddennum,1); net.b{2}=B2;
net.trainParam.epochs=100; net.trainParam.lr=0.1;
[net,per2]=train(net,inputn,outputn);
inputn_test=mapminmax('apply',input_test,inputps); an=sim(net,inputn_test);
test_simu=mapminmax('reverse',an,outputps); error=test_simu-output_test;
45
%适应度函数
function error =
fun(x,inputnum,hiddennum,outputnum,net,inputn,outputn)
w1=x(1:inputnum*hiddennum);
B1=x(inputnum*hiddennum+1:inputnum*hiddennum+hiddennum); w2=x(inputnum*hiddennum+hiddennum+1:inputnum*hiddennum+hiddennum+hiddennum*outputnum);
B2=x(inputnum*hiddennum+hiddennum+hiddennum*outputnum+1:inputnum*hiddennum+hiddennum+hiddennum*outputnum+outputnum);
net=newff(inputn,outputn,hiddennum); net.trainParam.epochs=20; net.trainParam.lr=0.1; net.trainParam.goal=0.00001; net.trainParam.show=100; net.trainParam.showWindow=0;
net.iw{1,1}=reshape(w1,hiddennum,inputnum); net.lw{2,1}=reshape(w2,outputnum,hiddennum); net.b{1}=reshape(B1,hiddennum,1); net.b{2}=B2;
net=train(net,inputn,outputn);
an=sim(net,inputn);
error=sum(abs(an-outputn));
%完成变异操作
46