一、题目1
2ma_{f(_)_|__}最大值,解空间为非负整数集求解优化问题
_={0,1,2….,31}。
(1)matlab源程序及说明
question1.m
clear
figure(1);
plot([0:31].^2);%画出函数曲线
%定义遗传算法参数
NIND=4;%Numberofindividuals个体数目
MA_GEN=50;%XXX最大遗传代数PRECI=5;%变量的二进制位数,即个体编码串的长度
GGAP=0.5;%Generationgap代沟
trace=zeros(2,MA_GEN);%寻优结果的初始值
FieldD=[5;0;31;1;0;1;1];%区域描述器BuildfielddescriptorChrom=crtbp(NIND,PRECI);%初始种群
gen=0;%代计数器
variable=bs2rv(Chrom,FieldD);%计算初始种群的十进制转换ObjV=variable.^2;%计算目标函数值
%Generationalloop
whilegen %Assignfitnessvaluestoentirepopulation FitnV=ranking(-ObjV);%分配适应度值 %Selectindividualsforbreeding SelCh=select('sus',Chrom,FitnV,GGAP);%选择 %Recombineindividuals(crossover) SelCh=recombin('_ovsp',SelCh,0.7);%重组交叉 %Applymutation SelCh=mut(SelCh);%变异,mut(SelCh,Pm),这里Pm表示变异概率variable=bs2rv(SelCh,FieldD);%子代个体的十进制转换 %Evaluateoffspring,callobjectivefunction ObjVSel=variable.^2;%计算子代个体的目标函数值 %Reinsertoffspringintopopulation [ChromObjV]=reins(Chrom,SelCh,1,1,-ObjV,-ObjVSel);%重插入子代的新种群ObjV=-ObjV; %Incrementcounter gen=gen+1; %输出最优解及其序号,并在目标函数图像中标出,Y为最优解,I为种群序号 (2)程序运行结果 图1f(_)=_2结果函数图 图2遗传算法每代最优解变化图线及种群均值变化图线 从图线我们可以看到,遗传算法最终求解的结果为: 当_=31时得到函数最大值961。 二、题目2 用遗传算法求函数y(_)=_sin(1/_)在_∈[0.05,0.5]间的极小值。取种群大小M=10,Pc=0.8,Pm=0.01。 (1)matlab源程序及说明 FieldD=[15;0;31;1;0;1;1];%区域描述器Buildfielddescriptor Chrom=crtbp(NIND,PRECI);%初始种群 gen=0;%代计数器 variable=bs2rv(Chrom,FieldD);%计算初始种群的十进制转换 ObjV=XXX(1./variable);%计算目标函数值 %Generationalloop whilegen %Assignfitnessvaluestoentirepopulation FitnV=ranking(ObjV);%分配适应度值 %Selectindividualsforbreeding SelCh=select('sus',Chrom,FitnV,GGAP);%选择 %Recombineindividuals(crossover) SelCh=recombin('_ovsp',SelCh,0.8);%重组交叉 %Applymutation SelCh=mut(SelCh,0.01);%变异,mut(SelCh,Pm),这里Pm表示变异概率variable=bs2rv(SelCh,FieldD);%子代个体的十进制转换 %Evaluateoffspring,callobjectivefunction ObjVSel=XXX(1./variable);%计算子代个体的目标函数值%Reinsertoffspringintopopulation [ChromObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel);%重插入子代的新种群%Incrementcounter gen=gen+1; %输出最优解及其序号,并在目标函数图像中标出,Y为最优解,I为种群序号 [Y,I]=min(ObjV); trace(1,gen)=min(ObjV); trace(2,gen)=sum(ObjV)/length(ObjV); variable=bs2rv(Chrom,FieldD); holdon,grid; plot(variable,ObjV,'b'); figure(2); plot(trace(1,:)'); holdon; plot(trace(2,:)','-.');grid; legend('解的变化','种群均值的变化') (2)程序运行结果 图3函数y(_)=_sin(1/_)结果图像 图4遗传算法每代最优解变化图线及种群均值变化图线 从图线我们可以看到,遗传算法最终求解的结果为: 当_=0.2233时,得到函数最小值-0.2172 三、思考题 求解优化问题f(_1,_2)_122_1_23_1_226_2 (1)matlab源程序及说明 question3.m clear figure(1); %画出函数曲面 _=[-127:1:128]; [_,Y]=meshgrid(_); z=_.^2-2._.Y+3._+Y.^2-6.Y; mesh(_,Y,z); _label('_轴'); ylabel('y轴'); zlabel('z轴'); %定义遗传算法参数 NIND=15;%Numberofindividuals个体数目 MA_GEN=50;%XXX最大遗传代数 PRECI=7;%变量的二进制位数,即个体编码串的长度 GGAP=0.8;%Generationgap代沟 trace=zeros(2,MA_GEN);%寻优结果的初始值 FieldD=[77;-127-127;128128;11;00;11;11];%区域描述器BuildfielddescriptorChrom=crtbp(NIND,PRECI2);%初始种群 gen=0;%代计数器 variable=bs2rv(Chrom,FieldD);%计算初始种群的十进制转换 ObjV=variable(:,1).^XXX(:,1).variable(:,2)+XXX(:,1)+variable(:,2).^XXX(:,2);%计算目标函数值 %Generationalloop whilegen %Assignfitnessvaluestoentirepopulation FitnV=ranking(-ObjV);%分配适应度值 %Selectindividualsforbreeding SelCh=select('sus',Chrom,FitnV,GGAP);%选择 %Recombineindividuals(crossover) SelCh=recombin('_ovsp',SelCh,0.8);%重组交叉 %Applymutation SelCh=mut(SelCh,0.01);%变异,mut(SelCh,Pm),这里Pm表示变异概率 variable=bs2rv(SelCh,FieldD);%子代个体的十进制转换 %Evaluateoffspring,callobjectivefunction ObjVSel=variable(:,1).^XXX(:,1).variable(:,2)+XXX(:,1)+variable(:,2).^XXX(:,2);%计算子代个体的目标函数值 %Reinsertoffspringintopopulation [ChromObjV]=reins(Chrom,SelCh,1,1,-ObjV,-ObjVSel);%重插入子代的新种群 ObjV=-ObjV; %Incrementcounter gen=gen+1; %输出最优解及其序号,并在目标函数图像中标出,Y为最优解,I为种群序号 [Y,I]=ma_(ObjV); trace(1,gen)=ma_(ObjV); trace(2,gen)=sum(ObjV)/length(ObjV); variable=bs2rv(Chrom,FieldD); holdon; plot3(variable(:,1),variable(:,2),ObjV,'b'); figure(2); plot(trace(1,:)'); holdon; plot(trace(2,:)','-.');grid; legend('解的变化','种群均值的变化') (2)程序运行结果 图5f(_1,_2)_122_1_23_1_226_2函数结果图 图6遗传算法每代最优解变化图线及种群均值变化图线 由上述两幅图可知,遗传算法找到了范围中的一个最大值点: _1=128,_2=-127,最大值为:66171 四、实验体会 这次的实验内容是关于遗传算法的一些运用,即在运用MATLAB的基础上求解一元和二元函数的最优化问题。 在实验过程中,我感受到了遗传算法的优点。遗传算法有比一般最优化方法更快的收敛速度,这样就能更快地找到最优值。