遗传算法(大作业)

遗传算法求最大值(大作业)

09电子(2)班 郑周皓 E09610208

(x?5)2?(y?5)2(x?5)2?(y?5)2)?0.999?exp[?]题目:函数f2(x,y)?0.9?exp(1020(x,y在-10到10之间),利用遗传算法求函数的最大值及对应的位置。

要求: 种群数N=50,交叉位数n/2,即个体位数的一半,且位置自行设计,变异位

数自定,x,y分辨率为0.0001。

效果比较:交叉个数=20,28,36,44 变异个数=1,5,10,15

解:

问题分析:

对于本问题,只要能在区间[-10,,10]中找到函数值最大的点a,b,则函数f(x,y)的最大值也就可以求得。于是,原问题转化为在区间[-10, 10]中寻找能使f(x,y)取最大值的点的问题。显然, 对于这个问题, 任一点x,y∈[-10, 10]都是可能解, 而函数值f(x)= sinx/x也就是衡量x能否为最佳解的一种测度。那么,用遗传算法的眼光来看, 区间[-10, 10]就是一个(解)空间,x就是其中的个体对象, 函数值f(x)恰好就可以作为x的适应度。这样, 只要能给出个体x的适当染色体编码, 该问题就可以用遗传算法来解决。

自变量x,y可以抽象为个体的基因组,即用二进制编码表示x,y;函数值f(x,y)可以抽象为个体的适应度,函数值越小,适应度越高。

遗传算法步骤:

算法流程

生成初始种群 计算适应度 终止 ? 结束 选择-复制 交叉 变异 生成新一代种群 第1步 在论域空间U上定义一个适应度函数f(x),给定种群规模N,交叉率Pc和变异率Pm,代数T;

取适度函数为f(x)=sinx/x,种群规模N=50,用popsize表示。 x,y的精度为0.0001 .

交叉率(crossover rate):参加交叉运算的染色体个数占全体染色体总数的比例,记为Pc,取值范围一般为0.4~0.99,根据要求本例中选为20/50、28/50、36/50、44/50。

变异率(mutation rate):发生变异的基因位数所占全体染色体的基因总位数的比例,记为Pm,取值范围一般为0.0001~0.1,根据要求本例中选为1/50、5/50、10/50、15/50。

最大换代数:本题中取100次 第2步 随机产生U中的N个染色体s1, s2, …, sN,组成初始种群S={s1, s2, …, sN},置代数计数器t=1;

第3步 计算S中每个染色体的适应度f() ; 第4步 若终止条件满足,则取S中适应度最大的染色体作为所求结果,算法结束。 第5步 按选择概率P(xi)所决定的选中机会,每次从S中随机选定1个染色体并将其复制,共做N次,然后将复制所得的N个染色体组成群体S1;

第6步 按交叉率Pc所决定的参加交叉的染色体数c,从S1中随机确定c个染色体,配对进行交叉操作,并用产生的新染色体代替原染色体,得群体S2;

第7步 按变异率Pm所决定的变异次数m,从S2中随机确定m个染色体,分别进行变异操作,并用产生的新染色体代替原染色体,得群体S3;

第8步 将群体S3作为新一代种群,即用S3代替S,t=t+1,转步3;

传算法matlab编程

%由于原函数变量的取值包含负数,所以我们现对原函数变形,使得变量取值范围为正数,X=x-10;Y=y-10。 (x?5)2?(y?5)2(x?15)2?(y?15)2)?0.999?exp[?] %f'2(x,y)?0.9?exp(1020%编程方法同上,但是根据要求精度为0.0001,将 x 的值用一个18位的二值形式表示为二值问题,一个18位的二值数提供的分辨率是每为 (20-0)/(2^18-1)≈0.0001,满足题目的要求。 % 将变量域 [0,20] 离散化为二值域 [0, 262143], x=0+20*b/262143, 其中 b 是 [0, 262143] 中的一个二值数。 计算目标函数值 % calobjvalue.m 函数的功能是实现目标函数的计算 %遗传算法子程序 %Name: calobjvalue.m %实现目标函数的计算 function [objvalue]=calobjvalue(pop) temp1=decodechrom(pop,1,18); %将pop每行转化成十进制数 temp2=decodechrom(pop,19,18); x=temp1*20/262143; %将二值域中的数转化为变量域的数 y=temp2*20/262143; objvalue=0.9*exp((x-5).^2/10+(y-5).^2/10)+0.9999*exp(-(x-15).^2/20-(y-15).^2/20); %计算目标函数值 主程序

%遗传算法主程序 clear clf

popsize=50; %群体大小

chromlength=36; %字符串长度(个体长度) pcc=[20/50,28/50,36/50,44/50,20/50]; pmm=[1/50,5/50,10/50,15/50,1/50];

pop=initpop(popsize,chromlength); %随机产生初始群体 for i=1:100 0为迭代次数

pc=pcc(round(rand *4)+1); %交叉概率 pm=pmm(round(rand *4)+1); %变异概率

[objvalue]=calobjvalue(pop); %计算目标函数

fitvalue=calfitvalue(objvalue); %计算群体中每个个体的适应度 [newpop1]=selection(pop,fitvalue); %复制 [newpop2]=crossover(newpop1,pc); %交叉 [newpop3]=mutation(newpop2,pc); %变异

[bestindividual,bestfit]=best(pop,fitvalue); %求出群体中适应值最大的个体及其适应值 z(i)=max(bestfit); n(i)=i;

pop5=bestindividual;

x(i)=decodechrom(pop5,1,chromlength/2)*20/262143;

y(i)=decodechrom(pop5,chromlength/2+1,chromlength/2)*20/262143; pop=newpop3; end

函数图像分析

(1)其中每一代的最佳值组成一个有100个元素的列向量如下图所示:

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4