3 旅行商问题3.1 旅行商问题概述3.1.1 旅行商问题的定义和数学模型① 定义旅行商问题(Traveling Salesman Problem ,简记TSP)是组合数学中一个古老而又困难的问题,它易于描述但至今尚未彻底解决,现己归入所谓的NP 完全问题类,经典提法为:有一货物推销员要去若干个城市推销货物,从城市1出发,经其余各城市一次,然后回到城市1,问选择怎样的行走路线,才能使总行程最短(各城市间距离为己知)。
该问题在图论的意义下就是所谓的最小Hamilton 圈问题,由于在许多领域中都有着广泛的应用,因而寻找其实际而有效的算法就显得颇为重要了。
遗憾的是,计算复杂性理论给予我们的结论却是,这种可能性尚属未知。
若设城市数目为n 时,那么组合路径数则为(n-1)!。
很显然,当城市数目不多时要找到最短距离的路线并不难,但随着城市数目的不断增大,组合路线数将呈指数级数规律急剧增长,以至达到无法计算的地步,这就是所谓的“组合爆炸问题”。
假设现在城市的数目增为20个,组合路径数则为(20-1)! ,如此庞大的组合数目,若计算机以每秒检索1000万条路线的速度计算,也需要花上386年的时间。
尽管现在计算机的计算速度大大提高,而且已有一些指数级的算法可精确地求解旅行商问题,但随着它们在大规模问题上的组合爆炸,人们退而求其次,转向寻找近似算法或启发式算法,经过几十年的努力,取得了一定的进展。
② 数学模型设(,)G V E =为赋权图,{1,2,}V n ="为顶点集,E 为边集,各顶点间距离为ij c ,已知(0,,,)ij ij c c i j V >=+∞∈,并设则旅行商问题的数学模型可写成如下的线性规划形式:ij ij i jMinZ c x ≠=∑1,(,)0,ij i j x ⎧=⎨⎩边在最优路线上其它,1,1,.1,{0,1},ij j i ij i jij i j S ij x i V x j V s t x K K V x i j V ≠≠∈⎧=∈⎪⎪=∈⎪⎨⎪≤−⊂⎪⎪∈∈⎩∑∑∑这里,K 为V 的所有非空子集,K 为集合K 中所含图G 的顶点个数。
前两个约束意味着对每个顶点而言,仅有一条边进出,后一约束则保证了没有任何子回路解的产生。
于是,满足上述约束的解构成了一条Hamilton 回路。
除此之外,模型还有其它一些等价的书写形式。
3.1.2 旅行商问题的分类旅行商问题按不同的分类方法可以分成为不同的种类。
① 据距离矩阵划分当,(,)ij ji c c i j V =∈时,问题被称为对称型旅行商问题。
反之,称为非对称型旅行商问题。
非对称型旅行商问题可以化为对称型旅行商问题,用对称型的方法求解。
当对所有,,[1,]i j k n ∈,有不等式ij jk ik c c c +≥成立时,问题被称为是满足三角形不等式的,简写成三角型旅行商问题。
三角形不等式在很多情况下是自动满足的,如:只要距离矩阵是由一度量矩阵导出的即可。
另一类自动满足的是闭包矩阵,ij c ⎡⎤⎣⎦是的[]ij c 闭包,是指在{1,2,}n "的完全图中,ij c 为边(,)i j 距离,则ij c 是i j →之最短路长。
一般而言,现实生活中的大多数问题都满足三角形不等式,它是旅行商问题中的一种主要类型。
个别不满足的,也可转换成其闭包问题,它们的旅行商问题解是等价的。
当ij c 是欧氏距离时,则称为欧氏距离的旅行商问题。
显然此类问题既是对称型旅行商问题也是三角型旅行商问题。
② 根据顶点的分布形态划分有均匀分布的(Uniform Points) 、聚集分布(Clustered Points)、随机距离矩阵(Random Matrices),此外还有旅行商问题库(TSPLI B)中的实际范例。
前三种都是人工模拟产生的旅行商问题,主要用于测试算法对不同分布形态的旅行商问题的表现,并计算算法的时间函数。
后一种实际范例才是人们关注的重点。
③ 根据距离矩阵在数据文件中的存储方式划分和来源划分MATRIX 型:距离矩阵直接给出。
EUC_ 2D 或CEIL_ 2D :给出顶点坐标,距离矩阵需计算才能得到。
CEO :给出顶点坐标,距离矩阵需计算才能得到,坐标来源于地理坐标。
3.1.3 旅行商问题的扩展旅行商问题的研究经过几十年发展,取得了一系列的成果。
除了经典的旅行商问题外,目前已引申出许多扩展形式,常见的有:① 最小哈密尔顿链的问题这是起点和终点不同的旅行商问题,前面提到的许多算法都可略作修改,用于求解该类问题。
② 瓶颈问题目标函数为{,,}ij ij Max c x ""且,,i j i j G ≠∈的旅行商问题。
③ 非对称旅行商问题距离矩阵非对称的旅行商问题。
④ 多人旅行商问题由多人完成环游的旅行商问题。
该问题可转换成等价的单人问题,只需将点1改为m 个虚拟点(1',2',')m "其间用边连接,距离为充分大,ij M c ∑∑;各虚拟点'i 到j 的距离'1i j j c c =,对新问题求解其旅行商问题后,从虚拟点'i 进入原网络再回到虚拟点'j 的那段路线即是m 人中某一个的环游路线。
⑤ 多目标旅行商问题若各边弧上有m 个权值,则使得哈密尔顿圈上相应的m 个目标值都尽可能小的解就称为多目标旅行商问题的(Pareto)有效解。
如实际问题中常常需要考虑:路程最短、时间最少、费用最省、风险最小等等多方面的因素。
由于多目标意义下的所谓最优解是一种“折衷解”、“非劣解”,因此,多目标旅行商问题解的含义为:假定有一哈密尔顿圈的解H ,若不存在任何其它回路解Q ,使得()(),1,2,k k Z Q Z H k m ≤=",其中至少有一个不等式严格成立(k Z 为相应的目标函数值),则H 为Pareto 解。
⑥ 依次排序问题这类问题是非对称旅行商问题,在给定的一系列顶点和距离矩阵下,寻找最短从顶点1到顶点n 哈密尔顿链,同时满足限制:某些顶点要在另一些顶点之前被连接。
⑦ 载货量受限制的选径问题给定n -1个顶点和一个仓库,已知顶点和顶点、顶点和仓库的距离。
卡车的载货量受限制,卡车每次在部分顶点和仓库之间往返,寻求一条经过所有顶点的最短路线。
一般来说,这些扩展问题都有特殊的不同于对称型旅行商问题的求解方法,但也可将它们转化成对称型旅行商问题求解。
3.1.4 研究旅行商问题的意义旅行商问题是一个NP完全问题,目前任何NP完全问题都不能用任何已知的多项式算法求解;若任何一个NP完全问题有多项式算法,则一切NP完全问题都有多项式算法。
由此,不少人猜测任何NP完全问题都没有多项式算法,但至今无人证明。
事实上,人们普遍认为,不发展全新的数学技术就证明不了这个猜想。
这样一种认识的实际意义就在于许多人相信,难计算是这样一类问题的固有性质,因此它们不可能用有效算法求解,而所有能精确求解NP完全问题的算法,在最坏情况下都需要指数级的时间。
另外,旅行商问题是一个理想化的问题,大多数对于此问题的研究都不是为了直接的实际应用,但这些研究可以经转化后用于许多现实的组合优化问题。
很自然地可以想到,旅行商问题的成果可以应用于运输和物流问题。
旅行商问题最早的应用是在上个世纪的四十年代,应用于校车路线的优化。
现在,旅行商问题在越来越多的领域得到应用。
①电路板钻孔进度的安排。
在这个应用当中,电路板上的孔代表旅行商问题中的城市,钻头从一个钻孔移动到另一个钻孔。
寻找最短路径变成了寻找最省时的钻头移动时间。
尽管目前钻机的工艺技术发展很块,但钻头的移动时间仍然是一个令人头疼的问题。
②基因测序。
Concorde是一种求解旅行商问题的程序。
美国国家卫生机构的研究人员利用这一程序来进行基因测序。
在这一应用中,局部的基区图谱作为城市,城市与城市的距离代表某张图谱与其它图谱相连的可能性。
研究人员试图寻找一种可能性最高的连接方式把这些局部的图谱合成为整张基因图谱。
③半导体的线路设计。
一家半导体生产厂家应用Concorde程序来优化半导体的线路设计,这样可以节省刻制半导体的时间,也能减少半导体电路消耗的能量。
④ 光缆的线路设计。
贝尔电话公司利用Concorde程序来设计光缆的铺设线路,同样的方法也应用于电话和电力线路的铺设当中。
⑤ 在机器人控制等其它方面,旅行商问题也有许多应用。
3.2 旅行商问题的求解3.2.1 旅行商问题的精确解法①可解特殊旅行商问题的精确算法对于旅行商问题的一些特殊情况,业已研究出一系列非常完美的结果,如:机器排序问题等。
由于可解情形的结果都是成熟的定理,因此严格来说已不属算法研究的范畴。
② 线性规划算法这是求解旅行商问题的最早的一种算法,主要是采用整数规划中的割平面法,即先求解模型中由前二个约束构成的松驰线性规划问题,然后通过增加不等式约束产生割平面,逐渐收敛到最优解。
Dantzig 等人早在1954年就求解过n= 42的旅行商问题最优解。
70年代中期对于TS 多面体理论的研究,产生了一些比较有效的不等式约束,如:子回路消去不等式、梳子不等式等等。
目前,常用的方法是先用近似算法来求得近似解,再将此近似解作为下限,用线性规划方法来精确求解或证明此下限为最优解。
③ 动态规划算法由于动态规划算法的时间复杂度为2(2)n O n ,空间复杂度为(2)n O n ,故除了很小规模的问题外,几乎不予采用。
④ 分支定界算法分支定界法是一种应用范围很广的搜索算法,它通过有效的约束界限来控制搜索进程,使之能向着状态空间树上有最优解的分支推进,以便尽快找出一个最优解。
该方法的关键在于约束界限的选取,不同的约束界限,可形成不同的分支定界法。
1)以分派问题为界通过求解相应的分派问题,得到旅行商问题的一个下界,以此进行分支定界搜索。
这是一种使用较多的分支定界算法。
2)以匹配问题为界通过求解相应的匹配问题,得到旅行商问题的一个下界,以此进行分支定界 搜索。
该方法适用于对称型旅行商问题。
3)以最小权1生成树问题为界通过求解相应的最小权1生成树问题,得到旅行商问题的一个下界,以此进 行分支定界搜索。
在此基础上,Held 和Karp(1970) 曾将问题加以转换,得到更紧的下界,有时甚至能将搜索树整个显示出来。
虽说分支定界法对于较大规模的问题并不十分有效,可有时却被用来求解近似解。
而且,将分支定界法与一些启发式算法相结合,常常能获得一些意外的成 功。
3.2.2 旅行商问题的近似解法由于精确式算法所能求解的问题规模非常有限,实际中使用的往往都是多项式阶数的近似算法或启发式算法。
算法的好坏用*/C C E ≤来衡量,C 为近似算法所得到的总行程,C*为最优总行程,E 为最坏情况下,近似解与最优解的总行程之比所不超过的上界值。