TSP问题算法分析.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文档。上传文档
查看更多
算法第二次大作业 TSP问题算法分析 021251 班 王昱 一?问题描述 “TSP问题”常被称为“旅行商问题”,是指一名推销员要拜访多个地点时,如 何找到在拜访每个地点一次后再回到起点的最短路径。 TSP问题在本实验中的具体化:从A城市出发,到达每个城市并且-?个城市只允 许访问一次,最后乂冋到原來的城市,寻找一条最短距离的路径。 算法描述 2.1分支界限法 2. 1. 1算法思想 分支限界法常以广度优先或以最小耗费(最大效益)优先的方式 搜索问题的解空间树。 在分支限界法中,每一个活结点只有一次机会成为扩展结点。活结点 一旦成为扩展结点,就一次性产生其所有儿子结点。在这些儿子结点 中,导致不可行解或导致非最优解的儿子结点被舍弃,其余儿子结点 被加入活结点表屮。 此后,从活结点表中取下一结点成为当前扩展结点,并重复上述 结点扩展过程。这个过程一直持续到找到所需的解或活结点表为空吋 为止。 2.1.2算法设计说明 设求解最大化问题,解向量为X二(xl,…,xn), xi的取值范围为 Si, |Si|=rio在使用分支限界搜索问题的解空间树时,先根据限界 函数估算目标函数的界[down, up],然后从根结点出发,扩展根结点 的rl个孩子结点,从而构成分量xl的rl种可能的取值方式。 对这rl个孩子结点分别估算可能的目标函数bound(xl),其含义: 以该结点为根的子树所有可能的取值不人于bound(xl),即: bound(xl) Abound(xl, x2) $???2 bound (xl,…,xn) 若某孩子结点的目标函数值超出目标函数的下界,则将该孩子结 点丢弃;否则,将该孩子结点保存在待处理结点表PT中。 再取PT表屮目标函数极大值结点作为扩展的根结点,重复上述。 直到一个叶子结点时的可行解X=(xl,-,xn),及口标函数值 bound(xl, ???, xn)。 2. 2 A*算法 算法思想 对于某一己到达的现行状态,如己到达图中的n节点,它是否可能成为最 佳路径上的一点的估价,应由估价函数f(n)值来决定。假设g*(n)函数值表示从 起始节点s到任意一个节点n的一条最佳路径上的实际耗散值°h*(n)函数值表 示从任意节点n到口标节点ti的最佳路径的实际耗散值。其屮ti是一个可能 的目标节点。f*(n)函数值表示从起始s,通过某一指定的n到达目标节点ti 的一条最佳路径的实际耗散值,并有f*(n)=g*(n)+h*(n)。 假设f函数是对f*函数的一种估计,并f (n)=g(n)+h(n),其中g函数 是对g*的估计,h函数是对h*的一种估计。f(n)包括两个部分,其中g(n) 表示到达n节点时,已付岀代价的估计;而h(n)表示从n节点到达口标节点ti 将要付出代价的佔计。 按f(n)=g*(n)+h*(n)的值來排序ff表的节点,f值小者优先。通常称这种算法 为A算法。在A算法的基础上,进一步限制h(n)函数,使得搜索图屮的每一个 节点n,能满足h(n)〈二h*(n)、称h函数取h*的下界。这种算法叫A*算法。 对ff里的每一个节点做评估函数F分为两部分G和H: 假设从A城市走到X城市,又走到Y城市,所以G可表示为: G = A到X的距离+ X到Y的距离; 未走的的城市数二(总城市数+1) -目前城市的层数。为什得加1,因为最后得走 回初始城市,所以总路径的城市数为总城市数+1。 H =未走的城市数X目前的最小距离; F = G + II ; 计算ff表里每个节点的F值,F值最小的节点作为活路径,把它加到bestpath 中。 三.算法代码 3.1分支界限法 #inelude stdio. h ttinclude malloc- h ^define NoEdge 1000 struct MinIleapNode { int lcost; //子树费用的下界 int cc; 〃当前费用 int rcost; //x[s:n-l]中顶点最小出边费用和 int s; //根节点到当前节点的路径为x[0:s] int *x; 〃需要进一步搜索的顶点是//x[s+l:n-l] struct MinHeapNode *next; }; int n; 〃图G的顶点数 int **a; 〃图G的邻接矩阵 //int NoEdge; //图G的无边标记 int co; 〃当前费用 int bestc; //当前最小费用 MinHeapNode* head = 0; /*堆头*/ MinHeapNode* lq = 0; /*堆第一个元素*/ MinlleapNode* fq = 0; /*堆最后一个元素*/ int DeleteMin(MinHeapNode*E) { MinHeapNode* tmp = N

文档评论(0)

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

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

1亿VIP精品文档

相关文档