旅行商问题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
旅行商问题
旅行商问题(Traveling Saleman Problem,TSP)又译为、,简称为,是最基本的路线问题,该问题是在寻求单一旅行者由起点出发,通过所有给定的需求点之后,最后再回到原点的最小路径成本。
最早的旅行商问题的数学规划是由Dantzig(1959)等人提出。
目录
1简介
“旅行商问题”常被称为“”,是指一名推销员要拜访多个地点时,如何找到在拜访每个地
点一次后再回到起点的最短路径。
规则虽然简单,但在地点数目增多后求解却极为复杂。
以42个地点为例,如果要列举所有路径后再确定最佳行程,那么总路径数量之大,几乎难以计算出来。
多年来全球数学家绞尽脑汁,试图找到一个高效的TSP问题在物流中的
描述是对应一个物流配送公司,欲将n个客户的订货沿最短路线全部送到。
如何确定最短路线。
TSP问题最简单的求解方法是。
它的解是多维的、多局部极值的、趋于无穷大的复杂解的空间,搜索空间是n个点的所有排列的集合,大小为(n-1)。
可以形象地把看成是一个无穷大的丘陵地带,各山峰或山谷的高度即是问题的极值。
求解TSP,则是在此不能穷尽的丘陵地带中攀登以达到山顶或谷底的过程。
2研究历史
旅行商问题字面上的理解是:有一个推销员,要到n个城市推销商品,他要找出一个包含所有n个城市的具有最短路程的环路。
TSP的历史很久,最早的描述是1759年欧拉研究的骑士周游问题,即对于棋盘中的64个方格,走访64个方格一次且仅一次,并且最终返回到起始点。
TSP由RAND公司于1948年引入,该公司的声誉以及线性规划这一新方法的出现使得TSP成为一个知名且流行的问题。
3问题解法
旅行推销员的问题,我们称之为巡行(Tour),此种问题属于的问题,1、途程建构法(Tour Construction Procedures)
从中产生一个近似最佳解的途径,有以下几种解法:
2、途程改善法(Tour Improvement Procedure)
先给定一个可行途程,然后进行改善,一直到不能改善为止。
有以下几种解法:
1)如果成本降低(距离减少),则取代之,直到无法改善为止,K通常为2或3。
3、合成启发法(Composite Procedure)
有以下几种解法1)起始解求解+2-Opt:起始解求解+3-Opt:
4解法思路
旅行推销员的问题,我们称之为巡行(Tour),此种问题属于(NP-Complete),所以旅行商问题大多集中在启发式解法。
Bodin(1983)等人将旅行推销员问题的启发式解法分成三种:
途程建构法
从距离矩阵中产生一个近似最佳解的途径,有以下几种解法:如近邻点法(Nearest Neighbor Procedure):一开始以寻找离场站最近的需求点为起始路线的第一个顾客,此后寻找离最后加入路线的顾客最近的需求点1、,直到最后。
2、节省法(Clark and Wright Saving):以服务每一个节点为起始解,根据三角不等式两边之和大于第三边之性质,其起始状况为每服务一个顾客后便回场站,而后计算路线间合并节省量,将节省量以降序排序而依次合并路线,直到最后。
3、插入法(Insertion procedures):如今插入法、最省、随意插入法、最远插入法、最大角度插入法等。
途程改善法
先给定一个可行途程,然后进行改善,一直到不能改善为止。
有以下几种解法:
1、K-Opt(2/3 Opt):把尚未加入路径的K条节线暂时取代如今路径中K条节线,并计算其成本(或距离),如果成本降低(距离减少),则取代之,直到无法改善为止,K 通常为2或3。
2、Or-Opt:在相同路径上相邻的需求点,将之和本身或其它路径交换且仍保持路径方向性,合成启发法
先由途程建构法产生起始途程,然后再使用途程改善法去寻求最佳解,又称为两段解法(two phase method)。
有以下几种解法:
1、起始解求解+2-Opt:以途程建构法建立一个起始的解,再用2-Opt的方式改善途程,直到不能改善为止。
2、起始解求解+3-Opt:以途程建构法建立一个起始的解,再用3-Opt的方式改善途程,直到不能改善为止。
5研究进展
2010年10月25日,一项最新研究说,在花丛中飞来飞去的小蜜蜂显示出了轻易破解“旅行商问题”的能力,而这是一个吸引全世界数学家研究多年的大问题,如能理解蜜蜂的解决方式,将有助于人们改善交
通规划和物流等领域的工作。
英国伦敦大学皇家学院等机构研究人员报告说,小蜜蜂显示出了轻而易举破解这个问题的能力。
他们利用人工控制的假花进行了实验,结果显示,不管怎样改变花的位置,蜜蜂在稍加探索后,很快就可以找到在不同花朵间飞行的最短路径。
这是首次发现能解决这个问题的动物,研究报告即将发表在《美国博物学家》杂志上。
进行研究的奈杰尔·雷恩博士说,蜜蜂每天都要在蜂巢和花朵间飞来飞去,为了采蜜而在不同花朵间飞行是一件很耗精力的事情,因此实际上蜜蜂每天都在解决“旅行商问题”。
尽管蜜蜂的大脑只有草籽那么大,也没有电脑的帮助,但它已经进化出了一套很好的解决方案,如果能理解蜜蜂怎样做到这一点,对人类的生产、生活将有很大帮助。
据介绍,“旅行商问题”的应用领域包括:如何规划最合理高效的道路交通,以减少拥堵;如何更好地规划物流,以减少运营成本;在互联网环境中如何更好地设置节点,以更好地让信息流动等。
[1]
6问题分析
旅行商问题要从图G的所有周游路线中求取最小成本的周游路线,而从初始点出发的周游路线一共有(n-1)!条,即等于除初始结点外的n-1个结点的排列数,因此旅行商问题是一个问题。
排列问题比子集合的选择问题通常要难于求解得多,这是因为n个物体有n!种排列,只有个子集合(n!>O( ))。
通过枚举(n-1)!条周游路线,从中找出一条具有最小成本的周游路线的,其计算时间显然为O(n!)。
思想:程序中采用。
(采用隐式和显式两种形式)
的特点是算法简单,但运算量大,当问题的规模变大,循环的阶数越大,执行的速度越慢。
如果枚举范围太大(一般以不超过两百万次为限),在时间上就难以承受。
在解决旅行商问题时,以顶点1为起点和终点,然后求{2…N}的一个全排列,使路程1→{2…N}的一个全排列→1上所有边的权(代价)之和最小。
所有可能解由(2,3,4,…,N)的不同排列决定。
为便于讨论,介绍一些关于的术语。
在下面分析回溯法和时都直接或间接用到树。
在树中的每一个结点确定所求问题的一个问题状态(problem state)。
由根结点到其它结点的所有路径则确定了这个问题的(state space)。
解状态(solution states)表示一些问题状态S,对于这些问题状态,由根到S的那条路径确定了这解空间中的一个元组。
答案状态(answer states)表示一些解状态S,对于这些解状态而言,由根到S的这条路径确定了这问题的一个解(即,它满足约束条件)。
解空间的称为树(state space tree)。
对于旅行商问题,一旦设想出一种状态树,那么就可以先系统地生成问题状态,接着确定这些问题状态中的哪些状态是解状态,最后确定哪些解状态是答案状态,从而将问题解出。
为了生成问题状态,采用两种根本不同的方法。
如果已生成一个结点而它的所有儿子结点还没有全部生成,则这个结点叫做活结点。
当前正在生成其儿子结点的活结点叫E-结点。
不再进一步扩展或者其儿子结点已全部生成的生成结点就是死结点。
在生成问题状态的两种方法中,都要用一张活结点表。
在第一种方法中,当前的E-结点R一旦生成一个新的儿子C,这个儿子结点就变成一个新的E-结点,当完全检测了子树C之后,R结点就再次成为E-结点。
这相当与问题状态的深度优先生成。
在第二种状态生成方法中,一个E-结点一直保持到死结点为止。
这两种方法中,将用限界去杀死还没有全部生成其儿子结点的那些活结点。
如果旅行商问题要求找出全部解,则要生成所有的答案结点。
使用限界函数的深度优先结点生成方法称为回溯法。
E-结点一直保持到死为止的状态生成方法称为。
回溯法思想
为了应用回溯法,所要求的解必须能表示成一个n- 元组(x1,…,Xn),其中x1是取自某个有穷集Si。
通常,所求解的问题需要求取一个使某一规范P(x1,…,Xn)取极大值(或取极小值或满足该规范函数条件)的向量。
假定集合Si的大小是mi,于是就有m=m1m2…Mn个n-元组可能满足函数P。
所谓硬性处理是构造这m个n-元组并逐一测试它们是否满足P,从而找出该问题的所有。
而回溯法的基本思想是,不断地用修改过的函数Pi(x1,…Xi)(即限界函数)去测试正在构造中的n-元组的部分向量(x1,…,Xi),看其是否可能导致。
如果判定(x1,…,Xi)不可能导致最优解,那么就可能要测试的后n-i个的向量一概略去。
因此回溯法作的次数比硬性处理作的测试次数(m次)要少得多。
用回溯法求解的旅行商问题,即在的基础上多了一个,约束条件可以分为两种类型:显示约束和约束。
思想:本题采用FIFO分支限界法。
如前所述,限界法是在生成当前E-结点全部儿子之后再生成其它活结点的儿子,且用限界函数帮助避免生成不包含答案结点子树的的检索方法。
在总的原则下,根据对状态控件树中结点检索的次序的不同又将分支限界设计策路分为数种不同的检索方法。
在求解旅行商问题时,程序中采用FIFO检索(First In First Out),它的活结点表采用一张先进先出表(即队列)。
可以看出,在两个方面加速了算法的搜索速度,一是选择要扩展的节点时,总是选择选择一个最小成本的结点,尽可能早的进入最有可能成为最优解的分支;二是扩展节点的过程中,舍弃导致不可行解或导致非最优解的子结点。
贪心法思想
贪心法是一种改进了的分级处理方法。
它首先旅行商问题描述,选取一种度量标准。
然后按这种度量标准对n个输入城市排序,并按序一次输入一个城市。
如果这个输入和当前已构成在这种量度意义下的部分加在一起不能产生一个,则不把这个城市加入到这部分解中。
这种能够得到某种量度意义下的最优解的分级处理方法成为贪心方法。
获得最优路径的贪心法应一条边一条边地构造这棵树。
根据某种量度来选择将要计入的下一条边。
最简单的量度标准是选择使得迄今为止计入的那些边的成本的和有最小增量的那条边。