|
- N=80; %种群规模
- T=100; %迭代次数
- pm=0.05;
- pc=0.8;
- umax=2.048;
- umin=-2.048; %参数取值范围
- L=10; %单个染色体长度
- popu=round(rand(N,2*L));
- gen=0;
- while gen<=T
- for i=1:L
- popu1(:,i)=2.^(L-1).*popu(:,i);
- L=L-1;
- end
- popu2=sum(popu1,2);
- y=umin+popu2*(umax-umin)/(2^L-1);
- for i=L+1:1:2L
- popu3(:,i)=2.^(i-L+1).*popu(:,i);
- L=i-L+1;
- end
- popu4=sum(popu3,2);
- x=umin+popu4*(umax-umin).*popu(:,i);
- yvalue=100*(x^2-y)^2+(1-x)^2;
- for i=1:N
- if yvalue(i)<0
- yvalue(i)=0;
- end
- end
- fitscore=yvalue/sum(yvalue);
- fitscore=cumsum(fitscore);
- wh=sore(rand(N,1));
- wheel=1;
- fitone=1;
- while wheel<=N
- if wh(wheel)<fitscore(fitone)
- newpopu(wheel,:)=popu(fitone,:);
- wheel=wheel+1;
- else
- fitone=fitone+1;
- end
- end
- popu=newpopu;
- for i=1:2:(N-1)
- if rand<pc
- cpoint=round(rand*(2*L-1));
- newpopu(i,:)=[popu(i,1:cpoint) popu(i+1,cpoint+1:2*L);
- newpopu(i+1,:)=[popu(i+1,1:cpoint) popu(i,cpoint+1:2*L);
- else
- newpopu(i,:)=popu(i,:);
- newpopu(i+1,:)=popu(i+1,:);
- end
- end
- popu=newpopu;
- for i=1:N
- if rand<pm
- mpoint=rand(rand*2*L);
- if mpiont<=0
- mpoint=1;
- end
- newpopu(i,:)=popu(i,:);
- if newpopu(i,point)==0
- newpopu(i,point)=1;
- else
- newpopu(i,point)=0;
- end
- else
- newpopu(i,:)=popu(i,:);
- end
- end
- T=T+1;
- [z(T) index]=max(yvalue);
- z(T)
-
-
复制代码 |
|