张鹏 遗传算法作业.docx
- 文档编号:4641844
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:13
- 大小:117.87KB
张鹏 遗传算法作业.docx
《张鹏 遗传算法作业.docx》由会员分享,可在线阅读,更多相关《张鹏 遗传算法作业.docx(13页珍藏版)》请在冰豆网上搜索。
张鹏遗传算法作业
遗传算法程序设计报告
张鹏学号:
01201102060918
一设计目的
本文主要是应用遗传算法中的GA方法,求解函数的极值,最终采用MATLAB仿真软件对GA遗传算法进行程序编写,从理论和仿真两方面来理解GA遗传算法。
二设计过程
设计从了解GA遗传算法的理论,设计自己的编程思路,画出流程图,最后进行程序的编写。
1.函数的极值
考虑函数
求其极大值。
首先初始种群的选择是在定义域随机产生;其次采用GA算法中的轮盘选择法进行选择染色体进行复制;再次进行二进制编码,随机产生交叉点,采取单点交叉方法,将这一代的染色体随机的进行不重复的两两交叉,产生子代;最后根据变异的概率对染色体进行变异,例如有两个位需要变异的话,就随机选出两个染色体分别对其中每一个染色体的随机某一个二进制位进行选择。
在编写程序从两大方面入手,一是整体的遗传变异过程,另一个则是对染色体编码时对小数的二进制编码,本文是整数部分为3位二进制数,小数部分为5位二进制数。
两个函数最后嵌套到一起得到设计的最终结果。
三设计结果
求解函数极大值遗传代数与最大值得关系为图一,函数值分布的三维结果图(见图二、三)。
图一遗传代数与极值变化关系
图二自变量与函数值surf三维效果图
图三自变量与函数值mesh三维效果图
四设计结论及心得
在设计初次编程序话三维过程中,出现了阶梯层叠复杂的三维图,经过尝试将x,y取值在遗传过程出现的相同值去掉,画出的三维效果图较平滑。
通过对GA遗传算法的编写,更加了解了遗传算法的应用,由于临近期末复习,并没有对其与其他控制方法相结合的程序进行编写,但进行了思想的设计,等考完试争取将其程序编写出来。
与BP相结合对系统进行控制,一是修改初始权值,二是修改隐层结点数,以BP神经控制达到平稳的次数作为适应值,或者以期望值与实际输出值平稳的误差大小来作为适应值两种情况。
对于这种想法并没有用程序实现,并不知道设计的结果是否有利于优化BP神经网络的控制结果。
等考完试会加以实践的尝试,请老师谅解。
附录一
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:
0.001:
8;%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:
1:
nU2R
ifMAX2R>U2R(ui)
MAX2R=MAX2R;
else
MAX2R=U2R(ui);
end
end
YMAX2R(j)=MAX2R;
%适应值计算完毕,计算相应百分数得到转轮
fori=1:
1:
N
P=r(i)+P;
end
fori=1:
1:
N
p(i)=r(i)/P;
M(i)=round(N*p(i));
end
%转轮结束
%选择,复制开始
%被化简的程序
fori=1:
1:
N
fori1=1:
1:
N
switchM(i)
casei1
I1=i1;
fori2=1:
1:
I1
ssx(I2+i2)=x(i);
ssy(I2+i2)=y(i);
end
break
end
end
I2=length(ssx);
end
%选择,复制结束
%单点交叉开始
Rssx=ssx(randperm(N));
Rssy=ssy(randperm(N));
forii=1:
1:
N
RstJssx2(ii)=ZPTTo2B1(Rssx(ii),n1,n2);
RstJssy2(ii)=ZPTTo2B1(Rssy(ii),n1,n2);
end
%制作掩码
L=1:
1:
n1+n2-1;
L1=L(randperm(n1+n2-1));%L1
(1)作为交叉点
fori=1:
1:
L1
(1)
y(i)=1;
end
L2=n1+n2-L1
(1);
fori=1:
1:
L2
y(L1
(1)+i)=0;
end
YMT=ZP2BToT(y,n1,n2);%掩码十进制
YMTQ=ZPTTo2B1(YMT,n1,n2);%掩码二进制,加上权重的十进制掩码
fori=1:
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);%1左边留下
ANDyR(i)=RstJssy2(i)-ANDyL(i);%1右边
ANDyL(i+1)=bitand(RstJssy2(i+1),YMTQ);%2左
ANDyR(i+1)=RstJssy2(i+1)-ANDyL(i+1);%2右边
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;
end
%变异开始
m1=round(M1*PB);
ifm1>0
%对x的变异
ssn21=randint(1,m1,n1+n2-2)+1;%相应二进制数变换的位置
RstNG=randint(1,m1,N)+1;
fori11=1:
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>0
ifssn2>n1
RstJx(di)=abs(RstJx(di)-2^(-(ssn2-n1)));
else
RstJx(di)=abs(RstJx(di)-2^(n1-ssn2+1-1));
end
else
ifssn2>n1
RstJx(di)=abs(RstJx(di)+2^(-(ssn2-n1)));
else
RstJx(di)=abs(RstJx(di)+2^(n1-ssn2+1-1));
end
end
%对y的变异
Rstydi2=ZPTTo2B(RstJy(di),n1,n2);%di的x染色体的个数准备变异的二进制数
Rstydissn2T=bin2dec(Rstydi2(ssn2));%准备变异ssn2处的编程的十进制数
Rstydi21=abs(Rstydissn2T-1);
ifRstydissn2T>0
ifssn2>n1
RstJy(di)=abs(RstJy(di)-2^(-(ssn2-n1)));
else
RstJy(di)=abs(RstJy(di)-2^(n1-ssn2+1-1));
end
else
ifssn2>n1
RstJy(di)=abs(RstJy(di)+2^(-(ssn2-n1)));
else
RstJy(di)=abs(RstJy(di)+2^(n1-ssn2+1-1));
end
end
end
%变异结束
end
x=RstJx;
y=RstJy;
j=1+j;
end
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)
title('张鹏遗传算法作业三维mesh图')
xlabel('x');
ylabel('y');
zlabel('F函数值');
figure(3)
plot(XMAX2R,YMAX2R)
grid;
xlabel('遗传的代数');
ylabel('每一代的最大值');
axis([0N1+0.101.1])
set(gca,'ytick',[0:
1:
N1+1])
set(gca,'ytick',[0:
0.1:
1.1])
title('张鹏遗传算法作业')
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;
end
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;
fori=1:
1:
N
ifa>=1
b=a-1;
c(i)=1;
else
b=a;
c(i)=0;
end
a=b*2;
end
d=0;
fori=1:
1:
N
d=c(i)*2^(N-i)+d;
end
D=dec2bin(d,N);
end
end
functionDd=ZPTTo2B1(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;
Dd1=dec2bin(yn1to2,n1+n2);
Dd=bin2dec(Dd1);
functionD=ZPx2b(x,N)%x为小数,N为二进制小数的位数
a=x*2;
fori=1:
1:
N
ifa>=1
b=a-1;
c(i)=1;
else
b=a;
c(i)=0;
end
a=b*2;
end
d=0;
fori=1:
1:
N
d=c(i)*2^(N-i)+d;
end
D=dec2bin(d,N);
end
end
functiond=ZP2BToT(y,n1,n2)
a=0;
b=0;
fori=1:
1:
n1
a=y(n1-i+1)*2^(i-1)+a;
end
fori=1:
1:
n2
b=y(i+n1)*2^(-i)+b;
end
d=a+b;
end
functiond=ZP2BToT1(y,n1,n2)
a=0;
b=0;
forij1=1:
1:
n1
a=bin2dec(y(n1-ij1+1))*2^(ij1-1)+a;
end
forij1=1:
1:
n2
b=bin2dec(y(ij1+n1))*2^(-ij1)+b;
end
d=a+b;
end
end
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 张鹏 遗传算法作业 遗传 算法 作业