TSP问题算法分析报告.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文档。上传文档
查看更多
实用标准文档 文案大全 算法第二次大作业 TSP问题算法分析 021251班 王昱 问题描述 “TSP问题”常被称为“旅行商问题”,是指一名推销员要拜访多个地点时,如何找到在拜访每个地点一次后再回到起点的最短路径。 TSP问题在本实验中的具体化:从A城市出发,到达每个城市并且一个城市只允许访问一次,最后又回到原来的城市,寻找一条最短距离的路径。 算法描述 2.1分支界限法 2.1.1 算法思想 分支限界法常以广度优先或以最小耗费(最大效益)优先的方式搜索问题的解空间树。 在分支限界法中,每一个活结点只有一次机会成为扩展结点。活结点一旦成为扩展结点,就一次性产生其所有儿子结点。在这些儿子结点中,导致不可行解或导致非最优解的儿子结点被舍弃,其余儿子结点被加入活结点表中。 此后,从活结点表中取下一结点成为当前扩展结点,并重复上述结点扩展过程。这个过程一直持续到找到所需的解或活结点表为空时为止。 2.1.2 算法设计说明 设求解最大化问题,解向量为X=(x1,…,xn),xi的取值范围为Si,|Si|=ri。在使用分支限界搜索问题的解空间树时,先根据限界函数估算目标函数的界[down, up],然后从根结点出发,扩展根结点的r1个孩子结点,从而构成分量x1的r1种可能的取值方式。 对这r1个孩子结点分别估算可能的目标函数bound(x1),其含义:以该结点为根的子树所有可能的取值不大于bound(x1),即: bound(x1)≥bound(x1,x2)≥…≥ bound(x1,…,xn) 若某孩子结点的目标函数值超出目标函数的下界,则将该孩子结点丢弃;否则,将该孩子结点保存在待处理结点表PT中。 再取PT表中目标函数极大值结点作为扩展的根结点,重复上述。 直到一个叶子结点时的可行解X=(x1,…,xn),及目标函数值bound(x1,…,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 = 未走的城市数×目前的最小距离; F = G + H ; 计算ff表里每个节点的F值,F值最小的节点作为活路径,把它加到bestpath中。 算法代码 3.1分支界限法 #include stdio.h #include malloc.h #define NoEdge 1000 struct MinHeapNode { int lcost; //子树费用的下界 int cc; //当前费用 int rcost; //x[s:n-1]中顶点最小出边费用和 int s; //根节点到当前节点的路径为x[0:s] int *x; //需要进一步搜索的顶点是//x[s+1:n-1] struct MinHeapNode *next; }; int n; //图G的顶点数 int **a; //图G的邻接矩阵 //int NoEdge; //图G的无边标记 int cc; //当前费用 int bestc; //当前最小费用 MinHeapNode* head = 0; /*堆头*/ MinHeapNode* lq = 0; /*堆第一个元素*/ MinHeapNode

文档评论(0)

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

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

1亿VIP精品文档

相关文档