- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验6近似算法的应用-旅行商问题(TSP)
实验6. 近似算法的应用-旅行商问题(TSP)
实验内容
本实验要求基于算法设计与分析的一般过程(即待求解问题的描述、算法设计、算法描述、算法正确性证明、算法分析、算法实现与测试),通过近似算法在实际问题求解实践,加深理解其基本原理和思想以及求解步骤。求解的问题为TSP。
作为挑战:可以考虑近似算法在其他NPC问题(如顶点覆盖问题等)上的应用。
实验目的
理解采用回溯法或分支限界法求解TSP的核心思想以及求解过程(确定解的形式及解空间组织,分析出搜索过程中的剪枝函数即约束函数与限界函数);
从算法分析与设计的角度,对TSP问题的基于回溯法或分支限界法求解具有更进一步的理解;
掌握采用近似算法求解NPC问题的方法,并分析算法的近似比。
环境要求
对于环境没有特别要求。对于算法实现,可以自由选择C, C++, Java,甚至于其他程序设计语言。
实验步骤
步骤1:理解问题,给出问题的描述。
步骤2:算法设计,包括策略与数据结构的选择;
步骤3:描述算法。希望采用源代码以外的形式,如伪代码或流程图等;
步骤4:算法的正确性(近似比)证明。需要这个环节,在理解的基础上对算法的正确性给予证明(这里可以略去);
步骤5:算法复杂性分析,包括时间复杂性和空间复杂性;
步骤6:算法实现与测试。附上代码或以附件的形式提交,同时贴上算法运行结果截图;
步骤7:技术上、分析过程中等各种心得体会与备忘,需要言之有物。
说明:步骤1-6在“实验结果”一节中描述,步骤7在“实验总结”一节中描述。
实验结果
问题描述
某售货员要到若干城市去推销商品,已知各城市之间的路程(或旅费)。他要选定一条从驻地出发,经过每个城市一次,最后回到驻地的路线,使总的路程(或总旅费)最小。
约束条件:
a[i][j] != ∞
限界条件:cl bestlcl+rl bestl(优化
cl: 当前已走的路径长度;
rl: 剩余路径长度的下界;
bestl: 当前最短路径长度。
分支限界法类似于回溯法,也是一种在问题的解空间树中搜索问题解的算法,常以宽度优先或以最小耗费(最大效益)优先的方式搜索问题的解空间树。
搜索思想:
首先将根结点加入活结点表(用于存放活结点的数据结构);
接着从活结点表中取出根结点,使其成为当前扩展结点,一次性生成其所有孩子结点,判断孩子结点是舍弃还是保留,舍弃那些导致不可行解或导致非最优解的孩子结点,其余的被保留在活结点表中。再从活结点表中取出一个活结点作为当前扩展结点,重复上述扩展过程,一直持续到找到所需的解或活结点表为空时为止。
由此可见,每一个活结点最多只有一次机会成为扩展结点。
两种分支限界法(活结点表的实现方法):
队列式分支限界(Queue BB, QBB)法:
按照先进先出 (FIFO) 的原则选取下一个结点作为当前扩展结点。
优先队列式分支限界(Priority Queue BB, PQBB)法:
按照规定的优先级选取队列中优先级最高的结点作为当前扩展结点。
优先队列一般用二叉堆来实现:
最大堆实现最大优先队列,体现最大效益优先;
最小堆实现最小优先队列,体现最小耗费优先。
问题的分析:
解题步骤:
问题的解空间定义:(x1,x2,x3,x4)
解空间的组织结构:深度为4的排列树。
搜索过程中的剪枝函数:
约束条件:a[i][j] != ∞
限界条件:cl bestl
cl+rl bestl(优化)
cl: 当前已走的路径长度;
rl: 剩余路径长度的下界;
bestl: 当前最短路径长度。
以BFS或以最小费用(最大效益)优先方式搜索解空间:
搜索过程中用剪枝函数(隐式约束)避免无效搜索:
约束函数:在扩展结点处剪去得不到可行解的子树;
限界函数:在扩展结点处剪去得不到最优解的子树。
如使用优先队列式分支限界法,则必须确定优先级。
算法设计
队列式分支限界法求解TSP:
解空间定义、解空间的组织结构、剪枝函数(约束条件与限界条件)都与采用回溯法时的相同。
解空间的搜索方式采用宽度优先,这一点与采用回溯法时的深度优先不同:
针对当前扩展结点,一次性生成其孩子结点,并判断这些孩子结点是否满足约束条件和限界条件。如果满足,则将该当前扩展结点的孩子结点插入到活结点表(末尾);反之,舍弃。
从活结点表中选取待扩展结点时,以先入先出 (FIFO) 的原则。
搜索过程直到找到问题的解或活结点表为空时为止。
4实例演示搜索过程
5.(1)TSP的队列式分支限界法伪代码:
Q-BB-TSP(a)
x[1]=1,i=1,cl=0,bestl=∞,
文档评论(0)