张鹏 遗传算法作业Word下载.docx
《张鹏 遗传算法作业Word下载.docx》由会员分享,可在线阅读,更多相关《张鹏 遗传算法作业Word下载.docx(13页珍藏版)》请在冰豆网上搜索。
附录一
functionGACS
%UNTITLEDSummaryofthisfunctiongoeshere
%Detailedexplanationgoeshere
%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(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表示变异的位置
%选择初始种群
fori=1:
N
ssx(i)=Rstxnx(i);
ssy(i)=Rstyny(i);
end
x=ssx;
y=ssy;
%选择结束
forj=1:
N1
%计算适应度
r=f(x,y);
xx(j,:
)=x;
yy(j,:
)=y;
R(j,:
)=r;
U2R=R(j,:
);
nU2R=length(U2R);
forui=1:
nU2R
ifMAX2R>
U2R(ui)
MAX2R=MAX2R;
else
MAX2R=U2R(ui);
end
YMAX2R(j)=MAX2R;
%适应值计算完毕,计算相应百分数得到转轮
fori=1:
P=r(i)+P;
p(i)=r(i)/P;
M(i)=round(N*p(i));
%转轮结束
%选择,复制开始
%被化简的程序
fori1=1:
switchM(i)
casei1
I1=i1;
fori2=1:
I1
ssx(I2+i2)=x(i);
ssy(I2+i2)=y(i);
break
I2=length(ssx);
%选择,复制结束
%单点交叉开始
Rssx=ssx(randperm(N));
Rssy=ssy(randperm(N));
forii=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);
%掩码二进制,加上权重的十进制掩码
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);
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,n2);
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);
ifm1>
%对x的变异
ssn21=randint(1,m1,n1+n2-2)+1;
%相应二进制数变换的位置
RstNG=randint(1,m1,N)+1;
fori11=1:
m1
ssn2=ssn21(i11);
%第几个染色体变异
di=RstNG(i11);
%变异染色体的第几位
Rstxdi2=ZPTTo2B(RstJx(di),n1,n2);
%di的x染色体的个数准备变异的二进制数
Rstxdissn2T=bin2dec(Rstxdi2(ssn2));
%准备变异ssn2处的编程的十进制数
Rstxdi21=abs(Rstxdissn2T-1);
ifRstxdissn2T>
ifssn2>
n1
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-ssn2+1-1));
%对y的变异
Rstydi2=ZPTTo2B(RstJy(di),n1,n2);
Rstydissn2T=bin2dec(Rstydi2(ssn2));
Rstydi21=abs(Rstydissn2T-1);
ifRstydissn2T>
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=RstJx;
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('
x'
ylabel('
y'
zlabel('
F函数值'
figure
(2)
mesh(X,Y,Z)
张鹏遗传算法作业三维mesh图'
figure(3)
plot(XMAX2R,YMAX2R)
grid;
遗传的代数'
每一代的最大值'
axis([0N1+0.101.1])
set(gca,'
ytick'
[0:
N1+1])
0.1:
1.1])
张鹏遗传算法作业'
functionff=f(x,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;
functionDd=ZPTTo2B(y,n1,n2)
yn1=dec2bin(y,n1);
yn11=bin2dec(yn1);
%整数部分的十进制数值
yn21=y-yn11;
%小数部分的十进制数
yn2=ZPx2b(yn21,n2);
%小数不分的二进制数
yn22=bin2dec(yn2);
yn12=yn11*2^n2;
yn1to2=yn12+yn22;
Dd=dec2bin(yn1to2,n1+n2);
functionD=ZPx2b(x,N)%x为小数,N为二进制小数的位数
a=x*2;
ifa>
=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);
functionDd=ZPTTo2B1(y,n1,n2)
Dd1=dec2bin(yn1to2,n1+n2);
Dd=bin2dec(Dd1);
functiond=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;
functiond=ZP2BToT1(y,n1,n2)
forij1=1:
a=bin2dec(y(n1-ij1+1))*2^(ij1-1)+a;
b=bin2dec(y(ij1+n1))*2^(-ij1)+b;