根据他人的代码,稍微改进后,并附上个人对代码的理解情况
采用遗传算法(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