根据他人的代码,稍微改进后,并附上个人对代码的理解情况。采用遗传算法(GA)对BP网络的权值进行优化。其思路如下:(1)根据BP的输入值和目标值,确定好BP网络的输入层单元数、隐层单元数(本例只处理1个隐层的情况;多个隐层的方法类似,主要是在构造 GA种群基因时有所差异)、以及输出层的单元个数。(2)根据BP网络的各层单元数来确定其输入层与隐层之间的权值w12,和隐层输出值b1,以及隐层到输出层的权值w23,和输出层输出 b2。这四个值各个元素的组合就组成了一个基因,即根据他们来确定基因长度。这一步非常重要!可根据以下代码进行理解。% 权值矩阵分配% 输入到隐层用w_he表示,3x4,3表示输入层个数,4表示输出层个数%w_he=[chrom(i,1)chrom(i,5)chrom(i,9)chrom(i,13);%chrom(i,2)chrom(i,6)chrom(i,10)chrom(i,14);%chrom(i,3)chrom(i,7)chrom(i,11)chrom(i,15)];%以下for循环的作用是将某个基因,分别转换为 bp网络所对应的权值或输出值。% 其中 chrom(i,:)表示第 i个基因的所有元素%in_num表述输入层单元个数%n表示基本的元素个数%w_he表示输入层到输出层权值;w_out表示因此到输出层的权值%b_he表示隐层输出向量;b_out表示输出层的输出向量。forj=1:nw_he(:,j)=chrom(i,(j-1)*(in_num+1)+1:j*(in_num+1)-1);w_out(j)=chrom(i,(in_num+1)*n+j);b_he(j)=chrom(i,(in_num+1)*j);endb_out=chrom(i,len);% 隐层到输出层用w_out表示,4x1%w_out=[chrom(i,17)chrom(i,18)chrom(i,19)chrom(i,20)];%b_he=[chrom(i,4)chrom(i,8)chrom(i,12)chrom(i,16)];%b_out=chrom(i,21);(3)确定好权值与基因的对应关系后。利用GA对BP网络权值进行优化,也即寻找GA中最佳的适应度的基因。适应度函数则是利用BP网络构造,即把基因转换成 bp权值,再输入样本值查看其误差大小。(4)寻找最优基因就是 GA的基本步骤,选择、交叉、变异,这里就不详述了。下面附上代码。如果看懂了代码,请根据自己的需要进行调整,以达到最佳效果。按照 GA流程来看代码,真的很简单!通过调用此函数即可实现其训练 BP_GA(p,aim,n)functionnet=BP_GA(p,aim,n)%p,训练样本列向量矩阵%aim,目标值列向量%n隐层单元个数% 源程序为仿真《西北师范大学学报》的遗传主程序%计算的染色体均方误差fitness=8/sum(error.^2)% 经过简单改造%ticPopsize=100;%种群规模P_mutation=0.1;%变异系数P_cross=0.6;%交叉系数m=2;%权值和阈值的初始化范围%p=[00001111;%0011001...