谁有用于数据预测的用遗传算法改进的BP神经网络程序

如题所述

给你来一段
%主程序
%数据归一化预处理
nntwarn off
[pn,minp,maxp]=premnmx(p);
pp=(pn+1)/2;
[tn,mint,maxt]=premnmx(t);
%建立BP网络
net=newff(minmax(pp),[15,1],{'logsig','purelin'},'trainlm');
%应用遗传算法对优化网络初始值
in=size(pn,1);
out=size(tn,1);
hi=15;%隐含层节点数
L=in*hi+hi*out+hi+out;%遗传算法编码长度
aa=ones(L,1)*[-1,1];
popu=50;%种群规模
initPpp=initializega(popu,aa,'ISeval');%初始化种群
gen=100;%遗传世代
%调用GAOT工具箱,其中目标函数定义为ISeval
[x,endPop,bPop,trace]=ga(aa,'ISeval',[],initPpp,[1e-6 1 1],'maxGenTerm',…
,gen,'normGeomSelect',[0.09],['arithXover'],[2],'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');
%将得到的权值矩阵赋给尚未开始训练的BP网络
[w1,b1,w2,b2,a1,a2,se,eval]=IScode(x); %调用自定义编解码函数
%创建网络
net.iW{1,1}=w1;
net.LW{2,1}=w2;
net.b{1,1}=b1;
net.b{2,1}=b2;
%设置训练参数
net.trainParam.show=10;
net.trainParam.epochs=5000;
net.trainParam.goal=0.05;
%训练网络
net=train(net,pp,t);

%自定义目标函数
function [sol, eval] = ISeval(sol,options)
% eval - the fittness of this individual
% sol - the individual, returned to allow for Lamarckian evolution
% options - [current_generation]
p=[];%原始输入数据
t=[];%原始输出数据
in=size(p,1);
out=size(t,1);
hi=15;%隐含层节点数
L=in*hi+hi*out+hi+out;%遗传算法编码长度
for i=1:L,
x(i)=sol(i);
end;
[w1, b1, w2, b2, a1, a2, se, eval]=IScode(x);

%自定义编解码函数
function [w1, b1, w2, b2, a1, a2, se, eval]=IScode(x)
[pn,minp,maxp]=premnmx(p);
pp=(pn+1)/2;
[tn,mint,maxt]=premnmx(t);
in=size(pn,1);%输入层结点数
out=size(tn,1);%隐含层结点数
hi=15;%隐含层结点数
L=in*hi+hi*out+hi+out;%遗传算法编码长度
% 前in*hi个编码为w1
for i=1:hi,
for j=1:in,
w1(i,j)=x(in*(i-1)+j);
end
end
% 接着的hi*out个编码为w2
for i=1:out,
for j=1:hi,
w2(i,j)=x(hi*(i-1)+j+in*hi);
end
end
% 接着的hi个编码为b1
for i=1:hi,
b1(i,1)=x((in*hi+hi*out)+i);
end
% 最后的out个编码b2
for i=1:out,
b2(i,1)=x((in*hi+hi*out+hi)+i);
end
% 计算hi层与out层的输出
a1=tansig(w1*pp,b1);
a2=purelin(w2*a1,b2);
% 计算误差平方和
se=sumsqr(t-a2);eval=1/se; % 遗传算法的适应值
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-08-27
GA,BP 经典的老算法,做建模预测效果很好,我有,
第2个回答  2013-01-29
下面的程序,运行出错呀:
Error using eval
Undefined function 'ISeval' for input arguments of type 'double'.
Error in initializega (line 80)
eval(estr);

>>