资源描述:
《实验一基于遗传算法的函数优化》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、人工智能实验报告1、1)实验一基于遗传算法的函数优化实验目的掌握Matlab子函数的编写与调用。2)理解基本遗传算法的原理,并利用程序实现利用遗传算法优化非线性函数的解。2、实验内容与实验要求1)掌握基本遗传算法方法原理。2)'亭:握matlab了•函数的编写方法及调用方法。3)根据基本遗传算法方法原理,编写Matlab积序,优化非线性函数的解。4)没f(x)=-f-4x+l,求maxf(x),xe[-2,2],解的精度保留二位小数。3、实验要求1)tM己独立编写Matlab函数。2)书写实验报告。3)分析实验结果,用图或表描述出迭代次数
2、与适极度函数值的关系曲线。4、实验设备1)计算机2)Matlab软件5、实验结果及分析(1)编码和产生初始群体首先需要确定编码的策略,也就足说如何把[-2,2]区间内的数用计算机语言表示出來。采用二进制形式来解决编码问题,即将某个变值代表的个体表示为一个{0,1}二进制中。中的讼度取决于求解的精度,例如假设求解精度为保留两位小数,由于区问[-2,2]的长度为4,则必须将该区间分为400等分。闪为28<400<29,所以编码所用的二进制串至少需要9位。编码:二进制串(b8b7b6...b1b0)与[-2,2]内实数的一一映射:o,4x=—2
3、+x29-187=0b«b7b6...bibo二进制串a=<101000111>Jt对应的十进制数为:x’=(101000111)2=327转化到[-2,2]内的实数为:9,2—(—2)x=-2x=0.5629-1产生初始群体:popl={<100011110〉,%al<001000010〉,%a2<110000000〉,%a3<110000101〉}%a4转化成[-2,21之间的1•进制数即为pop1=(0.24,-1.48,1.01,1.05}(2)定义适应函数和适应值S(x)=若/(x)nun其他>0屮于U标函数/U)在[-2,21
4、内的值有正宥负,所以必须通过建立适应函数与L1标函数的映射关系,保证映射后的适应位非负,而.目标函数的优化方应对应•丁•适应值增人的方14,也为以后计算各个体的入选概率打K基础。定义适应函数:为了便丁•计算,这里的采用了一个特定的输入位,如果取则Ax)=]对应的适应值为咖)=2。上述随机产生的初始群体,取Fw/n=-l,则它们的U标函数值和适应值分别为:f(popl)={-0.02,4.73,-4.06,-4.30}g(popl)={-1.02,3.73,-5.06,-5.30}(1)确定选择标准1用适应值比例來作为入选概率。2设给定的规
5、模为400的群体pop={«ba2,a4oo}^个体和的应值为g(«/),则其入选概率为P,UZ)=4。产)(/=1,2,3,…,400)7=1上述随机产生的初始群体,它们的入选概率分别为:p(popl)=g(popl)/sum(g(popl))={04,0,0}(4)产生种群3将入选概率大的个体选入种群,淘汰概率小的个体,并用概率域大的个体补入种群,得到与原群体人小同样的种群。4在上述随机产生的初始群体中,淘汰掉《3,再加入得到新的种群(选择):newpopi={<100011110〉,%al<001000010〉,%a2<001000
6、010>,%a2<110010101〉}%a4交叉:5交叉也就是将一组染色体上对应基W段的交换得到新的染色体,然后得到新的染色体组,组成新的群体。6将前而得到的newpopi的四个个体W两配对,重S的不配对,进行交叉(可以在任一位:进行交叉):变异:变异就足通过-个小概率改变染色体位串上的某个基因。7现把jchpopl屮第3个个体中的第5位改变,就产生了变异,得到了新的群体pop2:pop2={<001000010〉,<10001丨110〉,<010000101〉,<101000010〉}然后对新的种群重复上述的选择、交叉、变异,直到满足
7、终I卜.条件为I卜.。(5)实验结果:6、附录(Matlab函数)%遗传算法主函数%q:输出最佳个体自变量值%迭代次数为400function[q]=GA()globalbestin;globalgvalue;%初始化initilizeO;%初始化最佳个体的适应函数值fori=l:400g_value=0.;end%迭代开始fork=l:1:100fitnessO;%适应函数操作#•保留最佳个体best_in的ca1cuIate0;%对出现概率小的个体进行淘汰,信息%计算拇一次迭代中最佳个体的适应函数值aa,并赋给g_value(i)ci
8、ci=O.forj=l:9aa=aa+best_in(j).*2"(j-1);endgvalue(k)=aa;selection();%选择操作crossover();%交叉操作mutatio