您好,欢迎访问三七文档
Matlab遗传算法工具箱应用举例§5.1简单一元函数优化实例例1利用遗传算法计算下面函数的最大值]2,1[0.2)*10sin()(xxxxf选择二进制编码,种群中个体数目为40,每个种群的长度为20,使用代沟为0.9,最大遗传代数为25程序简化代码如下:NIND=40;%定义个体数目MAXGEN=25;%定义最大遗传代数PRECI=20;%编码长度GGAP=0.9;%代沟FieldD=[20;-1;2;1;0;1;1];%区域描述器Chrom=crtbp(NIND,PRECI);%产生初始种群gen=0;%代计数器variable=bs2rv(Chrom,FieldD);%初始种群的十进制转换ObjV=variable.*sin(10*pi*variable)+2.0;%计算初始种群目标函数值whilegenMAXGEN+1FitnV=ranking(-ObjV);%分配适应度值SelCh=select('sus',Chrom,FitnV,GGAP);%选择SelCh=recombin('xovsp',SelCh,0.7);%重组SelCh=mut(SelCh);%变异variable=bs2rv(SelCh,FieldD);%子代个体的十进制转换ObjVSel=variable.*sin(10*pi*variable)+2.0;%计算子代的目标函数值[ChromObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel);%重插入子代到种群Y=max(ObjV)%当前种群最优解gen=gen+1;%代计数器增加endfigure(1);%画出函数曲线fplot('variable.*sin(10*pi*variable)+2.0',[-1,2]);%定义遗传算法参数NIND=40;%群体中个体数目MAXGEN=25;%最大遗传代数PRECI=20;%变量的二进制位数具有性能跟踪和图像输出功能的程序代码%代沟GGAP=0.9;%寻优结果的初始值trace=zeros(2,MAXGEN);%建立区域描述器FieldD=[20;-1;2;1;0;1;1];%生成初始种群Chrom=crtbp(NIND,PRECI);具有性能跟踪和图像输出功能的程序代码%代计数器gen=0;%计算初始种群的十进制转换variable=bs2rv(Chrom,FieldD);%计算目标函数值ObjV=variable.*sin(10*pi*variable)+2.0;具有性能跟踪和图像输出功能的程序代码whilegenMAXGEN%分配适应度值FitnV=ranking(-ObjV);%选择SelCh=select('sus',Chrom,FitnV,GGAP);%重组SelCh=recombin('xovsp',SelCh,0.7);%变异SelCh=mut(SelCh);具有性能跟踪和图像输出功能的程序代码%子代个体的十进制转换variable=bs2rv(SelCh,FieldD);%计算子代的目标函数值ObjVSel=variable.*sin(10*pi*variable)+2.0;%重插入子代的新种群[ChromObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel);variable=bs2rv(Chrom,FieldD);具有性能跟踪和图像输出功能的程序代码%代计数器增加gen=gen+1;%输出最优解及其序号,并在目标函数图像%中标出,Y为最优解,I为种群的序号[Y,I]=max(ObjV);holdon;plot(variable(I),Y,'bo');%遗传算法性能跟踪trace(1,gen)=max(ObjV);%每一代最优解trace(2,gen)=sum(ObjV)/length(ObjV);end具有性能跟踪和图像输出功能的程序代码%最优个体的十进制转换variable=bs2rv(Chrom,FieldD);holdon,gridon;plot(variable,ObjV,'b*');figure(2);plot(trace(1,:));holdon;plot(trace(2,:),'-.');gridofflegend('解的变化','种群均值的变化')具有性能跟踪和图像输出功能的程序代码程序运行追踪结果:代序寻优结果自变量函数值12.02923.842322.21043.781932.35773.806342.48813.81552.64013.8072程序运行追踪结果62.61333.755572.86583.807382.94003.804392.91203.8321102.86773.8321112.69733.8320122.79633.8326132.73173.8318程序运行追踪结果142.77393.8318152.65213.8274162.78443.8274172.51583.8274182.77683.8285192.79073.8277202.80803.8379程序运行追踪结果213.09473.8489223.15253.8496232.91473.8496242.91443.8493253.02593.8493经过25次迭代后最优解及种群均值的变化如下图:例题中用到的一些绘图函数说明1、绘制函数图像函数—fplot调用格式:FPLOT(FUN,LIMS)FPLOT(FUN,LIMS,TOL)FPLOT(FUN,LIMS,N)FPLOT(FUN,LIMS,'LineSpec')参数说明:LIMS=[XMINXMAX]或LIMS=[XMINXMAXYMINYMAX]——给出变量范围TOL—可接受的相对误差,默认值为2e-3,即0.2%N—限定绘制的函数至少有N+1个点,默认值为1.最大步长限定为(1/N)*(XMAX-XMIN).LineSpec—指定线型FUN—要绘制图像的函数例如:fplot('variable.*sin(10*pi*variable)+2.0',[-1,2]);2、定义零矩阵—ZEROSZEROS(N)—产生N阶零矩阵ZEROS(M,N)或ZEROS([M,N]))—产生M×N阶零矩阵;ZEROS(M,N,P,...)orZEROS([MNP...]))—产生M×N×P×...阶零矩阵;ZEROS(SIZE(A)))—产生与矩阵A一样大小的零矩阵。3、求最大值函数—MAXMAX(X)—X为向量时,返回向量X的最大元素;X为矩阵时,返回一个行向量,包含矩阵X的每列的最大元素.4、绘图函数——PLOTPLOT(X,Y)—绘制以向量X为横坐标,向量Y为纵坐标的线图.如果X或Y是一个矩阵,则绘制多线图;如果X是一个标量,而Y是一个向量,则绘声绘色制的是length(Y)个不连续点。PLOT(Y)—以矩阵Y的行标为横坐标,每一列为纵坐标绘制图形。如果Y是一个复矩阵,PLOT(Y)相当于PLOT(real(Y),imag(Y)).PLOT(X,Y,S)—指定线型绘图,S为一字符串,指定绘图方式代表字符颜色代表符号线型C青色-实线M洋红--虚线Y黄色:点连线R红色-.点划线G绿色none无线B兰色W白色k黑色线型和颜色标记符绘图方式标记符绘图方式+十字号^反勾号o小圆圈v勾号*星号大于号.小黑点小于号X叉号pentagram五角星Square小正方形Hexagram六角星diamond菱形符号none无标记数据点标记字符5、建立图形窗口函数—FIGUREFIGURE(H)—使句柄为H的图形窗口为当前图形;如果图形窗口不存在,则建立一个句柄为H的图形窗口。GCF—返回当前图形窗口的句柄。6、设置网格线—GRIDGRIDON—给坐标系添加网格线GRIDOFF—去除坐标系中的网格线§5.2多元单峰函数优化实例DeJong函数是一个连续、凸起的单峰函数,它的M文件objfun1包含在GA工具箱软件中,DeJong函数的表达式为:niixxf12)(,512512ix这里n是定义问题维数的一个值,本例中选取n=20,求解)(minxf。简化程序代码如下:NIND=40;%个体数目MAXGEN=500;%最大遗传代数NVAR=20;%变量的维数PRECI=20;%编码长度GGAP=0.9;%代沟FieldD=[rep([PRECI],[1,NVAR]);rep([-512;512],…[1,NVAR]);rep([1;0;1;1],[1,NVAR])];%建立区域描述器Chrom=crtbp(NIND,NVAR*PRECI);%创建初始种群gen=0;%代计数器ObjV=objfun1(bs2rv(Chrom,FieldD));%计算初始种群个体的目标函数值whilegenMAXGEN%迭代FitnV=ranking(ObjV);%分配适应度值SelCh=select('sus',Chrom,FitnV,GGAP);%选择SelCh=recombin('xovsp',SelCh,0.7);%重组SelCh=mut(SelCh);%变异ObjVSel=objfun1(bs2rv(SelCh,FieldD));%计算子代目标函数值[ChromObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel);%重插入gen=gen+1;%代计数器增加trace(gen,1)=min(ObjV);%遗传算法性能跟踪trace(gen,2)=sum(ObjV)/length(ObjV);end[Y,I]=min(ObjV)X=bs2rv(Chrom,FieldD);X(I,:)前5个语句进行的初始化工作,包括确定群体中个体数目,最大进化代数,编码长度,代沟,建立区域描述器等。1、矩阵复制函数REP功能用来复制一个矩阵调用格式:MatOut=rep(MatIn,REPN);参数说明MatIn—输入矩阵MatOut—输出矩阵REPN—一个二维向量,其中REPN(1)指定垂直方向复制次数;REPN(2)指定水平方向复制次数程序中的函数说明例如:MatIn=[123]MatIn=123REPN=[12]REPN=12MatOut=rep(MatIn,REPN)MatOut=123123程序中的函数说明例如:MatIn=[123]MatIn=123REPN=[21]REPN=21MatOut=rep(MatIn,REPN)MatOut=123123程序中的函数说明例如:MatIn=[123]MatIn=123REPN=[32]REPN=32MatOut=rep(MatIn,REPN)MatOut=123123123123123123程序中的函数说明具有性能跟的程序代码如下:%定义遗传算法参数NIND=40;%个体数目MAXGEN=500;%最大遗传代数NVAR=20;%变量的维数PRECI=20;%编码长度GGAP=0.9;%代沟trace=zeros(MAXGEN,2);%建立区域描述器FieldD=[rep([PRECI],[1,NVAR]);rep([-512;512],…[1,NVAR]);rep([1;0;1;1],[1,NVAR])];%创建初始种群Chrom=crtbp(NIND,NVAR*PRECI);%代计数器gen=0;%计算初始种群个体的目标函数值ObjV=objfun1(bs2rv(Chrom,FieldD));whilegenMAXGEN%迭代FitnV=ranking(ObjV);%分配适应度值SelCh=select('sus',Chrom,FitnV,GGAP);%选择SelCh=recombin('xovsp',SelCh,0.7);%重组SelCh=mut(SelCh);%变异%计算子代目标函数值ObjVSel=objfun1(bs2rv(SelCh,FieldD));%重插入[ChromObjV]=reins
本文标题:遗传算法实验六
链接地址:https://www.777doc.com/doc-2010135 .html