| 查看: 261 | 回复: 0 | |||
| 当前主题已经存档。 | |||
[交流]
【求助】Matlab中bp 和 遗传算法问题
|
|||
|
% 程序一:GA训练BP权值的主函数 function net=GABPNET(XX,YY) %-------------------------------------------------------------------------- % GABPNET.m % 使用遗传算法对BP网络权值阈值进行优化,再用BP算法训练网络 %-------------------------------------------------------------------------- %数据归一化预处理 nntwarn off p=[ 80 12 8.0 1.05 0 3 ; 80 16 10.0 0.70 0 3 ; 90 8 8.0 0.70 0 3 ; 90 12 10.0 1.40 0 3 ; 90 16 6.0 1.05 0 3 ; 100 8 10.0 1.05 0 3 ; 100 12 6.0 0.70 0 3 ; 80 8 6.0 1.40 54 3 ; 80 12 8.0 1.05 54 3 ; 80 16 10.0 0.70 54 3 ; 90 12 10.0 1.40 54 3 ; 90 16 6.0 1.05 54 3 ; 100 12 6.0 0.70 54 3 ; 100 16 8.0 1.40 54 3 ; 80 8 6.0 1.40 0 0 ; 80 12 8.0 1.05 0 0 ; 80 16 10.0 0.70 0 0 ; 90 8 8.0 0.70 0 0 ; 100 8 10.0 1.05 0 0 ; 100 12 6.0 0.70 0 0 ; 100 16 8.0 1.40 0 0 ; 100 8 20.0 1.40 54 3 ; 100 8 12.5 1.40 54 3 ; 100 8 10.0 1.40 54 3 ; 100 8 6.0 1.40 54 3 ; 60 8 10.0 1.40 54 3 ; 70 8 10.0 1.40 54 3 ; 90 8 10.0 1.40 54 3 ; 100 8 10.0 1.40 54 3 ; 100 8 10.0 1.40 33 3 ; 100 8 10.0 1.40 40 3 ; 100 8 10.0 1.40 48 3 ; 100 8 10.0 1.40 54 3 ; 80 8 6.0 1.40 0 3 ; 100 16 8.0 1.40 0 3 ; 90 8 8.0 0.70 54 3 ; 100 8 10.0 1.05 54 3 ; 90 12 10.0 1.40 0 0 ; 90 16 6.0 1.05 0 0 ; 100 8 10.0 1.40 16 3 ; 100 8 8.0 1.40 54 3 ; 80 8 10.0 1.40 54 3 ; ]'; for i=1:6 p(i, = (p(i, -mean(p(i, ))/std(p(i, );end p1=p(:,1:33); p_test=p(:,34:42); t1=[ 0.2491 ; 0.3600 ; 0.4110 ; 0.2953 ; 0.4061 ; 0.4224 ; 0.3920 ; 0.4784 ; 0.6081 ; 0.5438 ; 0.5481 ; 0.6396 ; 0.6492 ; 0.7724 ; 0.0929 ; 0.1638 ; 0.2390 ; 0.1406 ; 0.3080 ; 0.2766 ; 0.4398 ; 0.9010 ; 0.8390 ; 0.7750 ; 0.5300 ; 0.4607 ; 0.5300 ; 0.6204 ; 0.7720 ; 0.5780 ; 0.6870 ; 0.7750 ; 0.7830 ; ]'; t_test=[ 0.2672 ; 0.5967 ; 0.6204 ; 0.6779 ; 0.1627 ; 0.3047 ; 0.5000 ; 0.5779 ; 0.5881 ; ]'; %输入向量 %创建网络 net=newff(minmax(p1),[8,1],{'tansig','logsig'},'trainlm'); %下面使用遗传算法对网络进行优化 P=p1; T=t1; [R,Q]=size(P); [S2,Q]=size(T); S1=8;%隐含层节点数 S=R*S1+S1*S2+S1+S2; % 遗传算法编码长度 aa=ones(S,1)*[-1,1]; popu=50;%种群规模 initPop=initializega(popu,aa,'mygabpEval');%初始化种群 gen=100;%遗传代数 %下面调用gaot工具箱,其中目标函数定义为gabpEval [x,endPop,bPop,trace]=ga(aa,'mygabpEval',[],initPop,[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,P,T,A1,A2,SE,val]=mygadecod(x); net.LW{2,1}=W1; net.LW{3,2}=W2; %设置训练参数 net.trainParam.show=10; net.trainParam.lr=0.06; net.trainParam.epochs=500; net.trainParam.goal=0.00000001; %训练网络 % 程序二:适应值函数 function [sol, val] = mygabpEval(sol,options) % val - the fittness of this individual % sol - the individual, returned to allow for Lamarckian evolution % options - [current_generation] nntwarn off p=[ 80 12 8.0 1.05 0 3 ; 80 16 10.0 0.70 0 3 ; 90 8 8.0 0.70 0 3 ; 90 12 10.0 1.40 0 3 ; 90 16 6.0 1.05 0 3 ; 100 8 10.0 1.05 0 3 ; 100 12 6.0 0.70 0 3 ; 80 8 6.0 1.40 54 3 ; 80 12 8.0 1.05 54 3 ; 80 16 10.0 0.70 54 3 ; 90 12 10.0 1.40 54 3 ; 90 16 6.0 1.05 54 3 ; 100 12 6.0 0.70 54 3 ; 100 16 8.0 1.40 54 3 ; 80 8 6.0 1.40 0 0 ; 80 12 8.0 1.05 0 0 ; 80 16 10.0 0.70 0 0 ; 90 8 8.0 0.70 0 0 ; 100 8 10.0 1.05 0 0 ; 100 12 6.0 0.70 0 0 ; 100 16 8.0 1.40 0 0 ; 100 8 20.0 1.40 54 3 ; 100 8 12.5 1.40 54 3 ; 100 8 10.0 1.40 54 3 ; 100 8 6.0 1.40 54 3 ; 60 8 10.0 1.40 54 3 ; 70 8 10.0 1.40 54 3 ; 90 8 10.0 1.40 54 3 ; 100 8 10.0 1.40 54 3 ; 100 8 10.0 1.40 33 3 ; 100 8 10.0 1.40 40 3 ; 100 8 10.0 1.40 48 3 ; 100 8 10.0 1.40 54 3 ; 80 8 6.0 1.40 0 3 ; 100 16 8.0 1.40 0 3 ; 90 8 8.0 0.70 54 3 ; 100 8 10.0 1.05 54 3 ; 90 12 10.0 1.40 0 0 ; 90 16 6.0 1.05 0 0 ; 100 8 10.0 1.40 16 3 ; 100 8 8.0 1.40 54 3 ; 80 8 10.0 1.40 54 3 ; ]'; for i=1:6 p(i, = (p(i, -mean(p(i, ))/std(p(i, );end p1=p(:,1:33); p_test=p(:,34:42); t1=[ 0.2491 ; 0.3600 ; 0.4110 ; 0.2953 ; 0.4061 ; 0.4224 ; 0.3920 ; 0.4784 ; 0.6081 ; 0.5438 ; 0.5481 ; 0.6396 ; 0.6492 ; 0.7724 ; 0.0929 ; 0.1638 ; 0.2390 ; 0.1406 ; 0.3080 ; 0.2766 ; 0.4398 ; 0.9010 ; 0.8390 ; 0.7750 ; 0.5300 ; 0.4607 ; 0.5300 ; 0.6204 ; 0.7720 ; 0.5780 ; 0.6870 ; 0.7750 ; 0.7830 ; ]'; t_test=[ 0.2672 ; 0.5967 ; 0.6204 ; 0.6779 ; 0.1627 ; 0.3047 ; 0.5000 ; 0.5779 ; 0.5881 ; ]'; P=p1; T=t1; [R,Q]=size(P); [S2,Q]=size(T); S1=8;%隐含层节点数 S=R*S1+S1*S2+S1+S2;%遗传算法编码长度 for i=1:S, x(i)=sol(i); end; [W1, B1, W2, B2, P, T, A1, A2, SE, val]=mygadecod(x); % 程序三:编解码函数 function [W1, B1, W2, B2, P, T, A1, A2, SE, val]=mygadecod(x) nntwarn off p=[ 80 12 8.0 1.05 0 3 ; 80 16 10.0 0.70 0 3 ; 90 8 8.0 0.70 0 3 ; 90 12 10.0 1.40 0 3 ; 90 16 6.0 1.05 0 3 ; 100 8 10.0 1.05 0 3 ; 100 12 6.0 0.70 0 3 ; 80 8 6.0 1.40 54 3 ; 80 12 8.0 1.05 54 3 ; 80 16 10.0 0.70 54 3 ; 90 12 10.0 1.40 54 3 ; 90 16 6.0 1.05 54 3 ; 100 12 6.0 0.70 54 3 ; 100 16 8.0 1.40 54 3 ; 80 8 6.0 1.40 0 0 ; 80 12 8.0 1.05 0 0 ; 80 16 10.0 0.70 0 0 ; 90 8 8.0 0.70 0 0 ; 100 8 10.0 1.05 0 0 ; 100 12 6.0 0.70 0 0 ; 100 16 8.0 1.40 0 0 ; 100 8 20.0 1.40 54 3 ; 100 8 12.5 1.40 54 3 ; 100 8 10.0 1.40 54 3 ; 100 8 6.0 1.40 54 3 ; 60 8 10.0 1.40 54 3 ; 70 8 10.0 1.40 54 3 ; 90 8 10.0 1.40 54 3 ; 100 8 10.0 1.40 54 3 ; 100 8 10.0 1.40 33 3 ; 100 8 10.0 1.40 40 3 ; 100 8 10.0 1.40 48 3 ; 100 8 10.0 1.40 54 3 ; 80 8 6.0 1.40 0 3 ; 100 16 8.0 1.40 0 3 ; 90 8 8.0 0.70 54 3 ; 100 8 10.0 1.05 54 3 ; 90 12 10.0 1.40 0 0 ; 90 16 6.0 1.05 0 0 ; 100 8 10.0 1.40 16 3 ; 100 8 8.0 1.40 54 3 ; 80 8 10.0 1.40 54 3 ; ]'; for i=1:6 p(i, = (p(i, -mean(p(i, ))/std(p(i, );end p1=p(:,1:33); p_test=p(:,34:42); t1=[ 0.2491 ; 0.3600 ; 0.4110 ; 0.2953 ; 0.4061 ; 0.4224 ; 0.3920 ; 0.4784 ; 0.6081 ; 0.5438 ; 0.5481 ; 0.6396 ; 0.6492 ; 0.7724 ; 0.0929 ; 0.1638 ; 0.2390 ; 0.1406 ; 0.3080 ; 0.2766 ; 0.4398 ; 0.9010 ; 0.8390 ; 0.7750 ; 0.5300 ; 0.4607 ; 0.5300 ; 0.6204 ; 0.7720 ; 0.5780 ; 0.6870 ; 0.7750 ; 0.7830 ; ]'; t_test=[ 0.2672 ; 0.5967 ; 0.6204 ; 0.6779 ; 0.1627 ; 0.3047 ; 0.5000 ; 0.5779 ; 0.5881 ; ]'; P=p1; T=t1; [R,Q]=size(P); [S2,Q]=size(T); S1=8;%隐含层节点数 S=R*S1+S1*S2+S1+S2;%遗传算法编码长度 % 前R*S1个编码为W1 for i=1:S1, for k=1:R, W1(i,k)=x(R*(i-1)+k); end end % 接着的S1*S2个编码(即第R*S1个后的编码)为W2 for i=1:S2, for k=1:S1, W2(i,k)=x(S1*(i-1)+k+R*S1); end end % 接着的S1个编码(即第R*S1+S1*S2个后的编码)为B1 for i=1:S1, B1(i,1)=x((R*S1+S1*S2)+i); end % 接着的S2个编码(即第R*S1+S1*S2+S1个后的编码)为B2 for i=1:S2, B2(i,1)=x((R*S1+S1*S2+S1)+i); end % 计算S1与S2层的输出 A1=tansig(W1*P,B1); A2=logsig(W2*A1,B2); % 计算误差平方和 SE=sumsqr(T-A2); val=1/SE; % 遗传算法的适应值 本人依照网上的一个程序,自己编写了一个,但是运行时老是出现Error using ==> network.subsasgn net.LW{2,1} must be a 1-by-8 matrix. Error in ==> GABPNET at 147 net.LW{2,1}=W1; 恳请各位高手指点一下,不胜感激。 |
» 猜你喜欢
真诚求助:手里的省社科项目结项要求主持人一篇中文核心,有什么渠道能发核心吗
已经有8人回复
寻求一种能扛住强氧化性腐蚀性的容器密封件
已经有5人回复
论文投稿,期刊推荐
已经有6人回复
请问哪里可以有青B申请的本子可以借鉴一下。
已经有4人回复
孩子确诊有中度注意力缺陷
已经有14人回复
请问下大家为什么这个铃木偶联几乎不反应呢
已经有5人回复
请问有评职称,把科研教学业绩算分排序的高校吗
已经有5人回复
2025冷门绝学什么时候出结果
已经有3人回复
天津工业大学郑柳春团队欢迎化学化工、高分子化学或有机合成方向的博士生和硕士生加入
已经有4人回复
康复大学泰山学者周祺惠团队招收博士研究生
已经有6人回复













= (p(i,
回复此楼