图与网络
例1:最短路问题(Shortest Path Problem,SPP)
例2:公路连接问题
例3:指派问题(Assignment Problem)
例4:中国邮递员问题(Chinese Postman Problem,CPP)
例5:旅行商问题(Travelling Salesman Problem,TSP)
例6:运输问题(Transportation Problem)
上面例子的问题都是网络优化问题。
基本概念
无向图
一个无向图 G G G 是由一个非空有限集合 V ( G ) V(G) V(G) 和 V ( G ) V(G) V(G) 中某些元素的无序对集合 E ( G ) E(G) E(G) 构成的二元组,记为 G = ( V ( G ) , E ( G ) ) G=(V(G),E(G)) G=(V(G),E(G)) 。其中 V ( G ) = { v 1 , v 2 , ⋯ , v n } V(G)=\{v_1,v_2,\cdots,v_n\} V(G)={v1,v2,⋯,vn} 称为图 G G G 的顶点集(vertex set)或节点集(node set), V ( G ) V(G) V(G) 中的每一个元素 v i ( i = 1 , 2 , ⋯ , n ) v_i(i=1,2,\cdots,n) vi(i=1,2,⋯,n) 称为该图的一个顶点(vertex)或节点(node); E ( G ) = { e 1 , e 2 , ⋯ , e m } E(G)=\{e_1,e_2,\cdots,e_m\} E(G)={e1,e2,⋯,em} 称为图 G G G 的边集(edge set),其中的每一个元素 e k = ( v i , v j ) = v i v j = v j v i ( k = 1 , 2 , ⋯ , m ) e_k=(v_i,v_j)=v_iv_j=v_jv_i(k=1,2,\cdots,m) ek=(vi,vj)=vivj=vjvi(k=1,2,⋯,m) ,被称为该图的一条从 v i v_i vi 到 v j v_j vj 的边(edge)。
当边 e k = v i v j e_k=v_iv_j ek=vivj 时,称 v i , v j v_i,v_j vi,vj 为边 e k e_k ek 的端点,并称 v i v_i vi 与 v j v_j vj 相邻(adjacent);边 e k e_k ek 称为与顶点 v i , v j v_i,v_j vi,vj 关联(incident)。如果某两条边至少有一个公共端点,则称这两条边在图 G G G 中相邻。
边上赋权的无向图称为赋权无向图或无向网络。
一个图称为有限图,如果它的顶点集和边集都有限。图 G G G 的顶点数用符号 ∣ V ∣ |V| ∣V∣ 或 v ( G ) v(G) v(G) 表示,边数用 ∣ E ∣ |E| ∣E∣ 与 ε ( G ) \varepsilon(G) ε(G) 表示。
端点重合为一点的边称为环(loop)。
一个图称为简单图,如果它既没有环,也没有两条边连接同一对顶点。
有向图
一个有向图 G G G 是由一个非空有限集合 V V V 和 V V V 中某些元素的有序对集合 A A A 构成的二元组,记为 G = ( V , A ) G=(V,A) G=(V,A) 。其中 A = { a 1 , a 2 , ⋯ , a m } A=\{a_1,a_2,\cdots,a_m\} A={a1,a2,⋯,am} 称为图 G G G 的弧集(arc set), A A A 中的每一个元素 a k a_k ak 记为 a k = ( v i , v j ) = v i v j a_k=(v_i,v_j)=v_iv_j ak=(vi,vj)=vivj ,被称为该图的一条从 v i v_i vi 到 v j v_j vj 的弧(arc)。
当弧 a k = v i v j a_k=v_iv_j ak=vivj 时,称 v i v_i vi 为 a k a_k ak 的尾(tail), v j v_j vj 为 a k a_k ak 的头(head)。并称弧 a k a_k ak 为 v i v_i vi 的出弧(outgoing arc),为 v j v_j vj 的入弧(incoming arc)。
对应于每个有向图 D D D ,可以在相同顶点集上作一个图 G G G ,使得对于 D D D 的每条弧, G G G 有一条相同端点的边与之相对应。这个图称为 D D D 的基础图。反之,给定任意图 G G G ,对于它的每个边,给其端点指定一个顺序,从而确定一条弧,由此得到一个有向图,这样的有向图称为 G G G 的一个定向图。
完全图、二分图
每一对不同的顶点都有一条边相连的简单图称为完全图。 n n n 个顶点的完全图记为 K n K_n Kn。
若 KaTeX parse error: Undefined control sequence: \Upphi at position 22: …\cup Y,X\cap Y=\̲U̲p̲p̲h̲i̲,|X||Y|\neq0 , X X X 中无相邻顶点对, Y Y Y 中亦然,则称 G G G 为二分图;特别地,若 ∀ x ∈ X , ∀ y ∈ Y \forall x\in X,\forall y\in Y ∀x∈X,∀y∈Y ,则 x y ∈ E ( G ) xy\in E(G) xy∈E(G) ,则称 G G G 为完全二分图,记成 K ∣ X ∣ , ∣ Y ∣ K_{|X|,|Y|} K∣X∣,∣Y∣。
子图
图 H H H 叫做图 G G G 的子图,记作 H ⊂ G H\subset G H⊂G ,如果 V ( H ) ⊂ V ( G ) , E ( H ) ⊂ E ( G ) V(H)\subset V(G),E(H)\subset E(G) V(H)⊂V(G),E(H)⊂E(G)。若 H H H 是 G G G 的子图,则 G G G 称为 H H H 的母图。
G G G 的支撑子图(生成子图)是指满足 V ( H ) = V ( G ) V(H)=V(G) V(H)=V(G) 的子图 H H H 。
顶点的度
设 v ∈ V ( G ) v\in V(G) v∈V(G) , G G G 中与 v v v 关联的边数称为 v v v 的度,记作 d ( v ) d(v) d(v) 。若 d ( v ) d(v) d(v) 是奇数,则称 v v v 是奇顶点;反之则是偶顶点。关于顶点的度有以下结论:
(1)KaTeX parse error: Expected group after '_' at position 5: \sum_̲\limits{v\in V}…
(2)任意一个图的奇顶点的个数是偶数。
图与网络的数据结构
邻接矩阵表示法
图
G
=
(
V
,
A
)
G=(V,A)
G=(V,A) 的邻接矩阵:
C
C
C 是一个
n
×
n
n\times n
n×n 的0-1矩阵,即
C
=
(
c
i
j
)
n
×
n
∈
{
0
,
1
}
n
×
n
C=(c_{ij})_{n\times n}\in\{0,1\}^{n\times n}
C=(cij)n×n∈{0,1}n×n
c i j = { 1 , ( i , j ) ∈ A 0 , ( i , j ) ∉ A c_{ij}=\begin{cases}1,(i,j)\in A\\0,(i,j)\notin A\end{cases} cij={1,(i,j)∈A0,(i,j)∈/A
同样,对于网络中的权,也可以用类似邻接矩阵的 n × n n\times n n×n 矩阵表示,只是此时一条弧所对应的元素不再是1,而是相应的权。
关联矩阵表示法
图
G
=
(
V
,
A
)
G=(V,A)
G=(V,A) 的关联矩阵:
B
B
B 是一个
n
×
m
n\times m
n×m 的矩阵,即
B
=
(
b
i
k
)
n
×
m
∈
{
−
1
,
0
,
1
}
n
×
m
B=(b_{ik})_{n\times m}\in\{-1,0,1\}^{n\times m}
B=(bik)n×m∈{−1,0,1}n×m
b i k = { 1 , ∃ j ∈ V , k = ( i , j ) ∈ A − 1 , ∃ j ∈ V , k = ( j , i ) ∈ A 0 , e l s e b_{ik}=\begin{cases}1,&\exist j\in V,k=(i,j)\in A\\-1,&\exist j\in V,k=(j,i)\in A\\0,&else\end{cases} bik=⎩ ⎨ ⎧1,−1,0,∃j∈V,k=(i,j)∈A∃j∈V,k=(j,i)∈Aelse
同样,对于网络中的权,也可以通过对关联矩阵的扩展来表示。例如,如果网络中每条弧有一个权,可以把关联矩阵增加一行,把每一条弧所对应的权存储在增加的行中。
轨与连通
W = v 0 e 1 v 1 e 2 ⋯ e k v k W=v_0e_1v_1e_2\cdots e_kv_k W=v0e1v1e2⋯ekvk ,其中 e i ∈ E ( G ) , 1 ≤ i ≤ k , v j ∈ V ( G ) , 0 ≤ j ≤ k e_i\in E(G),1\leq i\leq k,v_j\in V(G),0\leq j \leq k ei∈E(G),1≤i≤k,vj∈V(G),0≤j≤k , e i e_i ei 与 v i − 1 , v i v_{i-1},v_i vi−1,vi 关联,称 W W W 是图 G G G 的一条道路, k k k 为路长,顶点 v 0 v_0 v0 和 v k v_k vk 分别成为 W W W 的起点和终点,而 v 1 , v 2 , ⋯ , v k − 1 v_1,v_2,\cdots,v_{k-1} v1,v2,⋯,vk−1 称为它的内部顶点。
若道路 W W W 的边互不相同,则称 W W W 为迹。若顶点互不相同,则称 W W W 为轨。
称一条道路是闭的,如果它有正的长且起点和终点相同。起点和终点重合的轨叫做圈。
若图 G G G 的两个顶点 u , v u,v u,v 间存在道路,则称 u u u 和 v v v 连通。 u , v u,v u,v 间最短轨的长叫做 u , v u,v u,v 的距离。记作 d ( u , v ) d(u,v) d(u,v) 。若图 G G G 的任两顶点均连通,则称 G G G 是连通图。
应用:最短路问题
两个指定顶点之间的最短路径——Dijkstra算法
两个指定顶点之间最短路问题的数学表达式
假设有向图有
n
n
n 个顶点,现需要求从顶点1到顶点
n
n
n 的最短路。设
W
=
(
w
i
j
)
n
×
n
W=(w_{ij})_{n\times n}
W=(wij)n×n 为赋权邻接矩阵,其分量为
w
i
j
=
{
w
(
v
i
v
j
)
,
v
i
v
j
∈
E
∞
,
e
l
s
e
w_{ij}=\begin{cases}w(v_iv_j),&v_iv_j\in E\\\infty,&else\end{cases}
wij={w(vivj),∞,vivj∈Eelse
决策变量为
x
i
j
x_{ij}
xij ,当
x
i
j
=
1
x_{ij}=1
xij=1 时,说明弧
v
i
v
j
v_iv_j
vivj 位于顶点1至顶点
n
n
n 的路上;否则等于0。其数学规划表达式为
min
∑
v
i
v
j
∈
E
w
i
j
x
i
j
\min\sum_{v_iv_j\in E}w_{ij}x_{ij}
minvivj∈E∑wijxij
s . t . ∑ j = 1 v i v j ∈ E n x i j − ∑ j = 1 v j v i ∈ E n x j i = { 1 , i = 1 − 1 , i = n 0 , i ≠ 1 , n s.t.\sum_{\substack{j=1\\v_iv_j\in E}}^nx_{ij}-\sum_{\substack{j=1\\v_jv_i\in E}}^nx_{ji}=\begin{cases}1,&i=1\\-1,&i=n\\0,&i\neq 1,n\end{cases} s.t.j=1vivj∈E∑nxij−j=1vjvi∈E∑nxji=⎩ ⎨ ⎧1,−1,0,i=1i=ni=1,n
x i j = 0 或 1 x_{ij}=0或1 xij=0或1
每对顶点之间的最短路径——Floyd算法
树
基本概念
连通的无圈图叫做树,记之为
T
T
T 。若图
G
G
G 满足
V
(
G
)
=
V
(
T
)
V(G)=V(T)
V(G)=V(T) ,
E
(
T
)
⊂
E
(
G
)
E(T)\subset E(G)
E(T)⊂E(G) ,则称
T
T
T 是
G
G
G 的生成树。图
G
G
G 连通的充分必要条件为
G
G
G 有生成树。一个连通图的生成树的个数很多,用
τ
(
G
)
\tau(G)
τ(G) 表示
G
G
G 的生成树的个数,则有公式
τ
(
K
n
)
=
n
n
−
2
\tau(K_n)=n^{n-2}
τ(Kn)=nn−2
τ ( G ) = τ ( G − e ) + τ ( G ⋅ e ) \tau(G)=\tau(G-e)+\tau(G\cdot e) τ(G)=τ(G−e)+τ(G⋅e)
其中 G − e G-e G−e 表示从 G G G 上删除边 e e e , G ⋅ e G\cdot e G⋅e 表示把 e e e 的长度收缩为零得到的图。
树有下面常用的五个充要条件:
1、 G G G 是树当且仅当 G G G 中任两顶点之间有且仅有一条轨道。
2、 G G G 是树当且仅当 G G G 无圈,且 ε = v − 1 \varepsilon=v-1 ε=v−1 。
3、 G G G 是树当且仅当 G G G 连通,且 ε = v − 1 \varepsilon=v-1 ε=v−1 。
4、 G G G 是树当且仅当 G G G 连通,且 ∀ e ∈ E ( G ) \forall e\in E(G) ∀e∈E(G), G − e G-e G−e 不连通。
5、 G G G 是树当且仅当 G G G 无圈, ∀ e ∉ E ( G ) \forall e\notin E(G) ∀e∈/E(G), G + e G+e G+e 恰有一个圆。
应用——连线问题
欲修筑连接 n n n 个城市的铁路,已知 i i i 城与 j j j 城之间的铁路造价为 C i j C_{ij} Cij ,设计一个线路图,使总造价最低。
连线问题的数学模型是在连通赋权图上求权最小的生成树。赋权图的具最小权的生成图叫做最小生成树。
prim算法构造最小生成树
Kruskal算法构造最小生成树
匹配问题
若 M ⊂ E ( G ) M\subset E(G) M⊂E(G) , ∀ e i , e j ∈ M \forall e_i,e_j\in M ∀ei,ej∈M , e i e_i ei 与 e j e_j ej 无公共端点 ( i ≠ j ) (i\neq j) (i=j) ,则称 M M M 为图 G G G 中的一个对集; M M M 中的一条边的两个端点叫做在对集 M M M 中相配; M M M 中的端点称为被 M M M 许配; G G G 中每个顶点皆被 M M M 许配时, M M M 称为完美对集; G G G 中已无使 ∣ M ′ ∣ > ∣ M ∣ |M'|>|M| ∣M′∣>∣M∣ 的对集 M ′ M' M′ ,则 M M M 称为最大对集;若 G G G 中有一轨,其边交替地在对集 M M M 内外出现,则称此轨为 M M M 的交错轨,交错轨的起止顶点都未被许配时,此交错轨称为可增广轨。
若把可增广轨在 M M M 外的边纳入对集,把 M M M 内的边从对集中删除,则被许配的顶点数增加2,对集中的“对儿”增加一个。
定理: M M M 是图 G G G 中的最大对集当且仅当 G G G 中无 M M M 可增广轨。
定理: G G G 为二分图, X X X 与 Y Y Y 是顶点集的划分, G G G 中存在把 X X X 中顶点皆许配的对集的充要条件, ∀ S ⊂ X \forall S\subset X ∀S⊂X,则 ∣ N ( S ) ∣ > ∣ S ∣ |N(S)|>|S| ∣N(S)∣>∣S∣ ,其中 N ( S ) N(S) N(S) 是 S S S 中顶点的邻集。
推论:若 G G G 是 k k k 次( k > 0 k>0 k>0)正则二分图,则 G G G 有完美对集。
所谓 k k k 次正则图,即每顶点皆 k k k 度的图。
婚配定理:每个姑娘都结识 k k k 位小伙子,每个小伙子都结识 k k k 位姑娘,则每位姑娘都能和她认识的一个小伙子结婚,并且每位小伙子也能和他认识的一个姑娘结婚。
人员分派问题——匈牙利算法
工作人员 x 1 , x 2 , ⋯ , x n x_1,x_2,\cdots,x_n x1,x2,⋯,xn 去做 n n n 件工作 y 1 , y 2 , ⋯ , y n y_1,y_2,\cdots,y_n y1,y2,⋯,yn ,每人适合做其中一件或几件,问能否每人都有一份适合的工作?如果不能,最多几人可以有适合的工作?
数学模型: G G G 是二分图,顶点集划分为 V ( G ) = X ∪ Y V(G)=X\cup Y V(G)=X∪Y , X = { x 1 , x 2 , ⋯ , x n } , Y = { y 1 , y 2 , ⋯ , y n } X=\{x_1,x_2,\cdots,x_n\}, Y=\{y_1,y_2,\cdots,y_n\} X={x1,x2,⋯,xn},Y={y1,y2,⋯,yn} ,当且仅当 x i x_i xi 适合做工作 y j y_j yj 时, x i y j ∈ E ( G ) x_iy_j\in E(G) xiyj∈E(G) ,求 G G G 中的最大对集。
最优分派问题——Kuhn-Munkres算法
在人员分派问题的模型中,图 G G G 的每边加了权 w ( x i , x j ) ≥ 0 w(x_i,x_j)\geq0 w(xi,xj)≥0 ,表示 x i x_i xi 干 y j y_j yj 工作的效益,求加权图 G G G 上的权最大的完美对集。
Euler图和Hamilton图
经过 G G G 的每条边的迹叫做 G G G 的Euler迹;闭的Euler迹叫做Euler回路或E回路;含Euler回路的图叫做 Euler图。
定理: G G G 是Euler图的充分必要条件是 G G G 连通且每顶点皆偶次。
定理: G G G 是Euler图的充分必要条件是 G G G 连通且 KaTeX parse error: Expected group after '_' at position 10: G=\bigcup_̲\limits{i=1}^dC… , C i C_i Ci 是圈, E ( C i ) ∩ E ( C j ) = Φ ( i ≠ j ) E(C_i)\cap E(C_j)=\Phi(i\neq j) E(Ci)∩E(Cj)=Φ(i=j)
定理: G G G 中有Euler迹的充要条件是 G G G 连通且至多有两个奇次点。
包含 G G G 的每个顶点的轨叫做Hamilton轨;闭的Hamilton轨叫做 Hamilton圈;含 Hamilton圈的图叫做 Hamilton图。
Euler回路的Fleury算法
应用——中国邮递员问题
一位邮递员必须经过他所负责投递的每条街道至少一次,为他设计一条投递路线,使得行程最短。
数学模型:在一个赋权连通图上求一个含所有边的回路,且使此回路的权最小。
若此赋权连通图是Euler图,则可用Fleury算法求Euler回路;对于非Euler图,参考Edmonds&Johnson解法。
应用——多邮递员问题(kPP)
邮局有 k k k 位投递员,同时投递信件,全程街道都要投递,完成任务返回邮局,如何分配投递路线,使得完成投递任务的时间最早?
数学模型: G ( V , E ) G(V,E) G(V,E) 是连通图, v 0 ∈ V ( G ) v_0\in V(G) v0∈V(G) ,求 G G G 的回路 C 1 , ⋯ , C k C_1,\cdots,C_k C1,⋯,Ck ,使得
1) v 0 ∈ V ( C i ) , i = 1 , 2 , ⋯ , k v_0\in V(C_i),i=1,2,\cdots,k v0∈V(Ci),i=1,2,⋯,k
2)$\max_\limits{1\leq i\leq k}\sum_\limits{e\in E(C_i)}w(e)=\min $
3)KaTeX parse error: Expected group after '_' at position 8: \bigcup_̲\limits{i=1}^kE…
应用——旅行商(TSP)问题
一名推销员准备前往若干城市推销产品,然后回到他的出发地。如何为他设计一条最短的旅行路线(从驻地出发,经过每个城市恰好一次,最后返回驻地)?这个问题称为旅行商问题。用图论的术语说,就是在一个赋权完全图中,找出一个有最小权的Hamilton圈,这种圈为最优圈。(目前还没有有效算法)
数学表达式
设城市的个数为
n
n
n ,
d
i
j
d_{ij}
dij 是两个城市
i
i
i 与
j
j
j 之间的距离,
x
i
j
=
0
/
1
x_{ij}=0/1
xij=0/1 。则有
min
∑
i
≠
j
d
i
j
x
i
j
\min\sum_{i\neq j}d_{ij}x_{ij}
mini=j∑dijxij
KaTeX parse error: Expected group after '_' at position 23: …egin{cases}\sum_̲\limits{j=1}^nx…
最大流问题
在以 V V V 为节点集, A A A 为弧集的有向图 G = ( V , A ) G=(V,A) G=(V,A) 上定义如下的权函数:
1) L : A → R L:A\rightarrow R L:A→R 为弧上的权函数,弧 ( i , j ) ∈ A (i,j)\in A (i,j)∈A 对应的权 L ( i , j ) L(i,j) L(i,j) 记为 l i j l_{ij} lij ,称为弧 ( i , j ) (i,j) (i,j) 的容量下界;
2) U : A → R U:A\rightarrow R U:A→R 为弧上的权函数,弧 ( i , j ) ∈ A (i,j)\in A (i,j)∈A 对应的权 U ( i , j ) U(i,j) U(i,j) 记为 u i j u_{ij} uij,称为弧 ( i , j ) (i,j) (i,j) 的容量上界,或直接称为容量;
3) D : V → R D:V\rightarrow R D:V→R 为顶点上的权函数,节点 i ∈ V i\in V i∈V 对应的权 D ( i ) D(i) D(i) 记为 d i d_i di ,称为顶点 i i i 的供需量;
此时所构成的网络称为流网络,可以记为 N = ( V , A , L , U , D ) N=(V,A,L,U,D) N=(V,A,L,U,D)
对于流网络
N
=
(
V
,
A
,
L
,
U
,
D
)
N=(V,A,L,U,D)
N=(V,A,L,U,D) ,其上的一个流
f
f
f 是指从
N
N
N 的弧集
A
A
A 到
R
R
R 的一个函数,即对每条弧
(
i
,
j
)
(i,j)
(i,j) 赋予一个实数
f
i
j
f_{ij}
fij (称为弧的流量)。如果流
f
f
f 满足
∑
j
:
(
i
,
j
)
∈
A
f
i
j
−
∑
j
:
(
j
,
i
)
∈
A
f
j
i
=
d
i
,
∀
i
∈
V
\sum_{j:(i,j)\in A}f_{ij}-\sum_{j:(j,i)\in A}f_{ji}=d_i,\forall i\in V
j:(i,j)∈A∑fij−j:(j,i)∈A∑fji=di,∀i∈V
l i j ≤ f i j ≤ u i j , ∀ ( i , j ) ∈ A l_{ij}\leq f_{ij}\leq u_{ij},\forall(i,j)\in A lij≤fij≤uij,∀(i,j)∈A
则称
f
f
f 为可行流。至少存在一个可行流的流网络称为可行网络。可见,当
d
i
>
0
d_i>0
di>0 时,表示有
d
i
d_i
di 个单位的流量从网络外部流入该顶点,因此顶点
i
i
i 称为供应点或源,有时也形象地称为起始点或发点等;当
d
i
<
0
d_i<0
di<0 时,表示有
∣
d
i
∣
|d_i|
∣di∣ 个单位的流量从该顶点流失到网络外部,因此顶点
i
i
i 称为需求点或汇,有时也形象地称为终止点或收点等;当
d
i
=
0
d_i=0
di=0 时,顶点
i
i
i 称为转运点或平衡点、中间点等。此外,对于可行网络,必有
∑
i
∈
V
d
i
=
0
\sum_{i\in V}d_i=0
i∈V∑di=0
一般来说,总是可以把
L
≠
0
L\ne0
L=0 的流网络转化为
L
=
0
L=0
L=0 的流网络进行研究。所以,总是假设
L
=
0
L=0
L=0 ,并将流网络简记为
N
=
(
V
,
A
,
U
,
D
)
N=(V,A,U,D)
N=(V,A,U,D) 。
在流网络中,对于流
f
f
f ,如果
f
i
j
=
0
,
∀
(
i
,
j
)
∈
A
f_{ij}=0,\forall(i,j)\in A
fij=0,∀(i,j)∈A
则称
f
f
f 为零流,否则为非零流。如果某条弧
(
i
,
j
)
(i,j)
(i,j) 上的流量等于其容量(
f
i
j
=
u
i
j
f_{ij}=u_{ij}
fij=uij),则称该弧为饱和弧;小于其容量,则称为非饱和弧;流量为0,称为空弧。
最大流问题
考虑流网络
N
=
(
V
,
A
,
U
,
D
)
N=(V,A,U,D)
N=(V,A,U,D) :节点
s
s
s 为网络中唯一的源点,
t
t
t 为唯一的汇点,而其他节点为转运点。如果网络中存在可行流
f
f
f ,此时称流
f
f
f 的流量为
d
s
d_s
ds ,通常记为
v
v
v 或
v
(
f
)
v(f)
v(f),即
v
=
v
(
f
)
=
d
s
=
−
d
t
v=v(f)=d_s=-d_t
v=v(f)=ds=−dt
对这种单源单汇的网络,如果我们并不给定
d
s
d_s
ds 和
d
t
d_t
dt (即流量不给定),则网络一般记为
N
=
(
s
,
t
,
V
,
A
,
U
)
N=(s,t,V,A,U)
N=(s,t,V,A,U) 。最大流问题就是在
N
=
(
s
,
t
,
V
,
A
,
U
)
N=(s,t,V,A,U)
N=(s,t,V,A,U) 中找到流值最大的可行流(最大流)。
用线性规划的方法,最大流问题可以描述如下:
max
v
\max v
maxv
s . t . ∑ f : ( i , j ) ∈ A f i j − ∑ f : ( j , i ) ∈ A f j i = { v , i = s − v , i = t 0 , i ≠ s , t s.t.\sum_{f:(i,j)\in A}f_{ij}-\sum_{f:(j,i)\in A}f_{ji}=\begin{cases}v,&i=s\\-v,&i=t\\0,&i\neq s,t\end{cases} s.t.f:(i,j)∈A∑fij−f:(j,i)∈A∑fji=⎩ ⎨ ⎧v,−v,0,i=si=ti=s,t
0 ≤ f i j ≤ u i j , ∀ ( i , j ) ∈ A 0\leq f_{ij}\leq u_{ij},\forall(i,j)\in A 0≤fij≤uij,∀(i,j)∈A
最大流的一种算法——标号法Ford-Fulkerson算法
最小费用流
最小费用流
在运输网络 N = ( s , t , V , A , U ) N=(s,t,V,A,U) N=(s,t,V,A,U) 中,设 c i j c_{ij} cij 是定义在 A A A 上的非负函数,它表示通过弧 ( i , j ) (i,j) (i,j) 单位流的费用。所谓最小费用流问题就是从发点到收点怎样以最小费用输送一已知量为 v ( f ) v(f) v(f) 的总流量。
最小费用流问题可以用如下的线性规划问题描述:
min
∑
(
i
,
j
)
∈
A
c
i
j
f
i
j
\min \sum_{(i,j)\in A}c_{ij}f_{ij}
min(i,j)∈A∑cijfij
s . t . ∑ j : ( i , j ) ∈ A f i j − ∑ j : ( j , i ) ∈ A f j i = d i = { v ( f ) , i = s − v ( f ) , i = t 0 , i ≠ s , t s.t.\sum_{j:(i,j)\in A}f_{ij}-\sum_{j:(j,i)\in A}f_{ji}=d_i=\begin{cases}v(f),&i=s\\-v(f),&i=t\\0,&i\neq s,t\end{cases} s.t.j:(i,j)∈A∑fij−j:(j,i)∈A∑fji=di=⎩ ⎨ ⎧v(f),−v(f),0,i=si=ti=s,t
0 ≤ f i j ≤ u i j , ∀ ( i , j ) ∈ A 0\leq f_{ij}\leq u_{ij},\forall(i,j)\in A 0≤fij≤uij,∀(i,j)∈A
如果 v ( f ) = 最大流 v ( f m a x ) v(f)=最大流v(f_{max}) v(f)=最大流v(fmax) ,则本问题就是最小费用最大流问题。
求最小费用流的一种方法——迭代法
计划评审方法和关键路线法
计划评审方法(program evaluation and review technique, PERT)和关键路线法(critical path method, CPM)是网络分析的重要部分。由于两种方法有着相同的目标应用,已合并为一种方法, 在国外称为PERT/CPM,在国内称为统筹方法(scheduling method)。
计划网络图
任何消耗时间或资源的行动称为作业。称作业的开始或结束为事件。事件本身不消耗资源。
在计划网络图中通常用圆圈表示事件,用箭线表示工作,有这种方法画出的网络图称为计划网络图。
虚工作用虚箭头表示。它表示工时为零,不消耗任何资源的虚构工作。其作用只是为了正确表示工作的前行后继关系。
在计划网络图中,称从初始事件到最终事件的由各项工作连贯组成的一条路为路线。具有累计作业时间最长的路线称为关键路线。
时间参数
事件时间参数
1、事件的最早时间
事件 j j j 的最早时间用 t E ( j ) t_E(j) tE(j) 表示,它表明以它为始点的各工作最早可能开始的时间,也表示以它为终点的各工作的最早可能完成时间,它等于从始点事件到该事件的最长路线上所有工作的工时总和。事件最早时间可用以下递推公式,按照事件编号从小到大的顺序逐个计算。
设事件编号为
1
,
2
,
⋯
,
n
1,2,\cdots,n
1,2,⋯,n ,则
KaTeX parse error: Expected group after '_' at position 36: …=0\\t_E(j)=\max_̲\limits{i}\{t_E…
其中
t
E
(
i
)
t_E(i)
tE(i) 是与事件
j
j
j 相邻的各紧前事件的最早时间,
t
(
i
,
j
)
t(i,j)
t(i,j) 是作业
(
i
,
j
)
(i,j)
(i,j) 所需的工时。
终点事件的最早时间显然是整个工程的总最早完工期,即
t
E
(
n
)
=
总最早完工期
t_E(n)=总最早完工期
tE(n)=总最早完工期
2、事件的最迟时间
事件
i
i
i 的最迟时间用
t
L
(
i
)
t_L(i)
tL(i) 表示,它表明在不影响任务总工期条件下,以它为始点的工作的最迟必须开始时间,或以它为终点的各工作的最迟必须完成时间。由于一般情况下,我们都把任务的最早完工时间作为任务的总工期,所以事件最迟时间的计算公式为:
KaTeX parse error: Expected group after '_' at position 47: …))\\t_L(i)=\min_̲\limits{j}\{t_L…
其中
t
L
(
i
)
t_L(i)
tL(i) 是与事件
i
i
i 相邻的各紧后事件的最迟时间。
工作的时间参数
1、工作的最早可能开工时间与最早可能完工时间
一个工作
(
i
,
j
)
(i,j)
(i,j) 的最早可能开工时间用
t
E
S
(
i
,
j
)
t_{ES}(i,j)
tES(i,j) 表示。任何一件工作都必须在其所有紧前工作全部完工后才能开始。工作
(
i
,
j
)
(i,j)
(i,j) 的最早可能完工时间用
t
E
F
(
i
,
j
)
t_{EF}(i,j)
tEF(i,j) 表示。它表示工作按最早开工时间开始所能达到的完工时间。它们的计算公式为:
KaTeX parse error: Expected group after '_' at position 46: …_{ES}(i,j)=\max_̲\limits{k}\{t_{…
2、工作的最迟必须开工时间与最迟必须完工时间
一个工作
(
i
,
j
)
(i,j)
(i,j) 的最迟开工时间用
t
L
S
(
i
,
j
)
t_{LS}(i,j)
tLS(i,j) 表示。它表示工作
(
i
,
j
)
(i,j)
(i,j) 在不影响整个任务如期完成的前提下,必须开始的最晚时间。工作
(
i
,
j
)
(i,j)
(i,j) 的最迟必须完工时间用
t
L
F
(
i
,
j
)
t_{LF}(i,j)
tLF(i,j) 。它表示工作
(
i
,
j
)
(i,j)
(i,j) 按最迟时间开工,所能达到的完工时间。它们的计算公式为:
KaTeX parse error: Expected group after '_' at position 62: …_{LS}(i,j)=\min_̲\limits{k}\{t_{…
任一个时间
i
i
i (除去始点时间和终点事件),既表示某些工作的开始又表示某些工作的结束。
时差
工作的时差又叫工作的机动时间或富裕时间,常用的时差有两种。
1、工作的总时差
在不影响任务总工期的条件下,某工作
(
i
,
j
)
(i,j)
(i,j) 可以延迟其开工时间的最大幅度,叫做该工作的总时差,用
R
(
i
,
j
)
R(i,j)
R(i,j) 表示。其计算公式为:
R
(
i
,
j
)
=
t
L
F
(
i
,
j
)
−
t
E
F
(
i
,
j
)
R(i,j)=t_{LF}(i,j)-t_{EF}(i,j)
R(i,j)=tLF(i,j)−tEF(i,j)
即工作
(
i
,
j
)
(i,j)
(i,j) 的总时差等于它的最迟完工时间与最早完工时间的差。显然
R
(
i
,
j
)
R(i,j)
R(i,j) 也等于该工作的最迟开工时间与最早开工时间之差。
2、工作的单时差
工作的单时差是指在不影响紧后工作的最早开工时间条件下,此工作可以延迟其开工时间的最大幅度,用
r
(
i
,
j
)
r(i,j)
r(i,j) 表示。其计算公式为:
r
(
i
,
j
)
=
t
E
S
(
j
,
k
)
−
t
E
F
(
i
,
j
)
r(i,j)=t_{ES}(j,k)-t_{EF}(i,j)
r(i,j)=tES(j,k)−tEF(i,j)
即单时差等于其紧后工作的最早开工时间与本工作的最早完工时间之差。
计划网络图的计算
建立计划网络图
写出相应的规划问题
设
x
i
x_i
xi 是事件
i
i
i 的开始时间,1为最初事件,
n
n
n 为最终事件。希望总的工期最短,即极小化
x
n
−
x
1
x_n-x_1
xn−x1 。设
t
i
j
t_{ij}
tij 是作业
(
i
,
j
)
(i,j)
(i,j) 的计划时间,因此,对于事件
i
i
i 与事件
j
j
j 有不等式
x
j
≥
x
i
+
t
i
j
x_j\geq x_i+t_{ij}
xj≥xi+tij ,由此得到相应的数学规划问题
min
x
n
−
x
1
\min x_n-x_1
minxn−x1
s . t . x j ≥ x i + t i j , ( i , j ) ∈ A , i , j , ∈ V s.t.x_j\geq x_i+t_{ij},(i,j)\in A,i,j,\in V s.t.xj≥xi+tij,(i,j)∈A,i,j,∈V
x i ≥ 0 , i ∈ V x_i\geq0,i\in V xi≥0,i∈V
其中 V V V 是所有事件集合, A A A 是所有作业集合。
可以求解出相应的开工时间和整个项目的最短工期,但统筹方法中许多有用的信息,如项目的关键路径、每个工作的最早开工时间、最迟开工时间等。
将目标函数改为 KaTeX parse error: Expected group after '_' at position 5: \sum_̲\limits{i\in V}… ,即作业的开始事件尽量早,这样可以得到作业的最早开工时间。再引进作业对应弧上的松弛变量 s i j s_{ij} sij ,且 s i j = x j − x i − t i j , ( i , j ) ∈ A s_{ij}=x_j-x_i-t_{ij},(i,j)\in A sij=xj−xi−tij,(i,j)∈A ,这样就可以得到作业的最迟开工时间,记 y i y_i yi 表示事件 i i i 的最迟开工时间。当最早开工时间与最迟开工时间相同时,就得到项目的关键路径。
最迟开工时间的分析需要用到松弛变量 s i j s_{ij} sij ,当 s i j > 0 s_{ij}>0 sij>0 时,说明还有剩余时间,对应作业的工期可以推迟 s i j s_{ij} sij 。
将关键路线看成最长路
设
x
i
j
x_{ij}
xij 为0-1变量,当作业
(
i
,
j
)
(i,j)
(i,j) 位于关键路线上取1,否则取0。数学规划问题写成:
max
∑
(
i
,
j
)
∈
A
t
i
j
x
i
j
\max \sum_{(i,j)\in A}t_{ij}x_{ij}
max(i,j)∈A∑tijxij
s . t . ∑ j = 1 v i v j ∈ A n x i j − ∑ j = 1 v j v i ∈ A n x j i = { 1 , i = 1 − 1 , i = n 0 , i ≠ 1 , n s.t.\sum_{\substack{j=1\\v_iv_j\in A}}^nx_{ij}-\sum_{\substack{j=1\\v_jv_i\in A}}^nx_{ji}=\begin{cases}1,&i=1\\-1,&i=n\\0,&i\neq 1,n\end{cases} s.t.j=1vivj∈A∑nxij−j=1vjvi∈A∑nxji=⎩ ⎨ ⎧1,−1,0,i=1i=ni=1,n
x i j = 0 或 1 x_{ij}=0或1 xij=0或1
关键路线与计划网络的优化
为提前完成工程, 有些作业需要加快进度,缩短工期,而加快进度需要额外增加费用。设
x
i
x_i
xi 是事件
i
i
i 的开始时间,
t
i
j
t_{ij}
tij 是作业
(
i
,
j
)
(i,j)
(i,j) 的计划时间,
m
i
j
m_{ij}
mij 是完成作业
(
i
,
j
)
(i,j)
(i,j) 的最短时间,
y
i
j
y_{ij}
yij 是作业
(
i
,
j
)
(i,j)
(i,j) 可能减少的时间,
c
i
j
c_{ij}
cij 是作业
(
i
,
j
)
(i,j)
(i,j) 缩短一天增加的费用,因此有
x
j
−
x
i
≥
t
i
j
−
y
i
j
且
0
≤
y
i
j
≤
t
i
j
−
m
i
j
x_j-x_i\geq t_{ij}-y_{ij}且0\leq y_{ij}\leq t_{ij}-m_{ij}
xj−xi≥tij−yij且0≤yij≤tij−mij
设
d
d
d 是要求完成的天数,1为最初事件,
n
n
n 为最终事件,所以有
x
n
−
x
1
≤
d
x_n-x_1\leq d
xn−x1≤d。由此得到相应的数学规划问题:
min
∑
(
i
,
j
)
∈
A
c
i
j
y
i
j
\min \sum_{(i,j)\in A}c_{ij}y_{ij}
min(i,j)∈A∑cijyij
s . t . x j − x i + y i j ≥ t i j , ( i , j ) ∈ A , i , j ∈ V x n − x 1 ≤ d 0 ≤ y i j ≤ t i j − m i j , ( i , j ) ∈ A , i , j ∈ V s.t.x_j-x_i+y_{ij}\geq t_{ij},(i,j)\in A,i,j\in V\\x_n-x_1\leq d\\0\leq y_{ij}\leq t_{ij}-m_{ij},(i,j)\in A,i,j\in V s.t.xj−xi+yij≥tij,(i,j)∈A,i,j∈Vxn−x1≤d0≤yij≤tij−mij,(i,j)∈A,i,j∈V
如果需要知道压缩工期后的关键路径,则需要稍复杂一点的计算。
为了得到作业的最早开工时间,仍在目标函数中加入 KaTeX parse error: Expected group after '_' at position 5: \sum_̲\limits{i\in V}… ,记 z i z_i zi 表示事件 i i i 的最迟开工时间,其他处理方法与前面相同。
计算出所有作业的最早开工时间和最迟开工时间,当最早开工时间与最迟开工时间相同时,对应的作业就在关键路线上。
完成工作期望和实现事件的概率
每项作业完成的时间均看成固定的,但在实际应用中,每一工作的完成会受到一些意外因素的干扰,一般不可能是完全确定的,往往只能凭借经验和过去完成类似工作需要的时间进行估计。通常情况下,对完成一项作业可以给出三个时间上的估计值:最乐观值的估计值( a ),最悲观的估计值(b)和最可能的估计值(m)。
设
t
i
j
t_{ij}
tij 是完成工作
(
i
,
j
)
(i,j)
(i,j) 的实际时间,通常用下面的方法计算相应的数学期望和方差。
E
(
t
i
j
)
=
a
i
j
+
4
m
i
j
+
b
i
j
6
v
a
r
(
t
i
j
)
=
(
b
i
j
−
a
i
j
)
2
36
E(t_{ij})=\frac{a_{ij}+4m_{ij}+b_{ij}}{6}\\var(t_{ij})=\frac{(b_{ij}-a_{ij})^2}{36}
E(tij)=6aij+4mij+bijvar(tij)=36(bij−aij)2
设 KaTeX parse error: Expected group after '_' at position 7: T=\sum_̲\limits{(i,j)\i… 为最短工期,由中心极限定理,可以假设
T
T
T 服从正态分布,而且期望值和方差满足
KaTeX parse error: Expected group after '_' at position 24: …ne{T}=E(T)=\sum_̲\limits{(i,j)\i…
设规定的工期为
d
d
d ,则在规定的工期内完成整个项目的概率为
P
(
T
≤
d
)
=
Φ
(
d
−
t
‾
S
)
P(T\leq d)=\Phi(\frac{d-\overline{t}}{S})
P(T≤d)=Φ(Sd−t)
钢管订购和运输
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qAK9O4Bn-1658373208527)(C:\Users\MacBook Air\AppData\Roaming\Typora\typora-user-images\image-20220721111045586.png)]
工作
(
i
,
j
)
(i,j)
(i,j) 的实际时间,通常用下面的方法计算相应的数学期望和方差。
E
(
t
i
j
)
=
a
i
j
+
4
m
i
j
+
b
i
j
6
v
a
r
(
t
i
j
)
=
(
b
i
j
−
a
i
j
)
2
36
E(t_{ij})=\frac{a_{ij}+4m_{ij}+b_{ij}}{6}\\var(t_{ij})=\frac{(b_{ij}-a_{ij})^2}{36}
E(tij)=6aij+4mij+bijvar(tij)=36(bij−aij)2
设 KaTeX parse error: Expected group after '_' at position 7: T=\sum_̲\limits{(i,j)\i… 为最短工期,由中心极限定理,可以假设
T
T
T 服从正态分布,而且期望值和方差满足
KaTeX parse error: Expected group after '_' at position 24: …ne{T}=E(T)=\sum_̲\limits{(i,j)\i…
设规定的工期为
d
d
d ,则在规定的工期内完成整个项目的概率为
P
(
T
≤
d
)
=
Φ
(
d
−
t
‾
S
)
P(T\leq d)=\Phi(\frac{d-\overline{t}}{S})
P(T≤d)=Φ(Sd−t)