遗传算法的并行实现.docVIP

  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文档。上传文档
查看更多
遗传算法的并行实现.doc

遗 传 算 法 (基于遗传算法求函数最大值) 指导老师:刘建丽 学 号:S201007156 姓 名:杨平 班 级:研10级1班 遗传算法 遗传算法的基本描述 遗传算法(Genetic Algorithm,GA)是通过模拟自然界生物进化过程来求解优化问题的一类自组织、自适应的人工智能技术。它主要基于达尔文的自然进化论和孟德尔的遗传变异理论。多数遗传算法的应用是处理一个由许多个体组成的群体,其中每个个体表示问题的一个潜在解。对个体存在一个评估函数来评判其对环境的适应度。为反映适者生存的思想,算法中设计一个选择机制,使得:适应度好的个体有更多的机会生存。在种群的进化过程中,主要存在两种类型的遗传算子:杂交和变异。这些算子作用于个体对应的染色体,产生新的染色体,从而构成下一代种群中的个体。该过程不断进行,直到找到满足精度要求的解,或者达到设定的进化代数。显然,这样的思想适合于现实世界中的一大类问题,因而具有广泛的应用价值。遗传算法的每一次进化过程中的,各个体之间的操作大多可以并列进行,因此,一个非常自然的想法就是将遗传算法并行化,以提高计算速度。本报告中试图得到一个并行遗传算法的框架,并考察并行化之后的一些特性。为简单起见(本来应该考虑更复杂的问题,如TSP。因时间有些紧张,做如TSP等复杂问题怕时间不够,做不出来,请老师原谅),考虑的具有问题是:对给定的正整数n、n元函数f,以及定义域D,求函数f在D内的最大值。 串行遗传算法 染色体与适应度函数 对函数优化问题,一个潜在的解就是定义域D中的一个点,因此,我们只需用一个长度为n的实数数组来表示一个个体的染色体。由于问题中要求求函数f的最大值,我们可以以个体所代表点在f函数下的值来判断该个体的好坏。因此,我们直接用函数f作为个体的适应度函数。 选择机制 选择是遗传算法中最主要的机制,也是影响遗传算法性能最主要的因素。若选择过程中适应度好的个体生存的概率过大,会造成几个较好的可行解迅速占据种群,从而收敛于局部最优解;反之,若适应度对生存概率的影响过小,则会使算法呈现出纯粹的随机徘徊行为,算法无法收敛。下面我们介绍在实验中所使用的选择机制。 我们定义为当前种群内所有个体的集合,为中所有个体的一个固定排列。若为某一个体,表示该个体的适应度,则种群的适应度定义为: 对任意个体,的相对适应度定义为。相对适应度反映了个体的适应度在整个适应度总和中所占的比例。个体适应度越高,被选中的概率越高。累积适应度定义为: 进行选择之前,先产生一个0到1之间的随机实数,若满足,则第k+1个个体被选中。循环以上过程,即得到生成下一代种群的母体。 具体实现见如下函数: void pop_select(void) { int mem, i, j, k; double sum = 0; double p; /* 计算种群适应度之和 */ for (mem = 0; mem POPSIZE; mem++) { /* 按照累积适应度概率选取母体种群 */ for (i = 0; i POPSIZE; i++) { p = rand()%1000/1000.0; if (p population[0].cfitness) newpopulation[i] = population[0]; else { for (j = 0; j POPSIZE;j++) if (p = population[j].cfitness p population[j+1].cfitness) newpopulation[i] = population[j+1]; } } /*计算种群的总适应度*/ for (i = 0; i POPSIZE; i++) population[i] = newpopulation[i]; } sum += (population[mem].fitness - lower_fitness); } /* 计算相对适应度 */ for (mem = 0; mem POPSIZE; mem++) { population[mem].rfitness = (population[mem].fitness - lower_fitness)/sum; } population[0].cfitness = population[0].rfitness; /* 计算累积适应度 */ for (mem = 1; mem POPSIZE; mem++) { population[mem].cfitness = populatio

文档评论(0)

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

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

1亿VIP精品文档

相关文档