遗传算法的c语言程序.docx

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
一需求分析1.本程序演示的是用简单遗传算法随机一个种群,然后根据所给的交叉率,变异率,世代数计算最大适应度所在的代数演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“提示信息”之后,由用户在键盘上输入演示程序中规定的命令;相应的输入数据和运算结果显示在其后。 测试数据输入初始变量后用y=100*(x1*x1-x2)*(x1*x2-x2)+(1-x1)*(1-x1)其中-2.048=x1,x2=2.048作适应度函数求最大适应度即为函数的最大值 概要设计程序流程图执行复制复制的个体添入新群体中YLN计算群体中各个体适应度从左至右依次执行遗传算子2Pcj=0随机产生M个初始个体Y选择两个交叉个体执行交叉交叉后添入新群体中Gen=Gen+1输出结果选择个体变异点 执行变异 执行复制 复制的个体添入新 群体中 YL N计算群体中各个体适应度 从左至右依次执行遗传算子2Pcj=0 随机产生M个初始个体 Y 选择两个交叉个体 执行交叉 交叉后添入新群体中 Gen=Gen+1 输出结果 选择个体变异点 执行变异 变异后添入新群体中 1 -j= j+1- intmaxgeneration;〃最大世代数 doublepc;//交叉率 doublepm;〃变异率structindividual { charchrom[chromlength+1];doublevalue;doublefitness;〃适应度};intgeneration;//世代数intbest_index;intworst_index;structindividualbestindividual;〃最佳个体structindividualworstindividual;//最差个体structindividualcurrentbest;structindividualpopulation[POPSIZE];函数声明voidgenerateinitialpopulation();voidgeneratenextpopulation();voidevaluatepopulation();longdecodechromosome(char*,int,int);voidcalculateobjectvalue();voidcalculatefitnessvalue();voidfindbestandworstindividual();voidperformevolution();voidselectoperator();voidcrossoveroperator();voidmutationoperator();voidinput();voidoutputtextreport();程序的各函数的简单算法说明如下: .voidgenerateinitialpopulation()和voidinput()初始化种群和遗传算法参数。 input()函数输入种群大小,染色体长度,最大世代数,交叉率,变异率等参数。 voidcalculateobjectvalue();计算适应度函数值。 根据给定的变量用适应度函数计算然后返回适度值。 选择函数selectoperator()在函数selectoperator()中首先用rand()函数产生0?1间的选择算子,当适度累计值不为零时,比较各个体所占总的适应度百分比的累计和与选择算子,直到达到选择算子的值那个个体就被选出,即适应度为fi的个体以fi/Z的概率继续存在;显然,个体适应度愈高,被选中的概率愈大。但是,适应度小的个体也有可 能被选中,以便增加下一代群体的多样性。 染色体交叉函数crossoveroperator()这是遗传算法中的最重要的函数之一,它是对个体两个变量所合成的染色体进行交叉,而不是变量染色体的交叉,这要搞清楚。首先用rand()函数产生随机概率,若小于交叉概率,则进行染色体交叉,同时交叉次数加1。这时又要用rand()函数随机产生一位交叉位,把染色体的交叉位的后面部分交叉即可;若大于交叉概率,则进行简单的染色体复制即可。 染色体变异函数mutation()变异是针对染色体字符变异的,而不是对个体而言,即个体变异的概率是一样。随机产生比较概率,若小于变异概率,则1变为0,0变为1,同时变异次数加1。 longdecodechromosome(char*,int,int)本函数是染色体解码函数,它将以数组形式存储的二进制数转成十进制数,然后才能用适应度函数计算。 voidfindbestandworstindividual()本函数是求最大适应度个体的,每一代的所有个体都要和初始的最佳比较,如果大于就赋给最佳。 voidoutputtextreport()输出种群统计结果输出每一代的种群的最大适应度和平均适应度,最后输

文档评论(0)

dajiefude2 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档