Tsp问题的几种算法的_第1页
Tsp问题的几种算法的_第2页
Tsp问题的几种算法的_第3页
Tsp问题的几种算法的_第4页
Tsp问题的几种算法的_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、摘要本文分析比较了tsp问题的动态规划算法,分支界限法,近似等算法。分析了旅行商问题的时间度特点,针对启发式算法求解旅行商问题中存在的一些问题提出了改进算法。此算法将群体分为若干小子集,并用启发式交叉算子,以较好利用父代个体的有效信息,达到快速收敛的效果,实验表明此算法能提高寻优速度,解得质量也有所提高。关键词: 旅行商问题 TSP Abstractthis paper analyzed the time complexity of traveling salesman problem,then put forward some imprivement towards the genetic

2、algorithm for solving this problen: divding the population into some small parent individual well.so it can quickly get into convergence, the experimental result indicates the impwoved algorithm can accelerate the apeed of finding solution and improve the precision.Keywords traveling salesman proble

3、m; genetic algorithm; subset; henristic crossover operator目录1、 摘要-12、 Abstract-13、 Tsp问题的提法-24、 回溯法求Tsp问题-35、 分支限界法求Tsp问题-76、 近似算法求解Tsp问题-107、 动态规划算法解Tsp问题-12引言tsp问题刚提出时,不少人都认为很简单。后来,人们实践中才逐步认识到,这个问题只是叙述简单,易于为人所理解而其计算复杂性却是问题的输入规模的指数函数,属于NP完全问题。Tsp问题的实现思想已被应用到交通,管理等很多领域所以有必要探讨Tsp问题的算法。这里给出Tsp问题的动态规划算

4、法,回溯算法,分支限界法,近似算法,和改进的启发式算法,以及它们之间的分析比较。 正文:旅行售货员问题的提法是:某售货员要到若干城市去推销商品,已知各城市之间的路程(或旅费)。他要选定一条从驻地出发,经过每个城市一遍,最后回到驻地的路线,使总的路程(或旅费)最小。 设G=(V,E) 是一个带权图。图中各边的费用(权)为正数。图中的一条周游路线是包括V中的每个顶点在内的一条回路。周游路线的费用是这条路线上所有边的费用之和。旅行售货员问题要在图G中找到费用最小的周游路线。1234 图1-1: 回溯法:(1)回溯法的基本思想:确定了解空间的组织结构后,回溯法从开始结点(根结点)出发,以深度优先方式搜

5、索整个解空间。这个开始结点成为活结点,同时也成为当前的扩展结点处,搜索向纵深方向移至一个新结点。这个新结点即成为新的活结点,并为当前扩展结点。如果在当前的扩展结点处不能再向纵深方向移动,则当前扩展结点就成为死结点。此时,应往回移动(回溯)至最近的一个活结点处,并使这个活结点成为当前的扩展结点。回溯法以这种工作方式递归地在解空间中搜索,直至找到所要求的解或解空间中已无活结点时为止。回溯法搜索解空间树时,通常采用两种则略避免无效搜索,提高回溯法的搜索效率。其一是用约束函数在扩展结点处减去不满足约束的子数;其二是用界限函数剪去得不到最优解的子数。这两类函数统称为剪支函数。 (2)回溯法解tsp问题:

6、旅行售货员问题的解空间可以组织成一棵树,从书的根结点到任一叶结点的路径定义了图G的一条周游路线。图5-3是当n=4时解空间树的示例。其中从根结点A到叶结点L的路径上边的标号组成一条周游路线1,2,3,4,1。而从根结点A到叶结点O的路径则表示周游路线1,3,4,2,1.图G的每一条周游路线都恰好对应于解空间树中一条从根结点到叶结点的路径。因此,解空间树中叶结点个数为【(n-1)!】。图1-2:A QPONMLKJIHGFECDB 12 4 3 4 2 4 2 34 3 4 2 3 2对于图1-2的图G,用回溯法找最小费用路线时,从解空间树的根结点A出发,搜索至B,C,F,L.在叶结点L处记录找

7、到的周游路线1,2,3,4,1,该周游路线的费用为59.从叶结点L返回至最近活结点F处。由于F处已没有可扩展结点。算法又返回到结点C处。结点C成为新扩展结点,由新扩展结点,算法再移至结点G后又移至结点M,得到周游路线1,2,4,3,1,其费用为66.这个费用不比已有周游路线1,2,3,4,1的费用更小。因此舍弃该结点。算法又依次返回至结点G,C,B。从结点B,算法继续搜索至结点D,H,N。在叶结点N处,相应的周游路线1,23,2,4,1的费用为25.它是当前找到的最好的一条周游路线。从结点N算法返回至结点H,D,然后在从结点D开始D开始继续向纵深搜索至结点O。以此方法算法继续搜索遍整个解空间,

8、最终得到最小费用周游路线1,3,2,4,1.在递归算法Backtrack中,当i=n时,当前扩展结点是排列数的叶结点的父结点。此时算法检测图G是否存在一条从顶点x【n-1到顶点xn的边和一条从顶点xn到顶点1的边如果这两条边都存在,则找到一条旅行售货员回路。此时算法还需要判断这条回路的费用是否优于已找到的当前最优回路的费用bustc。如果是则必须更新当前最优值bestc和当前最优解bestx。当i<n时,当前扩展结点位于排列树的第i-1层。图G中存在从顶点xi-1到顶点xi的边时,xl,:i构成图G的一条路径,且当x;:i的费用小于当前最优值时算法进入排列树的第i层,否则将剪去相应的子数

9、。算法中用变量cc记录当前路径x【l:i的费用。解旅行售货员问题的回溯算法可描述如下:Template<class Type>Class Traveling friend Type tSP(int * *,int,int,Type); private:void Backtrack(int i); int n, *x, *bestx;Type* *a, cc, bestx;Type * *a, cc, bestc, NoEdge;Template<class Type>Void Traveling<Type>:Backtrack(int i)If(i=n)If

10、(axn-1)xn!=NoEdge&&axn1!=N0Edge&&(cc+axn-1xn+axn1<best|bestc=NoEdge)for(int j=1;j<=n;j+)bestxj=xj;bestc=cc+axn-1xn+axn1;elsefor(int j=i;j<=n;j+)if(axi-1xj!=NoEdge&&(cc+axi-1xj<bestc|bestc=NoEdge)Swap(xi,xj;cc+=axi-1xi;Backtrack(i+10;cc-=axi-1xi;swap(xi,xj);分支界限法:(

11、1)分支界限法的基本思想:分支界限法以广度优先或以最小耗费(最大效益)优势的方式搜索问题的解空间树。问题的解空间树是表示问题解空间的一棵有序树,常见的有子集树和排列树。在搜索问题的解空间树时,分支界限法与回溯法的主要区别在于他们对当前扩展结点所采用的扩展方式不同。在分支界限法中,每一个活结点只有一次机会成为扩展结点。活结点一旦成为扩展结点,就一次性产生其所有儿子结点。在这些儿子结点中,导致不可行解或导致非最优解得儿子结点被舍弃,其余儿子结点被加入活结点表中。此后,从活结点表中取下一结点成为当前扩展结点,并重复上述结点扩展过程。这个过程一直持续到找到所需的解或活结点表为空时为止。(2)从活结点表

12、中选择下一个扩展结点的不同方式导致不同的分支界限法。最常用的有两种方式1.方式队列式(FIFO)分支界限法 队列式分支界限法将活结点组织成一个队列,并按队列的先进先出原则选择下一个结点为当前扩展结点。2优先队列式分支界限法优先队列式的分支界限法将活结点表组织成一个优先队列,并按优先队列中规定的结点优先级选取优先级最高的下一个结点成为当前扩展结点。(3)分支法解tsp问题:考察4城市旅行售货员的例子,如图5-3所示,该问题的解空间树是一棵排列树。解次问题的队列式分支界限法以排列树中结点B作为初始扩展结点。此时,活结点队列为空。由于从图G的顶点1到顶点2,3和4均有边相连,所以结点B的儿子结点C,

13、D,E均为可行结点,它们被加入到活结点队列中,并舍去当前扩展结点B。当前活结点队列中的队首结点C成为下一个扩展结点。由于图G的顶点2到顶点3和4有边相连,故结点C的2个儿子结点F和G均为可行结点,从而被加入到活结点队列中。接下来,结点D和结点E相继成为扩展结点而被扩展。此时活结点队列中的结点依次是F,G,H,I,J,K。算法描述:算法开始时创建一个最小堆,用于表示活结点优先队列。堆中每个结点的子树费用的下界lcost值是优先队列的优先级。接着算法计算出图中每个顶点的最小费用出边并用minout记录。如果所给的有向图中某个顶点没有出边,则该图不可能有回路,算法即告结束。如果每个顶点都有出边,则根

14、据计算出的minout作算法初始化。 算法的while循环体完成对排列树内部结点的扩展。对于当前扩展结点,算法分2种情况进行处理:1、首先考虑s=n-2的情形,此时当前扩展结点是排列树中某个叶结点的父结点。如果该叶结点相应一条可行回路且费用小于当前最小费用,则将该叶结点插入到优先队列中,否则舍去该叶结点。2、当s<n-2时,算法依次产生当前扩展结点的所有儿子结点。由于当前扩展结点所相应的路径是x0:s,其可行儿子结点是从剩余顶点xs+1:n-1中选取的顶点xi,且(xs,xi)是所给有向图G中的一条边。对于当前扩展结点的每一个可行儿子结点,计算出其前缀(x0:s,xi)的费用cc和相应的

15、下界lcost。当lcost<bestc时,将这个可行儿子结点插入到活结点优先队列中。 算法中while循环的终止条件是排列树的一个叶结点成为当前扩展结点。当s=n-1时,已找到的回路前缀是x0:n-1,它已包含图G的所有n个顶点。因此,当s=n-1时,相应的扩展结点表示一个叶结点。此时该叶结点所相应的回路的费用等于cc和lcost的值。剩余的活结点的lcost值不小于已找到的回路的费用。它们都不可能导致费用更小的回路。因此已找到的叶结点所相应的回路是一个最小费用旅行售货员回路,算法可以结束。 算法结束时返回找到的最小费用,相应的最优解由数组v给出。 近似算法: 近似算法解旅行售货员问题

16、:问题描述:给定一个完全无向图G=(V,E),其每一边(u,v)E有一非负整数费用c(u,v)。要找出G的最小费用哈密顿回路。旅行售货员问题的一些特殊性质:比如,费用函数c往往具有三角不等式性质,即对任意的3个顶点u,v,wV,有:c(u,w)c(u,v)+c(v,w)。当图G中的顶点就是平面上的点,任意2顶点间的费用就是这2点间的欧氏距离时,费用函数c就具有三角不等式性质。对于给定的无向图G,可以利用找图G的最小生成树的算法设计找近似最优的旅行售货员回路的算法。 void approxTSP (Graph g) (1)选择g的任一顶点r; (2)用Prim算法找出带权图g的一棵以r为根的最小

17、生成树T; (3)前序遍历树T得到的顶点表L; (4)将r加到表L的末尾,按表L中顶点次序组成回路H,作为计算结果返回; 当费用函数满足三角不等式时,算法找出的旅行售货员回路的费用不会超过最优旅行售货员回路费用的2倍。 在费用函数不一定满足三角不等式的一般情况下,不存在具有常数性能比的解TSP问题的多项式时间近似算法,除非P=NP。换句话说,若PNP,则对任意常数>1,不存在性能比为的解旅行售货员问题的多项式时间近似算法。(b)表示找到的最小生成树T;(c)表示对T作前序遍历的次序;(d)表示L产生的哈密顿回路H;(e)是G的一个最小费用旅行售货员回路。 动态规划解tsp问题:由于货郎担

18、问题经过的路线是一条经过所有城市的闭合回路,因此从哪一点出发是无所谓的,因此不妨设从城市1出发。问题的动态规划模型构造如下:阶段k:已经历过的城市个数,包括当前所在的城市。k=1, 2, , n , n+1,k=1表示出发时位于起点,k=n+1表示结束时回到终点。状态变量:xk=(i, Sk),其中i表示当前所在的城市,Sk表示尚未访问过的城市的集合。很明显 S1=2,3,n,Sn=Sn+1=F其中F表示空集。并且有 xn=(i, F) i=2,3,n, xn+1=(1, F)决策变量:dk=( i , j ),其中i为当前所在的城市,j为下一站将要到达的城市。状态转移方程:若当前的状态为 x

19、k=( i ,Sk)采取的决策为 dk=( i , j )则下一步到达的状态为 xk+1=T(xk,dk)=( j ,Sk j)阶段指标: vk(xk,dk)=Cij最优指标函数: fk(xk)=fk(i,Sk) 表示从城市i出发,经过Sk中每个城市一次且仅一次,最后返回城市1的最短距离。终端条件: fn+1(xn+1)=fn+1(1, F)=0对于如图3.7.1所示的一个五个城市的货郎担问题,求解步骤如下:对于k=5,有 f5(i,F)=minCij+f6(1,F)=Ci1 i=2,3,4,5 d5?(i,1)f5(I,F)的值列表如下:i f5(i, F)2 23 74 25 5对于k=4

20、,有 f4(i, S4)=minCij+f5(j,S5) j?S4 f4(i,S4)的值列表如下:(i,S4) j Cij S5 Cij+f5(j,S5) f4(i,S4) j*(2,3) 3 3 F 3+f5(3,F)=3+7=10 10 3(2,4) 4 5 F 5+f5(4,F)=5+2=7 7 4(2,5) 5 1 F 1+f5(5,F)=1+5=6 6 5(3,2) 2 3 F 3+f5(2,F)=3+2=5 5 2(3,4) 4 4 F 4+f5(4,F)=4+2=6 6 4(3,5) 5 6 F 6+f5(5,F)=6+5=11 11 5(4,2) 2 5 F 5+f5(2,F)

21、=5+2=7 7 2(4,3) 3 4 F 4+f5(3,F)=4+7=11 11 3(4,5) 5 3 F 3+f5(5,F)=3+5=8 8 5(5,2) 2 1 F 1+f5(2,F)=1+2=3 3 2(5,3) 3 6 F 6+f5(3,F)=6+7=13 13 3(5,4) 4 3 F 3+f5(4,F)=3+2=5 5 4对于k=3,有 f3(i,S3)=minCij+f4(j,S4) j?S3f3(i,S3)的值列表如下:(i,S3) j Cij S4 Cij+f4(j,S4) f3(i,S3) j*(2,3,4) 34 35 43 3+f4(3,4)=3+6=9*5+f4(4

22、,3)=5+11=16 9 3(2,3,5) 35 31 53 3+f4(3,5)=3+11=14*1+f4(5,3)=1+13=14* 14 3,5(2,4,5) 45 51 54 5+f4(4,5)=5+8=131+f4(5,4)=1+5=6* 6 5(3,2,4) 24 34 42 3+f4(2,4)=3+7=10*4+f4(4,2)=4+7=11 10 2(3,2,5) 25 36 52 3+f4(2,5)=3+6=9*6+f4(5,2)=6+3=9* 9 2,5(3,4,5) 45 46 54 4+f4(4,5)=4+8=126+f4(5,4)=6+5=11* 11 5(4,2,3)

23、 23 54 32 5+f4(2,3)=5+10=154+f4(3,2)=4+5=9* 9 3(4,2,5) 25 53 52 5+f4(2,5)=5+6=113+f4(5,2)=3+3=6* 6 5(4,3,5) 35 43 53 4+f4(3,5)=4+11=15*3+f4(5,3)=3+13=16 15 3(5,2,3) 23 16 32 1+f4(2,3)=1+10=11*6+f4(3,2)=6+5=11* 11 2,3(5,2,4) 24 13 42 1+f4(2,4)=1+7=8*3+f4(4,2)=3+7=10 8 2(5,3,4) 34 63 43 6+f4(3,4)=6+6=

24、12*3+f4(4,3)=3+11=14 12 3对于k=2有(i,S2) j Cij S3 Cij+f3(j,S3) f2(i,S2) j*(2,3,4,5) 345 351 4,53,53,4 3+f3(3,4,5)=3+11=145+f3(4,3,5)=5+15=201+f3(5,3,4)=1+12=13* 13 5(3,2,4,5) 245 346 4,53,52,4 3+f3(2,4,5)=3+6=9*4+f3(4,2,5)=4+6=106+f3(5,2,4)=6+8=14 9 2(4,2,3,5) 235 543 3,52,52,3 5+f3(2,3,5)=5+14=194+f3(

25、3,2,5)=4+9=13*3+f3(5,2,3)=3+11=14 13 3(5,2,3,4) 234 163 3,42,42,3 1+f3(2,3,4)=1+9=10*6+f3(3,2,4)=6+10=163+f3(4,2,3)=3+9=12 10 2对于k=1,有 f1(1,S1)=minC1j+f2(j,S2)f1(1,S1)的值列表如下:(1,S1) j Cij S2 Cij+f2(j,S2) f1(1,S1) j*(1,2,3,4,5) 2345 2725 3,4,52,4,52,3,52,3,4 2+f2(2,3,4,5)=2+13=15*7+f2(3,2,4,5)=7+9=162

26、+f2(4,2,3,5)=2+13=15*5+f2(5,2,3,4)=5+10=15* 15 2,4,5由状态x1=(1,2,3,4,5)开始回朔,得到 (1,2,3,4,5) j*=2 j*=5 j*=4 (2,3,4,5) (5,2,3,4) (42,3,5)j*=5 j*=2 j*=3 (5,3,4) (2,3,4) (3,2,5) j*=3 j*=3 j*=2 j*=5 (3,4) (3,4) (2,5) (5,2)j*=4 j*=4 j*=4 j*=2 (4,) (4, ) (5, ) (2, )即得到以下四条回路:(1) ààààà

27、(2) ààààà(3) ààààà(4) ààààà其中(1)和(4)是同一条回路,(2)和(3)是同一条回路。容易验证,两条回路的长度都是15。动态规划方法并不是解决TSP问题的一个好方法,因其占用空间和时间复杂度均较大。改进的启发式算法:本算法将群体分成若干小子集,再进行杂交变异操作,算法运行到一定阶段,当群体中最优个体的适应值之差小于某个给定的初值时,表明解空间的搜索已经基本完成,终止遗传迭代。算法采用最自然的路径编码表示方法,适应值得大

28、小为个体所代表的路径长度的倒数。1、分级对于给定规模的群体,按适应值大小对个体进行排序,分成若干小子集,然后在各个小子集的后代个体按适应值比列选择一定数目的个体组成新的群体,并且把父体也放在一起竞争,避免最优个体的遗失。这样适应值相似的个体进行交叉变异,优秀的个体之间可以进行局部最优解的开采。而且对每个小子集的后代以适应值比列选择,而不是把整个群体放在一起进行选择,这样可以让群体保持一定得多样性,不易陷入早熟状态。 2、交叉算子交叉算子的设计是遗产法的核心。一个好的交叉算子应该能从父体中继承好的遗传性状,逐步提高子代的适应度。同时交叉算子应能有效地搜索解空间,避免算法的过快收敛。 启发式交叉算子如下:已知两个父体,随机选择一个城市c作为起点,在两父体中分别找到c的右边城市,并选取两个中距c较近的那个结点c'作为子代中c的下一个结点,且把城市结点c从父体中删除,然后对c'再寻找离它较近的下一个结点,直到完成整路径为止,同理,另一子代产生方

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论