1、附录一function GACS%UNTITLED Summary of this function goes here% Detailed explanation goes here%p表示适应度百分数;L系列表示任何不保留数据P=0;%P表示适应度之和;r表示函数值;M表示复制数%nx表示x的总个数%ny表示y的总个数%I系列是i系列的保留变量组I1=0;I2=0;MAX2R=0;N=20;%表示每一代染色体数n1=3;%表示生成二进制数整数的位数n2=5;%表示生成二进制数小数的位数N1=15;%表示遗传的代数Rstx=0:0.001:8;%x的值Rsty=0:%y的值nx=length
2、(Rstx);ny=length(Rsty);Rstxnx=Rstx(randperm(nx);%对x排序Rstyny=Rsty(randperm(ny);%对y排序PB=0.01;%变异的概率M1=(n1+n2)*N;%M1表示染色体总的二进制位数XMAX2R=1:1:N1;%m1表示变异的位置%选择初始种群for i=1:N ssx(i)=Rstxnx(i); ssy(i)=Rstyny(i);end x=ssx; y=ssy;%选择结束for j=1:N1 %计算适应度 r=f(x,y); xx(j,:)=x; yy(j,:)=y; R(j,:)=r; U2R=R(j,:); nU2R=
3、length(U2R); for ui=1:nU2R if MAX2RU2R(ui) MAX2R=MAX2R; else MAX2R=U2R(ui); end YMAX2R(j)=MAX2R; %适应值计算完毕,计算相应百分数得到转轮 for i=1: P=r(i)+P; p(i)=r(i)/P; M(i)=round(N*p(i); %转轮结束 %选择,复制开始 %被化简的程序 for i1=1: switch M(i) case i1 I1=i1; for i2=1:I1 ssx(I2+i2)=x(i); ssy(I2+i2)=y(i); break I2=length(ssx); %选择
4、,复制结束 %单点交叉开始 Rssx=ssx(randperm(N); Rssy=ssy(randperm(N); for ii=1: RstJssx2(ii)=ZPTTo2B1(Rssx(ii),n1,n2); RstJssy2(ii)=ZPTTo2B1(Rssy(ii),n1,n2); %制作掩码 L=1:n1+n2-1; L1=L(randperm(n1+n2-1);%L1(1)作为交叉点L1(1) y(i)=1; L2=n1+n2-L1(1);L2 y(L1(1)+i)=0; YMT=ZP2BToT(y,n1,n2);%掩码十进制 YMTQ=ZPTTo2B1(YMT,n1,n2);%掩
5、码二进制,加上权重的十进制掩码2:N-1 ANDxL(i)=bitand(RstJssx2(i),YMTQ);%1左边留下 ANDxR(i)=RstJssx2(i)-ANDxL(i);%1右边 ANDxL(i+1)=bitand(RstJssx2(i+1),YMTQ);%2左 ANDxR(i+1)=RstJssx2(i+1)-ANDxL(i+1);%2右边 LJxQ=ANDxL(i)+ANDxR(i+1); LJxQ2B=dec2bin(LJxQ,n1+n2); LJx=ZP2BToT1(LJxQ2B,n1,n2); RstJx(i)=LJx; LJxQ1=ANDxR(i)+ANDxL(i+1
6、); LJxQ2B1=dec2bin(LJxQ1,n1+n2); LJx1=ZP2BToT1(LJxQ2B1,n1,n2); RstJx(i+1)=LJx1; ANDyL(i)=bitand(RstJssy2(i),YMTQ); ANDyR(i)=RstJssy2(i)-ANDyL(i); ANDyL(i+1)=bitand(RstJssy2(i+1),YMTQ); ANDyR(i+1)=RstJssy2(i+1)-ANDyL(i+1); LJyQ=ANDyL(i)+ANDyR(i+1); LJyQ2B=dec2bin(LJyQ,n1+n2); LJy=ZP2BToT1(LJxQ2B,n1,n
7、2); RstJy(i)=LJy; LJyQ1=ANDyL(i)+ANDyR(i+1); LJyQ2B1=dec2bin(LJyQ1,n1+n2); LJy1=ZP2BToT1(LJxQ2B1,n1,n2); RstJy(i+1)=LJy1; %变异开始 m1=round(M1*PB); if m1 %对x的变异 ssn21=randint(1,m1,n1+n2-2)+1;%相应二进制数变换的位置 RstNG=randint(1,m1,N)+1; for i11=1:m1 ssn2=ssn21(i11);%第几个染色体变异 di=RstNG(i11);%变异染色体的第几位 Rstxdi2=ZP
8、TTo2B(RstJx(di),n1,n2);%di的x染色体的个数准备变异的二进制数 Rstxdissn2T=bin2dec(Rstxdi2(ssn2);%准备变异ssn2处的编程的十进制数 Rstxdi21=abs(Rstxdissn2T-1); if Rstxdissn2T if ssn2n1 RstJx(di)=abs(RstJx(di)-2(-(ssn2-n1); else RstJx(di)=abs(RstJx(di)-2(n1-ssn2+1-1); RstJx(di)=abs(RstJx(di)+2(-(ssn2-n1); RstJx(di)=abs(RstJx(di)+2(n1
9、-ssn2+1-1); %对y的变异 Rstydi2=ZPTTo2B(RstJy(di),n1,n2); Rstydissn2T=bin2dec(Rstydi2(ssn2); Rstydi21=abs(Rstydissn2T-1); if Rstydissn2T RstJy(di)=abs(RstJy(di)-2(-(ssn2-n1); RstJy(di)=abs(RstJy(di)-2(n1-ssn2+1-1); RstJy(di)=abs(RstJy(di)+2(-(ssn2-n1); RstJy(di)=abs(RstJy(di)+2(n1-ssn2+1-1); %变异结束 x=RstJ
10、x; y=RstJy; j=1+j;xx=unique(xx);yy=unique(yy);X,Y=meshgrid(xx,yy);Z=f(X,Y);figure(1)surf(X,Y,Z)title(张鹏 遗传算法作业三维surf图)xlabel(xylabel(yzlabel(F函数值figure(2)mesh(X,Y,Z)张鹏 遗传算法作业三维mesh图figure(3)plot(XMAX2R,YMAX2R)grid;遗传的代数每一代的最大值axis(0 N1+0.1 0 1.1)set(gca,ytick,0:N1+1)0.1:1.1)张鹏 遗传算法作业 function ff=f(x
11、,y) f1=sin(pi*(x-3).*(pi*(x-3).(-1); f11=abs(f1); f2=sin(pi*(y-3).*(pi*(y-3).(-1); f22=abs(f2); ff=f11.*f22; function Dd=ZPTTo2B(y,n1,n2) yn1=dec2bin(y,n1); yn11=bin2dec(yn1); %整数部分的十进制数值 yn21=y-yn11; %小数部分的十进制数 yn2=ZPx2b(yn21,n2); %小数不分的二进制数 yn22=bin2dec(yn2); yn12=yn11*2n2; yn1to2=yn12+yn22; Dd=de
12、c2bin(yn1to2,n1+n2); function D=ZPx2b(x,N)%x为小数,N为二进制小数的位数 a=x*2; if a=1 b=a-1; c(i)=1; b=a; c(i)=0; a=b*2; d=0; d=c(i)*2(N-i)+d; D=dec2bin(d,N); function Dd=ZPTTo2B1(y,n1,n2) Dd1=dec2bin(yn1to2,n1+n2); Dd=bin2dec(Dd1); function d=ZP2BToT(y,n1,n2) a=0; b=0; a=y(n1-i+1)*2(i-1)+a;n2 b=y(i+n1)*2(-i)+b; d=a+b; function d=ZP2BToT1(y,n1,n2) for ij1=1: a=bin2dec(y(n1-ij1+1)*2(ij1-1)+a; b=bin2dec(y(ij1+n1)*2(-ij1)+b;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1