图论与网络模型_中国邮递员问题
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Min 2( x1,8+ x8,1)+ 4( x8,7+ x7,8)+5 ( x1,2+ x2,1)+ 3( x8,9+ x9,8)+ 3( x6,7+ x7,6)+6( x2,9+ x9,2)+ 4 ( x9,6+ x6,9)+5( x3,2+ x2,3)+ 4( x9,4 + x4,9)+ 4( x5,6+ x6,5)+ 9( x3,4+ x4,3)+ 4 ( x4,5+ x5,4)
这样,寻找邮递员最优投递路线的问题就可以归结如下:
给定连通图 G(V, E),每条边 e=(Vi, Vj)至多添加 1 条新边 e'=(Vj, Vi),得到另一个连通图 G′(V,E')。
称边 eij 是从 Vi 到 Vj 的弧,边 eji 是从 Vj 到 Vi 的弧。这样,就可以把无向图理解为有向图。
欧拉把七桥问题转化成连通网络能否一笔画的问题。 一笔画问题:从某一点开始画画,笔不离纸,各条线路仅画一次,最后回到原来的出发 点。 下右图,仅有两个奇点,可以一笔画出。它是一条欧拉链。 C
v1
v3
v5
A
B
D
v2
v4
v6
无向连通图的割点(关键点)是指:删除该结点以及与其相连的边之后,无向图不再连
通,下图中割顶有:1,2,5,9。 无向连通图的桥是指:删除该边(i, j)后,点 i 和 j 不再连通,下图的桥有(1,3),(1,2),
(2)在 V0 中,每对点的距离为(用 Dijkstra 算法求): d(v1, v2)=4 d(v1, v3)=5 d(v1, v4)=2 d(v2, v3)=3 d(v2, v4)=5 d(v3, v4)=3
(3)构造完全加权图 K4,V(K4)={v1, v2, v3, v4},边的权 w (vi v j)=d( vi , v j) i≠j, 1≤i,j≤4,见
可以证明,如 G(V, E)的顶点数为 n,则每条弧上至多增加(n-1)条添加弧,即可实现各顶
点的进向弧数与出向弧数相等。
根据以上分析,对于 G(V, E)的每条弧 eij∈ E 定义一正整数变量 xi,j,表示弧 eij 上增加了 xi,j-1 条添加弧,由此形成另一个有向图 G′(V, E′)。
(i , j)∈ E '
上的权,wi,j=wj,i。
这样,就得到中国邮递员问题的显式整数规划模型(CPP)如下
∑ min
wi, j xi,j
(i , j)∈ E '
{ ∑ ∑ xj.i−
xi, j=0 i=1,2,⋯,n
j
wk.baidu.com
i
s .t . (j,i)∈E'
(i , j)∈ E '
xi, j+ x j,i≥1
满足:对 ∀ ei, j∈ E ′ xi , j+ x j, i≥1
(2)图 G′(V,E')不含奇点,即对于任意一个点 Vi,有进向弧,必有与之等量的出向弧
∑ ∑ x j. i− xi, j=0 :
j≠i
j≠i
∑ 这一问题的目标是使得 G′(V,E')的总权最小,即 min
w i , j xi , j ,其中,wi,j 为边 ei,j
传统的中国邮递员问题线性规划解
中国邮递员问题可以概述如下:一个邮递员每次送信要从其所在的邮局出发,走遍所负 责投递范围内的每条街道,完成送信任务后回到原来的邮局,应该选择怎样的路线行走,才 能使得所走的总路程数最小。
给定一个连通图 G(V, E),其中: V={V1,V2,…,Vn}是点的集合。 E={eij=(Vi,Vj);点 Vi 与 Vj 之间边是 eij}是边的集合, 每个边 eij∈ E 上有非负权 w(eij)=w(Vi,Vj)。
应用整数规划求解工具 QSB,求解得到这一问题的最优解, 如:
x1,2= x2,1=x1,8= x8,1= x8,7= x9,8= x7,6= x2,9= x3,2= x6,9= x4,3= x9,4= x5,6= x6,5= x5,4= x4,5=1 其他 xi,j=0,最小权重为 68。假定邮局在顶点 V1,则有如下最优投递线路: e1,2→ e2,9→ e9,8→ e8,7→ e7,6→ e6,5→ e5,6 → e6,9→ e9,4→ e4,5→ e5,4→ e4,3→ e3,2→ e2,1→ e1,8→ e8,1 注意,这一问题的最优投递路线不惟一。同理可以求得邮局从任何一顶点出发时的最优 投递路线。
图论中的图是由点和点与点之间的线所组成的。 通常,我们把点与点之间不带箭头的线叫做边,带箭头的线叫做弧。
如果边 [ vi, v j]∈ E ,E 是边集合,那么称 vi, vj 是边的端点,或者称 vi, vj 是相邻的。 如果一个图 G 中,一条边的两个端点是相同的,那么称为这条边是环。 如果两个端点之间有两条以上的边,那么称为它们为多重边。 一个无环,无多重边的图标为简单图。 一个无环,有多重边的图标图称为多重图。
(1)求 G 中奇点集合 V 0={v | v ∈V (G) , d (v )=1(mod 2)} 。 (2)对 V0 中的每个点对 u,v,用 Dijkstra 算法求距离 d (u , v ) 。 (3)作加权完全图 K|V0| , V ( K|V0|)=V 0 , K|V0| 中边 uv 之权为 d (u , v ) 。 (4)求加权图 K|V0| 的总权最小的完备匹配 M。 (5)在 G 中求 M 中同一边之端点间的最短轨。 (6)把 G 中在(5)求得的每条最短轨之边变成同权倍边,得欧拉图 G'。 (7)用 FE 算法求 G'的一条欧拉回路 W',W'即为中国邮路。
图5 (7)在欧拉图 5 上用 FE 算法求得一条欧拉回路。
W =v1u1 v 4 v3 u4 v2 v 1 u2 u3 v2 v 4 u3 u5 v 3 u4 u1 v 4 u6 u5u2u6 u1 v1
W 即为所求的中国邮路(不唯一)。 上述解法具有代表性,一般的中国邮路解法步骤总结如下: 设 G 是连通加权图。
究其失败的原因,是因为用了 v1v3 边之后,在未用过的边们导出的子图上,v2v3 是桥, 提前过桥 v2v3 的后果是断了去左侧 v3 的后路。
这里的教训是,非必要时,不要通过未用过的边的导出子图的桥,根据这一思路, Fleury 设计了如下求欧拉回路的有效算法,代号 FE 算法: (1)任取 v0∈V (G ) ,令 W0=v0。V(G)是点集合。 (2)设欧拉链 W i=v0 v1 v2⋯vi 已选定,则从 E(G)-E(W)中选一条边 ei+1,使得 ei+1 与 vi 相关 联,且非必要时,ei+1 不要选 G-E(W)的桥。
● 管梅谷首先提出的方法是奇偶点图上作业法(1962 年) ● Edmonds,Johnson(1973 年)给出有效算法。
Edmonds-Johnson 算法
有奇点的中国邮路问题,这种情形下,有的边要通过至少两次。下图中,边旁写的是权。
图3
(1)在图 3 中,奇点集合为
V 0={v1 , v2 , v3, v4}
求 E',使 G′不含奇点,且总权 ∑ w(e ′) 为最小。 e' ∈E '
设定 0-1 整数变量 xij。借助变量 xij (i=1,2,…,n;j=1,2,…,n)来定义中国邮递员问题的约束 如下:
(1)添加边至多 1 条,且通过每边至少 1 次,E'中对应所有边的 xij 的值(称为 E’的值系)
图 4:
图4 (4)求(3)中 K4 的最佳(总权最小)的完备匹配 M,M={v1v4, v2v3} (5)在 G 中求得 v1 和 v4 间最短轨 P(v1, v4)=v1u1v4;v2 与 v3 间最短轨 P(v2, v3)=v2u4v3
(6)在 G 中沿 P(v1, v4)与 P(v2, v3)把边变成同权“倍边”,见图 5
简单链:链中所含的边均不相同。 初等链:链中所含的点均不相同,也称通路。 回路:若 v0≠vn,则称该链为开链,否则称为闭链或回路。 圈:除起点和终点外,链中所含的点均不相同的回路。 连通图:图中任意两点之间均至少有一条通路,否则称作不连通图。
设有一个连通多重图 G,如果在 G 中存在一条链,经过 G 的每条边一次且仅一次,那么 这条链叫做欧拉链。
问题是要确定 G 的一个子图(是一个圈),它通过每条边至少 1 次,而且使得该圈的总权 (即图上各边的加权和)最小。
从图论知识知,若 G 不含有奇点(与奇点相连的边的个数为奇数),则 G 有圈,它通过 每边 1 次且仅仅 1 次,所以这个圈就是所要求的圈。
若 G 有奇点,G 的任意一边的添加边至多为 1 条。在 Vi 与 Vj 之间添加新边,并令新边的 权都等于原边(Vi, Vj)的权。
∑ w(e )=min
e∈W
如果 G 是欧拉图,则所求的 W 就是一条欧拉回路。 由于这个问题是我国菅梅谷同志于 1962 年首先提出来的,因此国际上长称它为中国邮递 员问题。
求无奇点连通图的中国邮递员问题的算法(Fleury 算法)
就是求欧拉回路。算法思想:“过河拆桥,尽量不走独木桥”。 例如,下图是欧拉图,设从 v1 开始,寻找一条欧拉回路,如果开始三步是 v1v3v2v1,那 么就失败了,因为回到 v1 之后发现左侧的 v3 上的边还没有用过,而 v1 的关联边已全用过, 不能从 v1 再去通过左侧那些未用过的边了(注意每边只能用一次)。
广义的中国邮递员问题
上节所述的邮递员问题,假定了邮递员投递范围内的每条街道的上行和下行是无差别的, 而在实际信件的投递过程中可能不是这样的,如遇到单行线街道、街道有一定的坡度、街道 两边不能单行中同时投递等。这样的邮递员问题称之为广义的中国邮递员问题。这一广义的 中国邮递员问题可以抽象为一个有向图问题。
如在 G 中存在一个简单圈,经过 G 的每条边一次,那么这个圈叫做欧拉圈。 一个图如果有欧拉圈,那么这个图叫做欧拉图。欧拉图就是从一顶点出发,每边恰好通 过一次能回到出发点的那种图,即不重复地行遍所有边再回到出发点。
比如哥尼斯堡七桥问题,欧拉把它抽象成具有四个项点,并且都是奇点的形状。如下左 图。很明显,一个漫步者不可能不重复的走完七座桥,并最终回到原出发地。
∀(i , j)∈ E '
xi, j=0 或 1
∀(i , j)∈ E '
这一模型不仅可以用于求解中国邮递员问题,而且可以确定相应的最优投递路线:如
xij=1,即表示邮递员应该从 Vi 沿着边 eij 到 Vj。
例,考虑图 1 所示的中国邮递员问题:
图 1 传统中国邮递员问题 根据前面的模型讨论,这一邮递员问题对应的整数规划模型如下:
类似于前面所述的邮递员问题(称为传统的中国邮递员问题),广义的邮递员问题可以叙 述为:给定一个连通有向图 G(V, E),每个弧 e 上有非负权 w(e),需要寻找 G 的一个回路, 它通过每个弧至少 1 次,且总权为最小。
对于广义的中国邮递员问题,传统问题中添加至多 1 条弧已经不再可行,即需要多条添 加弧,才能使 G 的任一点的进向弧数与出向弧数相同,从而使 G′(V, E′)存在欧拉回路。在此, 称弧 eij=(Vi, Vj)是顶点 Vj 的进向弧,同时也是顶点 Vi 的出向弧。
(3)反复执行(2),直至每条边 e∈E (G) 皆入选为止。E(G)是边集合。 FE 算法是有效算法,其时间复杂度是 Ο (|E (G)|) 。 用 FE 算法在上图中可选得欧拉回路:
W =v1 v3 v4 v5 v6 v7 v3 v5 v7 v4 v6 v3 v2 v1
求有奇点连通图的中国邮递员问题的算法
(5,6),(9,7)。
邮递员问题
一位邮递员从邮局选好邮件去投递,然后返回邮局,他必须经过由他负责投递的每条街 道至少一次,为这位邮递员设计一条投递线路,使其耗时最少。
用图的语言来描述,就是给定一个连通图 G,在每条边 e 上有一个非负的权 w(e),要寻 求一个回路 W,经过 G 的每条边至少一次,并且回路 W 的总权数最小。
以点 v 为端点的边的个数称为点 v 的度, 度为零的点称为弧立点。 度为 1 的点称为悬挂点。悬挂点的边称为悬挂边。 度为奇数的点称为奇点。 度为偶数的点称为偶点。
链:由两两相邻的点及其相关联的边构成的点边序列;如: v0 , e1, v1 , e2 , v2 ,⋯⋯, vn−1, en , vn ;v0, vn 分别为链的起点和终点。vi 代表点,ei 代表边。