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

上传人:s9****2 文档编号:498438665 上传时间:2022-09-28 格式:DOC 页数:20 大小:244KB
返回 下载 相关 举报
实验五:遗传算法求解函数最值问题实验_第1页
第1页 / 共20页
实验五:遗传算法求解函数最值问题实验_第2页
第2页 / 共20页
实验五:遗传算法求解函数最值问题实验_第3页
第3页 / 共20页
实验五:遗传算法求解函数最值问题实验_第4页
第4页 / 共20页
实验五:遗传算法求解函数最值问题实验_第5页
第5页 / 共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);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)/ 计算适应值,遍历得到最优值并进行解码

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 活动策划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号