遗传算法求y等于X平方+5最优解.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
遗传算法求y等于X平方+5最优解 一、编码以及初始种群的产生 二、适应度函数 一般情况下,染色体(也叫个体,或一个解)的适应度函数为目标函数的线性组合。本文直接以目标函数作为适应度函数。即每个染色体的适应度值就是它的目标函数值,f(x)=-x2+5。 三、选择算子 初始种群产生后,要从种群中选出若干个体进行交叉、变异,那么如何选择这些个体呢,选择方法就叫做选择算子。一般有轮盘赌选择法、锦标赛选择法、排序法等。本文采用排序法来选择,即每次选择都选出适应度最高的两个个体。那么执行一次选择操作后,得到的新种群的一部分为下图所示: 五、变异 变异就是对染色体的结构进行变异,使其改变原来的结构(值也就改变),达到突变进化的目的。变异操作也要遵从一定的概率来进行,一般设置为0到0.5之间。本文的变异方法直接采取基因位反转变异法,即0变为1,1变为0。要进行变异的基因位的选取也是随机的。 六、终止规则 遗传算法是要一代一代更替的,那么什么时候停止迭代呢,这个规则就叫终止规则。一般常用的终止规则有:若干代后终止,得到的解达到一定目标后终止,计算时间达到一定限度后终止等方法。本文采用迭代数来限制。 七、代码如下: #includestdio.h//调用输入输出函数所需要的头文件 #includeconio.h〃调用getche函数所需要的头文件 #includestdlib.h〃调用随机函数所需要的头文件 typedefstructChrom//结构体类型,为单个染色体的结构; ( shortintbit[6]; intfit; }chrom; void*evpop(chrompopcurrent[4]);//定义将会用到的几个函数; intx(chrompopcurrent); inty(intx); void*pickchroms(chrompopcurrent[4]); void*crossover(chrompopnext[4]); void*mutation(chrompopnext[4]); voidmain()//主函数; ( intnum;//迭代次数; inti,j,l,Max,k; Max=0;//函数最大值 printf(/nWelcometotheGeneticAlgorithmcodedbyLuayAl-wesi,editdby xujinpeng/n);//introductiontotheprogram,欢迎词; printf(TheAlgorithmisbasedonthefunctiony=-x2+5tofindthemaximum valueofthefunction./n); enter:printf(/nPleaseentertheno.ofiterations/n请输入您要设定的迭代数:〃); scanf(〃%d〃,num);//输入迭代次数,传送给参数num; chrompopcurrent[4];//初始种群规模为4; chrompopnext[4];//更新后种群规模仍为4; if(num1) gotoenter;//判断输入的迭代次数是否为负或零,是的话重新输入; evpop(popcurrent);//随机产生初始种群; for(i=0;inum;i++)//开始迭代; ( printf(/ni=%d/n”,i);//输出当前迭代次数; for(j=0;j4;j++) ( popnext[j]=popcurrent[j];//更新种群; } pickchroms(popnext);//挑选优秀个体; crossover(popnext);//交叉得到新个体; mutation(popnext);//变异得到新个体; for(j=0;j4;j++) ( popcurrent[j]=popnext[j];//种群更替; } }//等待迭代终止; for(l=0;l3;l++) if(popcurrent[l].fitMax) ( Max二popcurrent[l].fit; k=l; } } printf(/n当x等于%d时,函数得到最大值为:%d”,k,Max); printf(/nPressanykeytoend!); flushall();//清除所有缓冲区; getche();//从控制台取字符,不以回车为结束; } void*evpop(chrompopcurrent[4])//函数:随机生成初始种群; ( inti,j,value; intrandom; for(j=0;j4;j++)//从种群中的第1个染色体到第4个染色体 ( for(i=0;i6;i++)//从染色体的第1个基因位到第6个基因位 ( random二rand();//产生一个随机值 random=(random%2)

文档评论(0)

gaozhigang + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档