初学遗传算法,发现网上很多代码都有问题,并且不能看繁殖到某一代后,种群是由哪些个体构成的,经过个人改良后得到下列程序(尾部附结果):figure(1);fplot('variable.*sin(10*pi*variable)+2.0',[-1,2]);%画出函数曲线%定义遗传算法参数NIND=40;%个体数目(Numberofindividuals)MAXGEN=25;%最大遗传代数(Maximumnumberofgenerations)PRECI=20;%变量的二进制位数(Precisionofvariables)GGAP=0.9;%代沟(Generationgap)trace=zeros(2,MAXGEN);%寻优结果的初始值totalvar=zeros(NIND,MAXGEN);%每一代的个体统计的初始值totalobj=zeros(NIND,MAXGEN);%每一代的个体适应度统计的初始值FieldD=[20;-1;2;1;0;1;1];%区域描述器(Buildfielddescriptor)Chrom=crtbp(NIND,PRECI);%初始种群gen=0;%代计数器variable=bs2rv(Chrom,FieldD);%计算初始种群的十进制转换ObjV=variable.*sin(10*pi*variable)+2.0;%计算目标函数值whilegenMAXGEN,FitnV=ranking(-ObjV);%分配适应度值(Assignfitnessvalues)SelCh=select('sus',Chrom,FitnV,GGAP);%选择SelCh=recombin('xovsp',SelCh,0.7);%重组SelCh=mut(SelCh);%变异variable=bs2rv(SelCh,FieldD);%子代个体的十进制转换ObjVSel=variable.*sin(10*pi*variable)+2.0;%计算子代的目标函数值[Chrom,ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel);%重插入子代的新种群gen=gen+1;%代计数器增加%输出最优解及其序号,并在目标函数图像中标出,Y为最优解,I为种群的序号[Y,I]=max(ObjV),holdon;variable=bs2rv(Chrom,FieldD);fori=1:40totalvar(i,gen)=variable(i,:);%统计每一代的个体totalobj(i,gen)=ObjV(i,:);%统计每一代个体的适应度endtrace(1,gen)=max(ObjV);%遗传算法性能跟踪trace(2,gen)=sum(ObjV)/length(ObjV);endvariable=bs2rv(Chrom,FieldD);%最优个体的十进制转换holdon,grid;plot(variable',ObjV','b*');figure(2);plot(trace(1,:)');holdon;plot(trace(2,:)','-.');grid;legend('解的变化','种群均值的变化');figure(3);fplot('variable.*sin(10*pi*variable)+2.0',[-1,2]);%画出函数曲线holdon;plot(totalvar(:,10),totalobj(:,10),'b*');%显示任意一代的个体分布情况title('第十代的分布情况');