网站大量收购闲置独家精品文档,联系QQ:2885784924

遗传算法解决旅行商问题(TSP).pdfVIP

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

遗遗传传算算法法解解决决旅旅⾏⾏商商问问题题((TSP))

这次的⽂章是以⼀份报告的形式贴上来,代只是简单实现,难免有漏洞,⽐如循环输⼊的控制条件,说是要求输⼊1,只要输⼊⾮0就⾏。希望会帮到以

后的同学(*^-^*)

⼀、问题描述

旅⾏商问题(Traveling-SalesmanProblem,TSP)。设有n个互相可直达的城市,某推销商准备从其中的A城出发,周游各城市⼀遍,最后⼜回到A城。要求

为该旅⾏商规划⼀条最短的旅⾏路线。

⼆、⽬的

为了解决旅⾏商问题,⽤了遗传算法,模拟染⾊体的遗传过程,进⾏求解。

为了直观的更有⽐较性的观察到程序的运⾏效果,我这⾥程序⾥给定了10个城市的坐标,并计算出其任意两个的欧⽒距离,10个点的位置排布见图1。程

序的理想最优距离为20.485281,即绕三⾓形⼀圈,⽽且路程起点不固定,因为只要满⾜点围着三⾓形⼀圈即为最短距离,最优解。所以问题转换为,求

图中10个点的不重复点的闭环序列的距离最⼩值。

图1

三、原理

1、内部变量介绍

程序总体围绕了遗传算法的三个主要步骤:选择--复制,交叉,变异。给定了10个种群,即10条染⾊体,每条染⾊体都是除⾸位外不重复的点组成,⾸尾

相同保证路线是闭合的,所以⼀条染⾊体包含11个点。

种群由⼀个结构体group表⽰,内含城市的序列inciy[11]、种群的适应度doublefi、该种群适应度占总群体适应度的⽐例doublep,和为了应⽤赌轮选择

机制的积累概率doublejlleigailv。

程序还包括⼀个始终记录所有种群中的最优解的城市序列数组groupbes[11],记录最优解的适应度,即最⼤适应度的变量doublegroupbesfi。

种群的最⼤繁衍代数设置为1000,⽤户能够输⼊繁衍代数,但必须在1000以内。10个点的不同排列序列有10!种,即3628800中排列可能,其中各代之

间可能产⽣重复,不同种群间也会出现重复,学⽣觉得1000左右应该能验证程序的性能了,就定为1000。

2、运⾏思想介绍

(a)采⽤整数编的⽅式,标记0到9号城市。

(b)选择--复制:

利⽤赌轮选择机制,分10次从10个种群中挑选出10个染⾊体进⾏复制。

每次随机⽣成⼀个0到1之内的⼩数,因为适应度越⾼的染⾊体的积累概率区间越⼤,所以适应度越⾼的染⾊体被选择的次数会越多,满⾜了优胜劣汰的原

则。

选择--复制完后,要重新计算每个种群的适应度等信息,与已经保存的最优染⾊体进⾏⽐较,如果⽐已经存在的适应度还要⾼就进⾏最优染⾊体的更新。

如果最优染⾊体没有更新,则说明新成的最⼤适应度种群不如以前的好,则在新⽣成的种群中找到适应度最低的,⽤最优染⾊体提换掉。

(c)交叉:

每⼀代的繁衍都让10个种群中相邻的两个种群进⾏染⾊体交叉,交叉率为1,即0号种群和1号种群交叉,2号种群和3号种群交叉,以此类推。交叉段是

由2个随机数决定,采⽤部分映射交叉,直接交换由随机数产⽣的染⾊体⽚段。

交叉完后因为要满⾜点的不重复,所以要进⾏消除重复的操作。原理是⽤⼀个数组保留交叉过来的染⾊体⽚段,删除染⾊体上已经交换的⽚段,在剩下的

点中消除与新交换⽚段中重复的点,然后将原染⾊体剩下的点都向前移集中在头部,再将保存在数组中的新交换过来的染⾊体插⼊到头部之后,在以上过

程中⽤⼀个数组记录已经存在的点。接下来将没有⽤的点顺序插到染⾊体尾部,到此已经⽣成了新的染⾊体。

交叉完后要重新计算每个种群的适应度等信息,与已经保存的最优染⾊体进⾏⽐较,如果⽐已经存在的适应度还要⾼就进⾏最优染⾊体的更新。如果最优

染⾊体没有更新,则说明新成的最⼤适应度种群不如以前的好,则在新⽣成的种群中找到适应度最低的,⽤最优染⾊体提换掉。

(d)变异:

因为变异在⾃然界并不是每次都会发⽣,所有每次要尽⾏变异前都⽣成⼀个0到9内的随机整数,如果⼤于3就进⾏变异,否则不变异,总体变异率为0.6。

因为这个染⾊体和⾃然中的每⼀段都对应⼀个功能的染⾊体不⼀样,染⾊体越是按数的相邻⼤⼩排列,距离会越短,所以变异就起了很⼤作⽤,起到调整

点的顺序的作⽤,所以变异率要⼤⼀点。

如果要变异,则变异3次。每次⽣成2个随机数,决定要在哪个种群变异哪⼀个位置。⽐如挑选了第⼆条染⾊体,变异第3个位置,则将染⾊体的3号位和6

号位互换,即互换位置和为9。

(e)输出:

输出⽤户程序得到的最优解的城市序列、路程距离、

文档评论(0)

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

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

1亿VIP精品文档

相关文档