%使用遗传算法解决多变量函数优化问题,其中有20个变量
%定义遗传算法参数
NIND=40; %个体数目(Numbe of individuals)
MAXGEN=500; %最大遗传代数(Maximum number of generations)
NVAR=20; %变量的维数
PRECI=20; %变量的二进制位数(Precision of variables)
GGAP=0.9; %代沟(Generation gap)
trace=zeros(MAXGEN, 2);
%建立区域描述器(Build field descriptor)
FieldD=[rep([PRECI],[1,NVAR]);rep([-512;512],[1, NVAR]);rep([1;0;1;1],[1,NVAR])];
Chrom=crtbp(NIND, NVAR*PRECI); %创建初始种群
gen=0; %代计数器
X=bs2rv(Chrom,FieldD); %种群二进制到十进制转换
ObjV=sum(X.^2); %目标函数、
while gen<MAXGEN %迭代
FitnV=ranking(ObjV); %分配适应度值(Assign fitness values)
SelCh=select('sus', Chrom, FitnV, GGAP); %选择
SelCh=recombin('xovsp', SelCh, 0.7); %重组
SelCh=mut(SelCh); %变异
X=bs2rv(Chrom,FieldD); %种群二进制到十进制转换
ObjVSel=sum(X.^2); %目标函数、
[Chrom ObjV]=reins(Chrom, SelCh, 1, 1, ObjV, ObjVSel); %重插入
gen=gen+1; %代计数器增加
trace(gen, 1)=min(ObjV); %遗传算法性能跟踪
trace(gen, 2)=sum(ObjV)/length(ObjV);
end
plot(trace(:,1));hold on;
plot(trace(:,2),'-.');grid;
legend(' 种群均值的变化','解的变化')
%输出最优解及其对应的20个自变量的十进制值,Y为最优解,I为种群的序号
[Y, I]=min(ObjV)
X=bs2rv(Chrom, FieldD);
X(I,:)
%{
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%使用遗传算法解决多变量函数优化问题!
%这个是函数的主体部分:
while gen < MAXGEN
FitnV = ranking(-ObjV);
Selch = select('sus',Chrom,FitnV,GGAP);
Selch = recombin('xovsp',Selch,px);
Selch = mut(Selch,pm);
XY = bs2rv(Selch,FieldD);
X = XY(:,1);Y = XY(:,2);
ObjvSel = Y.*sin(2*pi*X)+X.*cos(2*pi*Y);
[Chrom,ObjV] = reins(Chrom,Selch,1,1,ObjV,ObjvSel);
XY = bs2rv(Chrom,FieldD);
gen = gen + 1;
[Y,I] = min(ObjV);
trace(1:2,gen) = XY(I,:);
trace(3,gen) = Y;
end
%}
评论1