旅行商问题的求解方法动态规划法和贪心法算法论文-毕业论文.doc
《旅行商问题的求解方法动态规划法和贪心法算法论文-毕业论文.doc》由会员分享,可在线阅读,更多相关《旅行商问题的求解方法动态规划法和贪心法算法论文-毕业论文.doc(18页珍藏版)》请在咨信网上搜索。
1、旅行商问题的求解方法摘要旅行商问题(TSP问题)时是指旅行家要旅行n个城市然后回到出发城市,要求各个城市经历且仅经历一次,并要求所走的路程最短。该问题又称为货郎担问题、邮递员问题、售货员问题,是图问题中最广为人知的问题。本文主要介绍用蛮力法、动态规划法、贪心法和分支限界法求解TSP问题,其中重点讨论动态规划法和贪心法,并给出相应求解程序。关键字:旅行商问题;动态规划法;贪心法;分支限界法1引言旅行商问题(TSP)是组合优化问题中典型的NP-完全问题,是许多领域内复杂工程优化问题的抽象形式。研究TSP的求解方法对解决复杂工程优化问题具有重要的参考价值。关于TSP的完全有效的算法目前尚未找到,这促
2、使人们长期以来不断地探索并积累了大量的算法。归纳起来,目前主要算法可分成传统优化算法和现代优化算法。在传统优化算法中又可分为:最优解算法和近似方法。最优解算法虽然可以得到精确解,但计算时间无法忍受,因此就产生了各种近似方法,这些近似算法虽然可以较快地求得接近最优解的可行解,但其接近最优解的程度不能令人满意。但限于所学知识和时间限制,本文重点只讨论传统优化算法中的动态规划法、贪心法和分支限界法,并对蛮力法做简单介绍,用以比较。2正文2.1蛮力法2.1.1蛮力法的设计思想蛮力法所依赖的基本技术是扫描技术,即采用一定的策略将待求解问题的所有元素一次处理一次,从而找出问题的解。一次处理所有元素的是蛮力
3、法的关键,为了避免陷入重复试探,应保证处理过的元素不再被处理。在基本的数据结构中,一次处理每个元素的方法是遍历。2.1.2算法讨论用蛮力法解决TSP问题,可以找出所有可能的旅行路线,从中选取路径长度最短的简单回路。如对于图1,我们求解过程如下:(1) 路径:1-2-3-4-1;路径长度:18;(2) 路径:1-2-4-3-1;路径长度:11;(3) 路径:1-3-2-4-1;路径长度:23;(4) 路径:1-3-4-2-1;路径长度:11;(5) 路径:1-4-2-3-1;路径长度:18;(6) 路径:1-4-3-2-1;路径长度:18;从中,我们可以知道,路径(2)和(4)路径长度最短。我们
4、还应注意到,图1中,有3对不同的路径,对每对路径来说,不同只是路径的方向,因此,可以将这个数量减半,则可能的解有(n-1)!/2个。这是一个非常大的数,随着n的增长,TSP问题的可能解也在迅速增长。如:一个10城市的TSP问题有大约有180,000个可能解。一个20城市的TSP问题有大约有60,000,000,000,000,000个可能解。 一个50城市的TSP问题有大约1062个可能解,而一个行星上也只有1021升水。因此,我们可以知道用蛮力法求解TSP问题,只能解决问题规模很小的实例。2.2动态规划法2.2.1动态规划法的设计思想动态规划法将待求解问题分解成若干个相互重叠的子问题,每个子
5、问题对应决策过程的一个阶段,一般来说,子问题的重叠关系表现在对给定问题求解的递推关系(也就是动态规划函数)中,将子问题的解求解一次并填入表中,当需要再次求解此子问题时,可以通过查表获得该子问题的解而不用再次求解,从而避免了大量重复计算。2.2.2TSP问题的动态规划函数假设从顶点i出发,令表示从顶点i出发经过中各个顶点一次且仅一次,最后回到出发点i的最短路径长度,开始时,于是,TSP问题的动态规划函数为: 2.2.3算法讨论(1)for (i=1; iN; i+) /初始化第0列 di0=ci0; (2)for (j=1; j -1; j+) for (i=1; in; i+) /依次进行第i
6、次迭代 if (子集Vj中不包含i) 对Vj中的每个元素k,计算Vm = Vj-k;dij=min(cik+dkm); (3)对V -1中的每一个元素k,计算Vm = V -1-k;d0 -1=min(c0k+dkm); (4)输出最短路径长度d0 -1;2.3.4时间复杂性和蛮力法相比,动态规划法求解TSP问题,把原来的时间复杂性是O(n!)的排列问题,转化为组合问题,从而降低了算法的时间复杂性,但它仍需要指数时间。2.3贪心法2.3.1贪心法的设计思想贪心法在解决问题的策略上目光短浅,只根据当前已有的信息就做出选择,而且一旦做出了选择,不管将来有什么结果,这个选择都不会改变。换言之,贪心法
7、并不是从整体最优考虑,它所做出的选择只是在某种意义上的局部最优。这种局部最优选择并不总能获得整体最优解,但通常能获得近似最优解。2.3.2最近邻点策略求解TSP问题贪心法求解TSP问题的贪心策略是显然的,至少有两种贪心策略是合理的:最近邻点策略和最短链接策略。本文仅重点讨论最近邻点策略及其求解过程。最近邻点策略:从任意城市出发,每次在没有到过的城市中选择距离已选择的城市中最近的一个,直到经过了所有的城市,最后回到出发城市。2.3.3算法讨论1P= ; 2V=V-u0; u=u0; /从顶点u0出发3循环直到集合P中包含n-1条边 3.1查找与顶点u邻接的最小代价边(u, v)并且v属于集合V;
8、 3.2 P=P+(u, v); 3.3 V=V-v; 3.4 u=v; /从顶点v出发继续求解2.3.4时间复杂性但需注意,用最近邻点贪心策略求解TSP问题所得的结果不一定是最优解。当图中顶点个数较多并且各边的代价值分布比较均匀时,最近邻点策略可以给出较好的近似解,不过,这个近似解以何种程度近似于最优解,却难以保证。2.4分支限界法2.4.1分支限界法的设计思想 假设求解最大化问题,解向量为,其中,的取值范围为某个有穷集合,。在使用分支限界法搜索问题的解空间树时,首先根据限界函数估算目标函数的界down, up,然后从根结点出发,扩展根结点的个孩子结点,从而构成分量的种可能的取值方式。对这个
9、孩子结点分别估算可能取得的目标函数值,其含义是以该孩子结点为根的子树所可能取得的目标函数值不大于,也就是部分解应满足: 本文本欲详细讨论该算法,但无奈在编程问题中,尚有问题有待解决,时间所限,不得已放弃。本人编程过程中所用算法思想与老师课上所教略有不同,在寻找下界时,是首先把每个结点所能到达的各个结点及其可能的路径算出来,并添加到PT表中,但最后,不知是何原因,在还有一个城市尚未加入时,PT表的添加出现了问题,思忖良久,仍未解决,时间所限,迫不得已,留待以后有时间再另行研究,本文就只给出动态规划法和贪心法的具体求解过程。3结论本文主要重点讨论了动态规划法和贪心法求解TSP问题算法,并附录给出了
10、相应程序。3.1动态规划法思想动态规划法中对于顶点元素生成的子集本文中用字符串形式存储,然后再用递归方法按照子集中元素个数从小到大开始赋值。因为后面元素个数较多的子集与前面比其元素个数少1的子集间有一定对应关系,所以用递归方式,可以简便很多。个人觉得这算本文的一大特色。另,在计算dij =min(cik+dkj-1)时,获得dkj-1的过程比较困难,运用字符串后,我们就可以首先找到指定字符,然后去掉该字符,返回剩余字符串,在与V逐个比较,找到与其相等的V中元素对应下标,此下标即为j-1;具体求解过程可参考附录源程序,有详细说明。在求解最佳路径所经过城市顺序时,本文是通过边查找dij边记录路径的
11、,这样可以省掉很多麻烦,另,路径也是采用字符串形式的数组,数组规模与存储城市间距离的c数组相同,由于很多元素均不需赋值,这样做可能会浪费内存空间,但是目前还没找到更好地求解方法。3.2贪心法思想贪心法中,由于贪心法相对动态规划法要简单很多,每次在查找最近城市时所得的顶点均为最后该法最佳路径所经过的城市编号,规模相对较小,容易确定,操作相对简单,所以本文用数组V存放最佳路径所经过的城市编号顺序相对来说方便很多。另外,本文用path整型数组存放所经路径的长度,最后相加即可得最短路径。3.3两者比较动态规划法相对贪心法来说虽然要精确些,但代码相对繁杂很多,对时间和空间要求很多,仅适用于城市数量较小的
12、情况。贪心法虽然比较简单,实现起来比较容易,但不是很精确,当图中顶点个数较多并且各边的代价值分布比较均匀时,贪心法可以给出较好的近似解,不过,这个近似解以何种程度近似于最优解,却难以保证。另外,动态规划法有一个明显的缺点,就是出发城市只能是第0个城市(城市从0开始编号),若出发城市改变,则必须以该城市为第0个城市顺序给其他城市编号,输入城市间距离。由于若出发城市任意,编码的难度大大增加,所以最后不得已放弃,但这大大地限制了程序的通用性。而对于贪心法,本文很好地避免了这个问题,一旦城市编号确定,可以从任意城市出发,这也是本文中贪心法优于动态规划法的一点。3.4优点本文程序优点,各个子函数功能分隔
13、很明显,没有大量集中在一个函数里面,而是分成了几个不同功能的小函数,这样程序可阅读性提高。另外,程序中有详细注释,程序中变量取名都是根据变量的性质和所代表的含义命名的,也相应提高了程序的可读性。对于动态规划法,城市个数可以在算法时间允许的范围内任意,于这点来说,通用性较好;对于贪心法,出发城市可以任意,城市个数也可以任意,通用性较好。4建议当城市个数较少时,用动态规划法求出最优解;当城市个数较多并且各边的代价值分布比较均匀时,贪心法可以给出较好的近似解。5参考文献(1)计算机算法分析与设计第二版,王晓东编著,电子工业出版社(2)Java语言与面向对象程序设计(第2版)印旻、王行言编著,清华大学
14、出版社(3)求解TSP算法,周康、强小利、同小军、许进,计算机工程与应用6附录6.1动态规划法6.1.1源代码package exp2;import java.util.Scanner;public class TSPDynamic String V;/顶点生成的子集,这里把每一个子集用一个字符串表示int c;/顶点间距离int d;/存放迭代结果int N; /城市个数String path;/用于存放每种选择下经过的城市static int IFINITE = 99999;/无穷大距离 表示城市自己到达自己时,距离无穷大,不作为考虑因素/构造函数public TSPDynamic()in
15、itialC();initialV1();/初始化数组c,即顶点间距离public void initialC()Scanner in = new Scanner( System.in );System.out.println(请输入城市个数: (注意根据实际情况城市个数不可小于1!)); N = in.nextInt(); if(N = 1) System.out.println(不符合要求,请认真核对!); System.exit(0);/输入错误,结束! System.out.println(请输入城市相邻城市间距离(城市从0开始编号,且出发城市为第0个城市!): );c = new i
16、ntNN;/为c分配空间for(int i = 0 ; i N ; i +)for(int j = 0 ; j (int)Math.pow(2,N-1) - 1)return;/如果全部顶点已初始化完成,则返回。if(m = 0)Vm + = ;/初始化出发顶点,即V0elseint i = m - 1;while(i = 0 & Vi.length() = len)/找与最后一个初始化的Vm-1子集内元素个数相同的集合,把指针i指向满足条件的集合i -;i +;/把指针i指向满足条件的第一个集合while(i m)int ch;/用于表示下一个即将加入子集的数字if(i = 0)ch = 0
17、;/如果i指向V中第一个元素elseString chStr = + Vi.charAt(Vi.length() - 1);/找出Vi中最后一个数字ch = Integer.parseInt(chStr);/转换成整型/比ch大而又比N-1(因为这里顶点是从0开始的)小的数字应该加在子集中while(ch N - 1)Vm + = Vi + (+ ch);i +;/对已存在的自己逐个扫描添加initialV(m,Vm - 1.length();/递归调用/判断自己Vj中是否存在指定元素,即行号iboolean exclude(int i , int j)String str = + i;/把i
18、转换成字符串if(Vj.contains(str)/System.out.println(i + i);return false;/如若存在,则返回falseelse return true;/获得子集Vj中除指定元素k外的元素,用字符串形式表示public String getSubString(int k , int j)if(Vj.length() = 1)return ;/如果子集中只有一个元素,则返回空串else if(k = 0) return Vj.substring(1,Vj.length();/如果k是第一个元素,则返回其后面的元素 else if(k = Vj.length
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 旅行 问题 求解 方法 动态 规划 贪心 算法 论文 毕业论文
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【胜****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【胜****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。