遗传算法求解背包问题.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文档。上传文档
查看更多
遗传算法求解背包问题程序实现 一、背包问题描述 背包问题是著名的NP完备类困难问题,对这个问题的求解前人已经研究出了不少的经典的方法,对该问题确实能得到很好的结果。近年来蓬勃发展起来的遗传算法已被广泛地应用于优化领域,其全局最优性、可并行性、高效性在函数优化中得到了广泛地应用遗传算法克服了传统优化方法的缺点,借助了大自然的演化过程,是多线索而非单线索的全局优化方法,采用的是种群和随机搜索机制.本程序将遗传算法应用于背包问题。 二、实验程序1、编程语言:C++2、开发环境:MicrosoftVisualStudio20053、程序整体流程: 步1初始化过程1确定种群规模scale、杂交概率^。、变异概率,”、染色体长度泌N及最大进化代数maxgen。 1.2取x1(0)=u(0,1),x2(0)=u(0,1),…,xchN(0)=u(0,1),其中函数u(0,1)表示随机地产生数0或1,则x(0)=(x1(0),x2(0),-,xN(0)). 若不满足约束条件,则拒绝接受.由(1.2)重新产生一个新的染色体;如果产生的染色体可行,则接受它作为种群的一名成员,经过有限次抽样后,得到scale个可行的染色体方(0),j=1,2,…,M,^xj(0)的染色体编码为订(0),并记为u(0)=(v1(0),…,vchN(0)). 1.3计算各个染色体的适值4置k=0步2选择操作1采用转轮法选择下一代。. 步3杂交变异操作1事先定义杂交操作的概率pc,为确定杂交操作的父代,利=1到M重复以下过程:从[0,1]中产生随机数r,若,vpc,则选择cT(k)作为一个父代. 3.2产生两个〃,N]上的随机整数i、j,变异的结果为染色体刃(k)的第i位基因的值变为其翁位基因的值,同样将染色体的以(k)第j位基因的值变为其第i位基因的值. 3.3检验该染色体的可行性,若可行则作为变异的结果;如不可行,重复3.2直至该染色体可彳亍. 3.4事先定义变异概率pm,对经过杂交操作的中间个体进行变异操作:,如果rpm,则选择vin(k)作为变异的父代. 3.5产生一个〃,N]上的随机整数i,及随机地产生数0或1,记为b,变异的结果为染色体vi〃(k)的第i位基因的值变为b. 3.6检验该染色体的可行性,若可行则作为变异的结果:如不可行,重复3.5直至该染色体可行. 7计算新个体的适应值,并把它们同时放回,和步2选择操作中剩余的个体一起构成新一代种群u(k+1)={v1(k+1),v2(k+1),,vM(k+1)}. 步4终止检验如果达到最大进化代数morge〃则终止演化,否则置k:=k+1,转步2. 4、程序流程图 输出结果文件 3 M output.txt 输出结果 结束/ 程序流程图5、程序代码1)主程序代码: KnapsacksProblem.cpp文件#includeGAonKP.h#includeiostreamusingnamespacestd;voidmain(){ FILE*fp;〃种群规模〃背包允许最大财宝质量〃杂交概率〃变异概率CGAonKP 〃种群规模 〃背包允许最大财宝质量 〃杂交概率 〃变异概率 doubleMaxWeight; doublepc; doublepm; intmaxgen;//最大进化代数 charfilename[256]; cout遗传算法解决背包问题程序使用说明:endl; cout”1、该背包问题采用遗传算法endl; cout”2、-1编码的方法,其中代表选中所对应的物品,代表不选中该物品endl; cout3、背包允许最带重量,种群规模(解空间大小),; cout杂交概率,变异概率,最大进化代数需自己给; cout定,程序会提示输入endl; cout”4、程序提供一个输入示例endl; cout5、输入文件可加单行或多行注释endl; cout例如:#添加单行注释内容#endl; cout例如:#添加多行注释内容”endl; cout添加多行注释内容#endl; cout6、输入文件头位置需指定物品个数为int型数据。物品重量,和物品价值为double型endl; cout7、程序运行结果会输出到output.txt文件中endl; coutendl; coutendl; cout如果你想使用示例文件进行演示请输入Yendl; cout如果你想使用示例文件进行演示请输入Nendl; cinfilename; if(filename[0]==Y) {if(!(fp=fopen(example.txt”,r))){cout请确认example.txt是否背删除了!endl;}cout演示文件中example.txt的输入参数:endl;cout背包允许最带重量:endl;cout种群规模:endl;cout

文档评论(0)

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

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

1亿VIP精品文档

相关文档