免疫算法(matlab)---求数的平方和
数的平方和 function result =func(x) sumn=sum(x.^2); result=sumn; end clear all; close all; clc; D=10;%免疫个体维数 NP=100;%免疫个体数目 Xs=20;%取值上限 Xx=-20;%取值下限 G=500; pm=0.7;%免疫概率 alfa=1;%激励度系数 beta=1;%激励度系数 detas=0.2;%相似值阈值 gen=0; Ncl=10;%克隆个数 deta0=1*Xs;%邻域范围取值 %%初试种群 f=rand(D,NP)*(Xs-Xx)+Xx;%产生上限值与下限值之间的随机数 for np=1:NP MSLL(np)=func(f(:,np));%计算每个初始值的函数值 end for np=1:NP for j=1:NP nd(j)=sum(sqrt((f(:,np)-f(:,j)).^2));%基于欧式距离的亲和度计算 if nd(j)<detas%抗体间的相似度计算 nd(j)=1; else nd(j)=0; end end ND(np)=sum(nd)/NP;%抗体间的浓度计算 end MSLL=alfa*MSLL-beta*ND;%抗体的激励度计算,由抗体的亲和度和浓度做运算得到 %激励度按升序排列 [SortMSLL,Index]=sort(MSLL);