实验五:遗传算法求解函数最值问题实验

上传人:回**** 文档编号:203168079 上传时间:2023-04-24 格式:DOC 页数:20 大小:244KB
收藏 版权申诉 举报 下载
实验五:遗传算法求解函数最值问题实验_第1页
第1页 / 共20页
实验五:遗传算法求解函数最值问题实验_第2页
第2页 / 共20页
实验五:遗传算法求解函数最值问题实验_第3页
第3页 / 共20页
资源描述:

《实验五:遗传算法求解函数最值问题实验》由会员分享,可在线阅读,更多相关《实验五:遗传算法求解函数最值问题实验(20页珍藏版)》请在装配图网上搜索。

1、实验五:遗传算法求解函数最值问题实验一、 实验目的使用遗传算法求解函数在及的最大值。二、 实验内容使用遗传算法进行求解,篇末所附源代码中带有算法的具体注释。算法中波及不同的参数,参数的取值需要根据实际状况进行设定,下面运营时将给出不同参数的成果对比。定义整体算法的结束条件为,当种群进化次数达到maxGeneration时停止,此时种群中的最优解即作为算法的最后输出。设种群规模为N,一方面是随机产生N个个体,实验中定义了类型Chromosoe表达一种个体,并且在默认构造函数中即进行了随机的操作。然后程序进行若干次的迭代,在每次迭代过程中,进行选择、交叉及变异三个操作。.选择操作一方面计算目前每个

2、个体的适应度函数值,这里的适应度函数即为所规定的优化函数,然后归一化求得每个个体选中的概率,然后用轮盘赌的措施以容许反复的方式选择选择N个个体,即为选择之后的群体。但实验时发现成果不好,通过仔细研究之后发现,这里在x、y取某些值的时候,目的函数计算出来的适应值也许会浮现负值,这时如果按照把每个个体的适应值除以适应值的总和的进行归一化的话会浮现问题,由于个体也许浮现负值,总和也也许浮现负值,如果归一化的时候除以了一种负值,选择时就会选择某些不良的个体,对实验成果导致影响。对于这个问题,我把适应度函数定为目的函数的函数值加一种正数,保证得到的适应值为正数,然后再进行一般的归一化和选择的操作。实验成

3、果表白,之前的实验成果很不稳定,修正后的成果比较稳定,趋于最大值。2交叉操作一方面是根据交叉概率obCrs选择要交叉的个体进行交叉。这里根据交叉参数crossnum进行多点交叉,一方面随机生成交叉点位置,容许交叉点重叠,两个重叠的交叉点效果互相抵消,相称于没有交叉点,然后根据交叉点进行交叉操作,得到新的个体。3.变异操作一方面是根据变异概率routatin选择要变异的个体。变异时先随机生成变异的位置,然后把改位的01值翻转。通过一定的进化之后得到最后种群,从中选择最优的个体即可得到最后的成果。4.运营成果借助matlab软件,我们可以懂得该函数在该定义域下的图像为:如下设立不同的参数值进行对比

4、实验:表 不同参数的对比实验nrossnuaGeneratiopoCrossprobMutate实验一实验二110041005.5.632042.467175010450000.850.15.87176518838315032450000.85.52.820274528930735403041000.80.52.89440562885152000510000.80228888212.9160736004100000.85015289363739245359以上我们重要对种群规模N,个体染色体长度len,迭代次数axGenertio进行比较。可以看出,随着种群规模的增大,染色体长度的增长,迭代次

5、数的增长,算法得到的成果越来越精确。当参数规模达到一定限度时,再增长参数的值会明显地增长程序运营时间,但却不一定能明显改善解的质量,反而也许由于某些随机因数而产生质量更差的解,如第6组实验一所示。同步也大概比较了一下多点交叉的交叉点个数csnum,交叉概率probross,变异概率obMutate等参数,由于参数太多,这里没有一一进行控制变量的比较。大体估算可知,交叉概率及交叉点的个数影响交叉操作产生新个体的质量,过多的交叉及变化过大的交叉也许会产生不好的成果,而过多的变异也应当会导致算法的不稳定。下面给出以上几种实验成果的实验截图,其中到目前为止成果最佳的一种为:其他若干个为:5.实验代码改

6、善后的源代码如下:#inclde osteamnclde imanip#ncle aorithm#ncludusingnamespa st;/程序欲分派内存的数组大小onst int mx 1000;/ 最大的种群规模onst in mln= 100;/ 最大的染色体长度/ 遗传算法核心参数onst N = 200;/ 种群的个体数cost int en 0;/每个个体的染色体的长度,x和y各占一半cont nt rosum 4;/ 交叉操作时多点交叉的交叉点个数const inGern ; 最大进化代数nsdouble probos =0.85;/ 交叉概率constdoblrobMutto

7、n 0.5;/变异概率/ 个体的染色体类cs Cromosome puic:bolgmxen;/ 二进制编码的编码数组Chromosome()/ 默认构造函数,构造随机染色体f (ini = 0; ien; +)gi =rand() % 2;Chromoome(constChromosome& )/ 拷贝构造函数,进行深复制for (it i ; i len; +)gi = c.i;voi eator=(constCrosme& )/ 重载号,进行深复制for (in i= ; len / ; i-)em = .gi * q, q = q* 2;y 1 + (2 - 1)/ n te;tem

8、=0;o(iti = len / 2 1, q= ; i = 0;)te += . * q, q = q * 2;=1 (2 - 1) / num *te;/适应度函数,为避免负值,把目的函数加一种正数dble fins(onsCromosme c)dubl, y;eco(c,x, y);return(x, y) + 5;/ 辅助函数,生成-1之间的随机小数ubleinne radom01()returnra() % 10000 / 1000.;/ 选择操作void slec(Chomosoe groupmn)/ 计算每个个体的选择概率dbfitnsalmxn;fo (int i=0; iN;

9、 i+)fitnessVai fitss(grupi);ouble = 0;r (it i = 0; i N; i+)um += itnesli;dubeprobmxn;for (in = 0;i N; i+)pob =fitnesVal / sum;/ 随机选择个个体构成新种群 selctIdmx;or(it i = 1; i N; +)prb+=obi-1;or(int i = 0; N; +)/使用轮盘赌算法选择个体doublrN =an01();itj;for ( 0; jN -1; j+)if (radN prob)seleti =j;bak;if (j= N - 1)selctId

10、 j;/ 把种群更新为新选择的个体集合o(in i=; N; i)emGroupi = groupi;for (int = ; i N; i+)goupi temGroupseleti;/交叉操作,使用多点交叉void crosovr(Chrmosom& 1, Chromosme& 2)/ 生成交叉点位置,并排序i crossointn;fo(inti =0; crossnm;i+)cosspont = and() % le;so(crospoin, crositco);/ 进行交叉bo flg = ;fo(inti = , =0; i l;i+)if(!flag)swap(c1i,c2.i)

11、;i( = rosspoinj)/ 如果若干个交叉点重叠,则效果叠加/ 偶数个交叉点效果相称于没有交叉点wl( cossnm & = rsspontj)+;ag = !flag;/ 变异操作vid mutate(Chroose ) 随机选择一位进行翻转int i rand() le;c.i = !c.gi;/ 获取种群最优个体intgeOptimal(Crsme groupx, dbe& x,ube& y, double val)/ 计算适应值,遍历得到最优值并进行解码double finessValmn;fr(int =0; i N; i+)fitnessVai = itess(grupi)

12、;in i=0;or (int = 1; i N;i+)i (fitesa ftneslid)d = ;decode(gruid, x, );v= f(x, y);rtn id;/ 遗传算法总代码void GA(ouble& x, dule& y, douleval)/ 初始化种群for (int ; N;i+)groupi = Chromooe();/ bestC = gropgtOpimal(rup,x, , betal);/ 控制进化代数r(nt g = ;g mxGeneaon;g+)/选择操作ect(group);/ 根据交叉概率进行交叉for (it i = 0, pre = -1

13、; N; +)i (random01() pobross)if (pr= -1)pre = ;lecroover(gouppe, goupi);pr = -1; 根据变异概率进行变异fr(nt i = 0; N; i+)if (adom01() proMutation)muate(oup);/避免种群退化doueteval;it bestId=tptimal(grp, x,y, temval);if(temal esta)/ 如果新种群的最优值变差,把较优的个体替代进新种群rupestId= bestC;ele/ 如果新种群的最优值变好,则更新最优值记录bet = groupbeI;bstvl

14、= teal;/ 获取最优值eOptimal(roup, x,y, va);int mai ()srnd(time(0);oe x, y, mxval;GA(x, , aal);cout 函数在点( fxed sprecisi(15) x , y )获得最大值: maxva endl;syt(pas);三、 实验体会以上实验得到的最佳成果仍然是差强人意,这里对算法做一种小的优化,即添加避免种群退化的操作。记录目前位置所得到的最优值及相应的个体,每次更新种群之后,计算新种群的最优值,如果最优值变差了,则把之前较优的个体替代进新种群,避免种群退化;否则更新最优值。改善之后的效果如下所示,显然比之前更优,且实验成果显示对于前面对比实验中的参数值,这里只需要较小的参数(如迭代次数只需次)值即可稳定收敛到此最大值,可知改善非常有效。增长输出精度之后为,于是得到最优的成果为2841

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!