![](https://csdnimg.cn/release/download_crawler_static/89223193/bg1.jpg)
遗传算法优化 BP 神经网络权值和阈值的通用 MATLAB 源代码
遗传算法优化神经网络有两种情况,一种是把训练好的神经网络作为黑箱函
数,用遗传算法搜索该黑箱函数的最优解;另外一种,则是把遗传算法用于神经
网络的训练,充分利用遗传算法全局搜索的特性,得到一个初始的权值矩阵和初
始的阈值向量,再用其它训练算法(如 BP 算法),得到最终的神经网络结构。
GreenSim 团队大量实践证明,这种 GA 和 BP 网络相结合的方法,能显著地提高 BP
神经网络的性能,基本上和支持向量机的性能相当,有时甚至优于支持向量机。
由于 BP 网络的权值优化是一个无约束优化问题,而且权值要采用实数编码,所
以直接利用 Matlab 遗传算法工具箱。以下贴出的代码是为一个 19 输入变量,1
个输出变量情况下的非线性回归而设计的,如果要应用于其它情况,只需改动编
解码函数即可。
程序一:GA 训练 BP 权值的主函数
function net=GABPNET(XX,YY)
%--------------------------------------------------------------------------
% GABPNET.m
% 使用遗传算法对 BP 网络权值阈值进行优化,再用 BP 算法训练网络
% GreenSim 团队——专业级算法设计&代写程序
% 欢迎访问 GreenSim 团队主页→http://blog.sina.com.cn/greensim
%--------------------------------------------------------------------------
%数据归一化预处理
nntwarn off
XX=premnmx(XX);
YY=premnmx(YY);
%创建网络
net=newff(minmax(XX),[19,25,1],{'tansig','tansig','purelin'},'trainlm');
%下面使用遗传算法对网络进行优化
P=XX;
T=YY;
R=size(P,1);
S2=size(T,1);
S1=25;%隐含层节点数
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(1)