运筹学课件4.8 中国邮递员问题
- 格式:ppt
- 大小:80.00 KB
- 文档页数:10
邮递员问题简介邮递员问题(Travelling Salesman Problem,TSP)是一个著名的组合优化问题,被称为计算机科学中的经典问题之一。
该问题起源于邮递员在一天内送货的最短路径问题。
邮递员需要从一个起点出发,经过所有的目标点,最后回到起点。
问题的目标是找到一条最短的路径,使得所有目标点都被访问,同时回到起点。
TSP问题涉及到组合爆炸,通常在计算上是NP难的。
问题描述给定一个有向图和一个起点,邮递员需要从起点出发经过所有的节点,最后回到起点。
每条边的权重表示从一个节点到另一个节点的距离。
找到一条最短路径,使得所有的节点都被访问且回到起点。
解决方法1. 枚举法枚举法是最简单的解决TSP问题的方法。
它通过遍历所有可能的路径,计算每条路径的总长度,并返回最短路径的长度和路径本身。
然而,由于TSP问题是NP难的,当图的规模增加时,枚举法的计算复杂度呈指数增长,很难在合理的时间内求解。
2. 动态规划法动态规划法是解决TSP问题的常用方法之一。
该方法通过将问题划分为子问题,并使用递归的方式求解。
具体而言,我们可以定义一个状态数组dp,其中dp[S][i]表示从起点到节点i,经过节点集合S中的所有节点,最后回到起点的最短路径长度。
那么,我们可以使用如下的递推关系来计算dp数组:dp[S][i] = min(dp[S-{i}][j] + dis(j, i)),其中j∈S,j≠i通过不断更新dp数组,最终可以得到从起点出发经过所有节点并回到起点的最短路径长度。
3. 遗传算法遗传算法是一种启发式优化算法,被广泛应用于解决TSP问题。
它模拟生物进化的过程,通过基因交叉、变异等操作,生成新的个体,并通过评估函数对个体进行选择。
遗传算法的优点是能够在较短的时间内找到接近最优解的解,但不能保证找到全局最优解。
4. 改进算法针对TSP问题,还有一些改进的算法,如蚁群算法、模拟退火算法、禁忌搜索等。
这些算法在不同的问题实例上可能会有更好的表现。
§4.中国邮递员问题(Chinese Postman Problem)1.问题的提出例5. 一个邮递员从邮局出发投递信件, 然后再返回邮局, 如果他必须至少一次地走过他负责投递范围内的每条街道, 街道路线如下图所示, 问选择怎样的路线才能使所走的路为最短?5 6 78问题的图论表述:在赋权G=[V, E]上找一条经每条边至少一次的权最小的圈。
1960年山东师范学院管梅谷教授首先提出此问题,并设计了一个“奇偶点表上作业法”,后来发现此法不是多项式算法,1973年,Edmonds和Johnson给出一个多项式算法。
2.哥尼斯堡七桥问题18世纪在哥尼斯堡城(今俄罗斯加里宁格勒)的普莱格尔河上有7座桥,将河中的两个岛和河岸连结,如下图所示。
城中的居民经常沿河过桥散步,于是提出了一个问题:能否一次走遍7座桥,而每座桥只许通过一次,最后仍回到起始地点。
3.Euler圈Euler圈:经图G的每条边的简单圈Euler图:具有Euler圈的图Euler图非Euler图下面讨论的图G允许有重边,且重边被认为是有区别的边。
伪Euler 圈:经图G 的每条边至少一次的圈点v 的次:与点V 关联的边的数目奇(偶)点:该点的次为奇(偶)数命题1:G 的奇点个数为偶数命题2:G 中有伪Euler 圈 ⇔ G 无奇点中国邮递员问题可表述为:在图G 中找一条权最小的伪Euler 圈。
对于邮递员来说,有些街道可能会重复走,原问题便转化为尽可能少走重复的 街道。
我们将这些重复的边组成的集合称可行集,即找最小的可行集。
命题3:E *是最小可行集 ⇔ωωμμμ()()()()*()*()e e e E E E e E E ≤∑∑∀μ∈∩∈∩\初等圈重复的边 非重复的边4.算法思路由命题1,简单图G 的奇点个数为偶数,可设为v 1 , v 2 , …, v 2k , 对每个1≤ i ≤k, 找v 2i − 1 至v 2i 的链p i ,将p i 的边重复一次。
中国邮递员问题第一篇:中国邮递员问题运筹学第六组运筹学个人心得之中国邮递员问题我们第六组做的第二次案例就是中国邮递员问题,这个问题是运筹学中的经典命题。
这个案例讲的是:在中国的六个县城,每个县城都有一个县局,县局下面设立若干个邮政所,每天邮递员的任务就是从县局出发,依次到每一个邮政所送邮件,要求每个邮政所都必须去,而且只能去一次。
这就涉及到一个路线的规划问题,怎么走才能使得邮递员走的路最少,而且能够完成任务。
在做题之前考虑了很久,真不知道从何着手,国为以前确实没有接触过这个类型的题,没有一个能够行得通的办法。
后来,我们选定了一个代表性的区域,来尝试求解,国为第六个区域的变量最多,所以就选择这个区域作为突破口。
只要第六个区域求解成功,其它五个区域便迎刃而解了。
首先,我们画了一个由第六区域的十七个点所组成的17*17矩阵,一一对应设定变量,在去除对角线的17个变量之后,我们得到272个变量。
这是一个非常庞大的变量群体,若按传统的线性规划方法求解,求解过程将会变得异常艰辛,而且以前的模板,求解工具都不能求解这么多变量。
所以我们一度陷入混乱,求解工作停滞不前。
后来老师在对这价目案例作初步的讲解的时候,提出了用运输模型来对这个问题进行求解,此话一出,真是如醍醐灌顶,酣畅极了,眼前简直豁然一亮,真想“拍案而起”。
若用运输模型求解,这个问题将会变得非常简单。
一方面由于每行的出发点只能有一个,而每列的终点也只能有一个,这样看来,邮运筹学第六组递员总是变成了一个产销平衡的运输问题,产量和销量都有是1。
这样我们就完成了求解工作,在第一次求解得出结论后,我们画了一个路线图,发现有几个两点循环,没有形成一条大通路,于是我们重新加入了两点循环约束,进行二次求解;在第二次求解完成后,我们又重新画了路线图,结果发现有四点循环于是我们又加入四点循环约束,进行第三次求解,在得到第三次求解的结果后,我们又画出了路线图,这次刚好形成了一个完整的通路,保证了邮递员每点都走到且行走的路线最合理。
中国邮路问题及解决方案中国邮递员问题一个邮递员送信,要走完他负责投递的全部街道(所有街道都是双向通行的且每条街道可以经过不止一次),完成任务后回到邮局,应按怎样的路线走,他所走的路程才会最短呢?解决方案1、图论建模由于街道是双向通行的,我们可以把它看成是赋权无向连通图,将路口模型为点,街道模型为边,街道的长度就是每条边的权值,问题转化为在图中求一条回路,使得回路的总权值最小。
1.1 最理想的情况若图中有欧拉回路,因为欧拉回路通过所有的边,因此任何一个欧拉回路即为此问题的解。
1.2 若G只有两个奇点Vi,Vj则有从Vi 到Vj 的欧拉迹,从Vj 回到Vi 则必须重复一些边,使重复边的总长度最小,转化为求从Vi 到Vj 的最短路径。
算法:1) 找出奇点Vi,Vj 之间的最短路径P;2) 令G' = G + P ;3) G'为欧拉图,G'的欧拉回路即为最优邮路。
1.3 一般情况,奇点数大于2 的时,邮路必须重复更多的边。
Edmonds算法(匈牙利算法)思想:步骤:1) 求出G所有奇点之间的最短路径和距离;2) 以G的所有奇点为结点(必为偶数),以他们之间的最短距离为节点之间边的权值,得到一个完全图G1;3) 将M中的匹配边( Vi ,Vj )写成Vi 与Vj 之间的最短路径经过的所有边集合Eij ;4) 令G' = G U { Eij | (Vi,Vj) 属于M},则G'是欧拉图,求出最优邮路。
2、具体模块实现2.1 最短路径用Dijkstra 算法计算Dijkstra 算法是一种最短路径算法,用于计算一个节点到其它所有节点的最短路径。
2.1.1 算法思想:按路径长度递增次序产生最短路径算法:把V 分成两组:1) S:已求出最短路径的顶点的集合2) V-S=T:尚未确定最短路径的顶点集合将T 中顶点按最短路径递增的次序加入到S 中,保证:1) 从源点V0到S 中各顶点的最短路径长度都不大于从V0到T中任何顶点的最短路径长度2) 每个顶点对应一个距离值S 中顶点:从V0到此顶点的最短路径长度T中顶点:从V0到此顶点的只包括S中顶点作中间顶点的最短路径长度2.1.2 求最短路径步骤1)初始时令S={V0},T={ 其余顶点},T 中顶点对应的距离值若存在<V0,Vi> ,d(V0,Vi) 为<V0,Vi>弧上的权值;若不存在<V0,Vi> ,d(V0,Vi) 为∝2)从T 中选取一个其距离值为最小的顶点W且不在S中,加入S3) 对S 中顶点的距离值进行修改:若加进W作中间顶点,从V0到Vi 的距离值缩短,则修改此距离值;重复上述步骤2、3,直到S 中包含所有顶点,即W=Vi为2.2 图的连通性测试检测用户输入的图是否是连通图,不是的话没办法求解,提醒用户重新输入。
中国邮递员问题解法中国邮递员问题是一个著名的组合优化问题,实际上是一个旅行商问题(Traveling Salesman Problem,TSP)的变种。
问题描述:给定一个城市集合和城市之间的距离矩阵,求解一个最短的邮递员路径,使邮递员能够从出发城市出发,经过每个城市恰好一次,最后回到出发城市。
解法:1.暴力搜索暴力搜索是最简单直观的解法。
遍历所有可能的路径,计算每个路径的总距离,最后选择最短的路径。
这种解法的时间复杂度为O(n!),随着城市数量的增加而急剧增加,效率非常低,只适用于小规模问题。
2.动态规划动态规划是一个更高效的解法。
使用一个二维数组dp[i][j]表示从城市i出发经过城市集合j的最短路径长度,其中j是一个二进制数,表示哪些城市已经访问过。
动态规划的转移方程为:dp[i][j] = min{dp[k][j XOR (1 << k)] + distance[i][k]},其中k表示已经访问的最后一个城市。
利用这个递推关系,可以逐步计算出dp[0][1<<n-1],即从城市0出发经过所有城市的最短路径。
最后,将此路径与每个城市的距离相加,得到最终的最短路径长度。
3.贪心算法贪心算法是一种更简单的解法。
首先选择一个起始城市,然后每次选择距离最近且未被访问过的城市,将其加入路径中。
重复此过程,直到访问完所有城市,然后回到起始城市。
这种解法的时间复杂度为O(n^2),但由于贪心策略的局限性(可能会出现回头或死胡同),所以得到的解并不一定是最优解。
以上是三种常用的解决中国邮递员问题的方法,具体可以根据实际情况选择合适的算法进行求解。
中国邮递员问题引言H T T P ://W W W .588K U .C O M /P P Tu 中国邮递员问题是由山东师范大学管梅谷同志1960年首先提出的。
u 该问题涉及著名的的哥尼斯堡(Königsberg)七桥问题。
u 这是数学中为数不多的几个以“中国”命名的问题或定理之一。
u 七桥问题是图论和拓扑学的起源。
引言1哥尼斯堡七桥问题2欧拉图及判定定理3Fleury算法4中国邮递员问题5奇偶点图上作业法6理论根据(选讲)哥尼斯堡(Königsberg)今称加里宁格勒,建城于1255年,是位于波罗的海海岸的俄罗斯海港城市与加里宁格勒州的首府。
加里宁格勒州位于波兰北方、立陶宛西南,原为德国东普鲁士一部分,现为俄罗斯的外飞地。
图1 加里宁格勒图2 哥尼斯堡七桥示意图有一条普雷格尔(Pregel)河流经哥尼斯堡,河上有七个桥。
一个散步者能否从某处出发走遍七个桥且每个桥只走一次,最后回到出发点?哥尼斯堡七桥问题大数学家欧拉在1736年解决了这个问题。
欧拉Euler(1707-1783)莱昂哈德·欧拉(Leonhard Euler,1707年4月15日-1783年9月18日)u瑞士数学家和物理学家,近代数学先驱之一。
u欧拉是18世纪数学界最杰出的人物之一。
u欧拉是科学史上最多产的一位杰出的数学家,据统计他那不倦的一生,共写下了886本书籍和论文。
u30岁左右右眼几乎完全失明,60岁左右左眼又几乎完全失明。
u在1775年,他平均每周就完成一篇数学论文。
u1783年9月18日于俄国彼得堡去逝。
n 将上图中A,B,C和D这四个区域各看成一个顶点,两区域之间有一个桥相连,就将相应的两个顶点连一条边,得到一个图。
AB CD图3 七桥问题对应图欧拉Euler(1707-1783)的走法为一个欧拉通路。
n如果进一步该走法还回到出发点,则称之为欧拉环游(回路)。
n具有欧拉环游的图称之为欧拉图。
中国邮递员问题的求解实例前面已经讲过,对于欧拉图,可以直接用Fleury算法找出一条欧拉巡回路线;对于半欧拉图,可以先求出奇点u和v之间的最短路径P,令G =G P,贝U G *为欧拉图,然后用Fleury算法来确定一个G *的欧拉巡回,它就是G的最优巡回。
当G有2n个奇点(n>1),可以用Edmonds算法解决,步骤如下:(1) 用Floyd算法求出所有奇点之间的最短路径和距离矩阵。
(2) 用匈牙利法或0-1规划法求出所有奇点之间的最佳配对。
(3) 在原图上添加最佳配对所包含的两两顶点之间的最短路得到欧拉图G *。
⑷用Fleury算法确定一个G *的欧拉巡回,这就是G的最优巡回。
以上步骤的关键是找出2n个奇点的最佳配对,举例如下。
例图3是某区街道示意图,各边的长度数据如下表所示。
现在需要对每条街道找最优巡回,需要先求26个奇点的最佳配对。
先用Floyd算法求出所有42个顶点之间的最短路距离和路径。
程序如下:E=[1 2 10261 4 402........ 注:每一行代表一条边(两个顶点和边长),此处省略59行40 39 198];for i=1:42for j=1:42if j==ia(i,j)=0; elsea(i,j)=inf; end end endfor k=1:62 i=E(k,1);j=E(k,2);a(i,j)=E(k,3);a(j,i)=E(k,3); end[D,R]=floyd(a);图3某区街道示意图然后求26个奇点的最优配对,这可以用Lin go 求解,编写程序如下:MODEL: SETS:4U12°26"30 O3539 40413*27 21 4128* 3338仆2934O114251015• 1724,25201922 23 32313637dot/2,4,5,6,8,9,10,11,12,13,14,15,17,18,19,20,22,24,25,26,28,29,30,36,40,41/;LINKS(dot,dot)| &2 # GT # & 1:C,X;ENDSETSDATA:C=1319 1065 651 650 939 1228 1463 1500 1213 617 895 1590 1709 1377 1033 1112 1652 1761 1853 1418 1832 2124 2151 2479 1687254 668 1173 1462 1751 198 181 402 1140 1418 2113 453 601 945 1635 2175 2284 597 1941 2355 868 1463 1498 2104414 919 1208 1497 1732 435 148 886 1164 1859 679 347 691 1381 1921 2030 823 1687 2101 1094 1689 1724 1850505 794 1083 1318 849 562 472 750 1445 1058 726 382 967 1507 1616 1202 1273 1687 1473 2005 2103 1541289 578 813 1354 1067 471 245 940 1563 1231 887 462 1002 1111 1707 768 1182 1978 2005 2333 1541 289 524 1643 1356 760 534 651 1852 1520 1176 504 828 886 1996 594 1008 2267 2197 2525 1733235 1932 1645 1049 823 362 2141 1809 1465 793 706 597 2285 883 890 2556 2486 2814 20222167 1880 1284 1058 163 2376 2044 1700 1028 507 398 2520 1105 691 2766 2658 2986 2194306 1321 1599 2294 272 505 849 1571 2111 2220 416 1877 2291 687 1282 1317 20081034 1312 2007 531 199 543 1265 1805 1914 675 1571 1985 946 1541 1576 1702360 1411 1203 871 527 577 1117 1226 1347 883 1297 1618 1534 1862 10701101 1563 1231 887 217 757 866 1707 523 937 1978 1894 2222 14302282 1950 1606 884 344 235 2426 942 528 2603 2495 2823 2031332 676 1398 1938 2047 144 1704 2118 415 1010 1045 1824344 1066 1606 1715 476 1372 1786 747 1342 1377 1503722 1262 1371 820 1028 1442 1091 1623 1721 1159540 649 1542 306 720 1813 1729 2057 1265109 2082 598 184 **** **** 2479 16872191 707 293 2368 2260 2588 17961848 2262 271 866 901 1680414 1711 1603 1931 11392075 1967 2295 1503595 630 1409360 832792;ENDDATA图4 26个奇点的最优配对MIN=@SUM(LINKS:C *X);@FOR(LINKS:@BIN(X));@FOR(dot(l):@SUM(LINKS(J,K)| J #EQ# I #OR# K #EQ# I:X(J,K))=1);END运行以上程序,得到最优配对结果为:2与6、4与12、5与13、8与9、10与11、14 与15、17 与25、18 与26、19 与20、22 与28、24 与29、30 与36、40 与41。