实验一基于遗传算法的函数优化

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

人工智能实验报告实验一基于遗传算法的函数优化11、、实实验验目目的的11))掌掌握握MMaattllaabb子子函函数数的的编编写写与与调调用用。。22))理理解解基基本本遗遗传传算算法法的的原原理理,,并并利利用用程程序序实实现现利利用用遗遗传传算算法法优优化化非非线线性性函函数数的的解解。。22、、实实验验内内容容与与实验要求11))掌掌握握基基本本遗遗传传算算法法方方法法原原理理。。22))掌掌握握mmaattllaabb子子函函数数的的编编写写方方法法及及调调用用方方法法。。33))根根据据基基本本遗遗传传算算法法方方法法原原理理,,编编写写MMaattllaabb程程序序,,优优化化非非线线性性函函数数的的解解。。44))设设ff((xx))==241xx,,求求mmaaxxff((xx)),,xx[[--22,,22]],,解解的的精精度度保保留留二二位位小小数数。。3、实验要求1)自己独立编写Matlab函数。2)书写实验报告。3)分析实验结果,用图或表描述出迭代次数与适应度函数值的关系曲线。4、实验设备1)计算机2)Matlab软件5、实验结果及分析(1)编码和产生初始群体首先需要确定编码的策略,也就是说如何把[-2,2]区间内的数用计算机语言表示出来。采用二进制形式来解决编码问题,即将某个变量值代表的个体表示为一个{0,1}二进制串。串的长度取决于求解的精度,例如假设求解精度为保留两位小数,由于区间[-2,2]的长度为4,则必须将该区间分为400等分。因为2840029,所以编码所用的二进制串至少需要9位。编码:二进制串(b8b7b6…b1b0)与[-2,2]内实数的一一映射:124'2x9x802'xiiibb8b7b6…b1b0二进制串a=101000111其对应的十进制数为:327)101000111(x'2转化到[-2,2]内的实数为:56.012)2(2'29xx产生初始群体:pop1={100011110,%a1001000010,%a2110000000,%a3110000101}%a4转化成[-2,2]之间的十进制数即为:pop1={0.24,-1.48,1.01,1.05}(2)定义适应函数和适应值minmin(),()0()0,fxFfxFgx若其他由于目标函数f(x)在[-2,2]内的值有正有负,所以必须通过建立适应函数与目标函数的映射关系,保证映射后的适应值非负,而且目标函数的优化方向应对应于适应值增大的方向,也为以后计算各个体的入选概率打下基础。定义适应函数:为了便于计算,这里的Fmin采用了一个特定的输入值,如果取Fmin=-1,则f(x)=1对应的适应值为g(x)=2。上述随机产生的初始群体,取Fmin=-1,则它们的目标函数值和适应值分别为:f(pop1)={-0.02,4.73,-4.06,-4.30}g(pop1)={-1.02,3.73,-5.06,-5.30}(3)确定选择标准1用适应值比例来作为入选概率。2设给定的规模为400的群体pop={a1,a2,...,a400},个体ai的适应值为g(ai),则其入选概率为400,...,3,2,1()()()(P4001iagagaiiiis)上述随机产生的初始群体,它们的入选概率分别为:p(pop1)=g(pop1)/sum(g(pop1))={0,1,0,0}(4)产生种群3将入选概率大的个体选入种群,淘汰概率小的个体,并用概率最大的个体补入种群,得到与原群体大小同样的种群。4在上述随机产生的初始群体中,淘汰掉a3,再加入a2,得到新的种群(选择):newpop1={100011110,%a1001000010,%a2001000010,%a2110010101}%a4交叉:5交叉也就是将一组染色体上对应基因段的交换得到新的染色体,然后得到新的染色体组,组成新的群体。6将前面得到的newpop1的四个个体两两配对,重复的不配对,进行交叉(可以在任一位进行交叉):变异:变异就是通过一个小概率改变染色体位串上的某个基因。7现把jchpop1中第3个个体中的第5位改变,就产生了变异,得到了新的群体pop2:pop2={001000010,100011110,010000101,101000010}然后对新的种群重复上述的选择、交叉、变异,直到满足终止条件为止。(5)实验结果:6、附录(Matlab函数)%遗传算法主函数%q:输出最佳个体自变量值%迭代次数为400function[q]=GA()globalbest_in;globalg_value;%初始化initilize();%初始化最佳个体的适应函数值fori=1:400g_value=0.;end%迭代开始fork=1:1:100fitness();%适应函数操作calculate();%对出现概率小的个体进行淘汰,并保留最佳个体best_in的信息%计算每一次迭代中最佳个体的适应函数值aa,并赋给g_value(i)aa=0.;forj=1:9aa=aa+best_in(j).*2^(j-1);endg_value(k)=aa;selection();%选择操作crossover();%交叉操作mutation();%变异操作endplotGA();%打印算法迭代过程%获得最佳个体变量值q=0.;forj=1:9q=q+best_in(j).*2^(j-1);endq=-2+q*4./(2^9-1);q=-q^2-4*q+1;%结果展示fprintf('最大值为:%3.2f\n',q);cleari;clearj;clearq;%调用函数1%初始化种群pop%种群大小400%染色体长度9%rand求随机数%round取整functioninitilize()globalpop;fori=1:400forj=1:9pop(i,j)=round(rand);endendcleari;clearj;%函数调用2%计算出适应函数值g(x)%原函数f(x)=-x^2-4x+1%取Fmin=-1%g(x)=-x^2-4x%value是pop种群中每个个体的适应值%并将value中小于零的数都赋值为零functionfitness()globalpop;globalvalue;fori=1:400value(i)=0.;forj=1:9ifpop(i,j)==1value(i)=value(i)+pop(i,j)*2^(j-1);endendvalue(i)=-2.+value(i)*4./(2^9-1);value(i)=-value(i)*value(i)-4.*value(i);ifvalue(i)=0value(i)=0;endendcleari;clearj;%函数调用3%求value的平均值%popl是各数的出现的概率%table中的最后一个值是所有的value值之和%保存最优的个体functioncalculate()globalpop;globaltable;globalpopl;globalvalue;globalavg;globalbest_in;%table的初始化fori=1:400table(i)=0.;end%求最大的value值的个体的序列号max,并把最优个体放在best_in中max=1;fori=1:399ifvalue(i+1)value(i)max=i+1;endendforj=1:9best_in(j)=pop(max,j);end%求所有value值的总和加到table中求出平均值avg1,再求出均值个体的出现概率avgfori=1:400ifi==1table(i)=table(i)+value(i);elsetable(i)=table(i-1)+value(i);endendavg1=table(400)./400;avg=avg1./table(400);%求value中每个个体出现的概率并且保留在popl中fori=1:400popl(i)=value(i)./table(400);endfori=1:400ifpopl(i)avgforj=1:9pop(i,j)=best_in(j);endendendcleari;clearq;clearj;cleark;cleartemp;clearmax;clearavg1;%函数调用4%将popl(i)=0的个体除去,并补上其相邻的不为0的pop%将新产生的群pop_new最终复制到popfunctionselection()globalpop;globalpopl;globalbest_in;pop_new(400,9)=0.;fori=1:400ifpopl(i)==0forj=1:9pop_new(i,j)=best_in(j);endelseforj=1:9pop_new(i,j)=pop(i,j);endendendfori=1:400forj=1:9pop(i,j)=pop_new(i,j);endendcleari;clearj;clearm;clearn;%函数调用5%单点交叉操作%pop_size:种群大小%chromo_size:染色体长度%cross_rate:交叉概率functioncrossover()globalpop%设置交叉概率为0.6cross_rate=0.6;fori=1:2:399if(randcross_rate)cross_pos=round(rand*9);ifor(cross_pos==0,cross_pos==1)continue;endforj=cross_pos:9temp=pop(i,j);pop(i,j)=pop(i+1,j);pop(i+1,j)=temp;endendendcleari;clearj;clearcross_pos;cleartemp;%函数调用6%单点变异操作%pop_size:种群大小%chromo_size:染色体长度%cross_rate:变异概率functionmutation()globalpop;%设置变异概率为0.01mutate_rate=0.01;fori=1:400ifrandmutate_ratemutate_pos=round(rand*9);ifmutate_pos==0continue;endpop(i,mutate_pos)=1-pop(i,mutate_pos);endendfori=1:400forj=1:9pop(i,j)=pop(i,j);endendcleari;clearj;clearmutate_rate;%打印算法迭代过程%迭代次数400functionplotGA()globalg_value;x=1:100;plot(x,g_value);ylabel('g(x)');xlabel('x');title('最佳个体迭代情况');clearx

1 / 10
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功