⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fitness.m

📁 免疫算法实现多峰、多极值函数平面曲面拟合
💻 M
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function fit_value=fitness(antibody,training_x,training_y)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 函数fitness通过输入一个个体编码,以及训练样本集,就能返回该个体的
% 网络适应度的值。具体实现的思路是:解码个体,构建出个体所代表的RBF网络的结构
% 并利用LS算法构建网络的输出层参数,从而得到完整的网络。然后利用训练数据计算MG
% 序列的预测误差。最终生成适应度的值。
%
% 关于输入参数,当参数为3个时,执行一般的适应度计算操作;当参数为4个时,第
% 4个参数表示固定的宽度,此时执行指定宽度的适应度计算操作。
% 从antibody得到网络有效节点的中心和宽度。count记录了控制基因不为零的行。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
count=find(antibody(:,1));
if (size(count,1)==0) 
   fit_value=0;
else 
   centers=antibody(count,2:(size(antibody,2)-1));
   radius=antibody(count,size(antibody,2));
   cou1=find(radius<.01);
   radius(cou1)=.01;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   % 构建网络输出层。这里采用newrb中计算输出层权值和误差的方法,调用了
   % radbas和dist两个函数计算隐层节点的输出。输入参量的结构为:
   % training_x: M*N。M为输入维数,N为样本个数。
   % training_y: T*N。T为输出维数,N为样本个数,这里T=1。
   % centers: S*M。S为中心的个数,M为输入维数(即中心矢量的维数)。
   % radius: S*1。S为中心的个数。
   %r2为S*N矩阵,其中所有的列向量均为对应的宽度矢量。
   %p1即为隐层节点的输出,为S*N矩阵。
   r1=1./(radius*sqrt(2));
   r2=r1*ones(1,size(training_x,2));
   p1=radbas(dist(centers,training_x).*r2);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   %根据p1和training_y计算输出层权值weights,并计算误差sse1。
   weights=training_y*pinv(p1);
   result=weights*p1;
   sse1=sumsqr(training_y-result);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % 通过输出的值与样本中的数值的误差得到适应度。
   fit_value=1/(sse1);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -