1.matlab
clc clear NVAR=2; NIND=40;%种群大小? MAXGEN=100;%最大遗传代数? LIND=10;%个体长度(变量的二进制位数)? GGAP=0.9;%代沟 trace=zeros(2,MAXGEN); FieldD=[LIND LIND 0e4 0.6e4 %lb:每个变量的下界(x,y的下界)(这里是一区的)? 1e4 1.4e4%ub:每个变量的上届(x,y的上界)? 1 1 0 0 1 1 1 1 ]; Chrom=crtbp(NIND,LIND*NVAR); %创建一个初始种群,二进制编码 unit=bs2rv(Chrom,FieldD); %二进制转为十进制(初始种群)(本题中初始种群的横纵%坐标) ObjV=fun(unit);%计算目标函数值 for gen=1:MAXGEN FitnV=ranking(-ObjV);%分配适应度 SelCh=select('sus',Chrom,FitnV,GGAP);%选择sus:随机遍历抽样 SelCh=recombin('xovsp',SelCh,0.7);%交叉(重组)概率0.7,xovsp:单点交叉 SelCh=mut(SelCh); %变异? unit=bs2rv(SelCh,FieldD);%二进制十进制转换(子代个体) ObjVSel=fun(unit); %目标函数值(子代个体) [Chrom ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel);%重插入子代的新种群? [Y(gen),I(gen)]=max(ObjV);%Y为最优个体下的目标函数值,I为最优个体在种群的下标 trace(1,gen)=max(ObjV);%遗传算法性能追踪 trace(2,gen)=sum(ObjV)/length(ObjV); end unit=bs2rv(Chrom,FieldD); figure plot(trace(1,1:gen),'b-o'); hold on plot(trace(2,1:gen),'r-o'); grid on legend('最大浓度','种群平均浓度',4) title('遗传算法查找As污染性能图') xlabel('进化代数') ylabel('浓度') u1=unit(I(gen),:); u2=max(Y); u=[u1,u2]