x=x0+(x1-x0)/1000*(i-1); y=1-sqrt(x);
dd(i)=sqrt((x-x0)^2+(y-y0)^2); end %------ZDT2
case {'ZDT2','ZDT6'}
if(y0>0.921164494015440) x1=0.280776612246391; else
x1=sqrt(1-y0); end
for i=1:1001
x=x0+(x1-x0)/1000*(i-1); y=1-x^2;
dd(i)=sqrt((x-x0)^2+(y-y0)^2); end %------ZDT3 case 'ZDT3'
x1=fzero(@(x)(1-sqrt(x)-x*sin(10*pi*x)-y0),x0); if(isnan(x1)) x1=x0; end
for i=1:1001
x=x0+(x1-x0)/1000*(i-1); y=1-sqrt(x)-x*sin(10*pi*x); dd(i)=sqrt((x-x0)^2+(y-y0)^2); end case
{'CTP1','CTP2','CTP3','CTP4','CTP5','CTP6','CTP7','CTP8','CONSTR','CTP9','SRN','CTP10','TNK','MOP-C4','MOP-C1','BNH','MOP-C2','OSY'} fvin = stdfv;
fvin(:,1) = fvin(:,1)-x0; fvin(:,2) = fvin(:,2)-y0;
dd = sqrt(sum(fvin.^2,2)); end
d=min(dd); end
function GD=GenerationalDistance2(funcname,np) %世代距离GD(七点法) n=size(np,1);
m=size(fitness(np(1,:),funcname),2); f=zeros(n,m);
if(n==1) GD=0; return; end
for i=1:n
f(i,:)=fitness(np(i,:),funcname); end
[n,k]=size(f);%n:解的个数;k:解的维数; fmax = max(f); d=zeros(1,n); for i=1:n
d(i)=GetSchottDis(fmax,k,f(i,:)); end
GD=sqrt(sum(d.^2))/n; end
function d = GetSchottDis(fmax,k,x) xmin = zeros(1,k);
ds = sqrt(sum((x-xmin).^2));%到(0,0,...,0)点的距离; for i=1:k
xk1=x;xk1(i)=xk1(i)-fmax(i)/3;ds=ds+sqrt(sum((xk1-xmin).^2));%到(0,0,...,fi/3,...,0)点的距离;
xk2=x;xk2(i)=xk2(i)-2*fmax(i)/3;ds=ds+sqrt(sum((xk2-xmin).^2));%到(0,0,...,2fi/3,...,0)点的距离;
xk3=x;xk3(i)=xk3(i)-fmax(i);ds=ds+sqrt(sum((xk3-xmin).^2));%到(0,0,...,fi,...,0)点的距离; end
d=ds/(k+1);%x到这(k+1)个点的距离的平均值 end