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]

 

posted on 2016-01-21 20:53  planet  阅读(1536)  评论(1编辑  收藏  举报