数学模型学习——图与网络
图与网络
例1:最短路问题(Shortest Path Problem,SPP)
例2:公路连接问题
例3:指派问题(Assignment Problem)
例4:中国邮递员问题(Chinese Postman Problem,CPP)
例5:旅行商问题(Travelling Salesman Problem,TSP)
例6:运输问题(Transportation Problem)
上面例子的问题都是网络优化问题。
基本概念
无向图
一个无向图 GGG 是由一个非空有限集合 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)={v1,v2,⋯,vn}V(G)=\{v_1,v_2,\cdots,v_n\}V(G)={v1,v2,⋯,vn} 称为图 GGG 的顶点集(vertex set)或节点集(node set),V(G)V(G)V(G) 中的每一个元素 vi(i=1,2,⋯,n)v_i(i=1,2,\cdots,n)vi(i=1,2,⋯,n) 称为该图的一个顶点(vertex)或节点(node);E(G)={e1,e2,⋯,em}E(G)=\{e_1,e_2,\cdots,e_m\}E(G)={e1,e2,⋯,em} 称为图 GGG 的边集(edge set),其中的每一个元素 ek=(vi,vj)=vivj=vjvi(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) ,被称为该图的一条从 viv_ivi 到 vjv_jvj 的边(edge)。
当边 ek=vivje_k=v_iv_jek=vivj 时,称 vi,vjv_i,v_jvi,vj 为边 eke_kek 的端点,并称 viv_ivi 与 vjv_jvj 相邻(adjacent);边 eke_kek 称为与顶点 vi,vjv_i,v_jvi,vj 关联(incident)。如果某两条边至少有一个公共端点,则称这两条边在图 GGG 中相邻。
边上赋权的无向图称为赋权无向图或无向网络。
一个图称为有限图,如果它的顶点集和边集都有限。图 GGG 的顶点数用符号 ∣V∣|V|∣V∣ 或 v(G)v(G)v(G) 表示,边数用 ∣E∣|E|∣E∣ 与 ε(G)\varepsilon(G)ε(G) 表示。
端点重合为一点的边称为环(loop)。
一个图称为简单图,如果它既没有环,也没有两条边连接同一对顶点。
有向图
一个有向图 GGG 是由一个非空有限集合 VVV 和 VVV 中某些元素的有序对集合 AAA 构成的二元组,记为 G=(V,A)G=(V,A)G=(V,A) 。其中 A={a1,a2,⋯,am}A=\{a_1,a_2,\cdots,a_m\}A={a1,a2,⋯,am} 称为图 GGG 的弧集(arc set),AAA 中的每一个元素 aka_kak 记为 ak=(vi,vj)=vivja_k=(v_i,v_j)=v_iv_jak=(vi,vj)=vivj ,被称为该图的一条从 viv_ivi 到 vjv_jvj 的弧(arc)。
当弧 ak=vivja_k=v_iv_jak=vivj 时,称 viv_ivi 为 aka_kak 的尾(tail),vjv_jvj 为 aka_kak 的头(head)。并称弧 aka_kak 为 viv_ivi 的出弧(outgoing arc),为 vjv_jvj 的入弧(incoming arc)。
对应于每个有向图 DDD ,可以在相同顶点集上作一个图 GGG ,使得对于 DDD 的每条弧,GGG 有一条相同端点的边与之相对应。这个图称为 DDD 的基础图。反之,给定任意图 GGG ,对于它的每个边,给其端点指定一个顺序,从而确定一条弧,由此得到一个有向图,这样的有向图称为 GGG 的一个定向图。
完全图、二分图
每一对不同的顶点都有一条边相连的简单图称为完全图。nnn 个顶点的完全图记为 KnK_nKn。
若 KaTeX parse error: Undefined control sequence: \Upphi at position 22: …\cup Y,X\cap Y=\̲U̲p̲p̲h̲i̲,|X||Y|\neq0 ,XXX 中无相邻顶点对,YYY 中亦然,则称 GGG 为二分图;特别地,若 ∀x∈X,∀y∈Y\forall x\in X,\forall y\in Y∀x∈X,∀y∈Y ,则 xy∈E(G)xy\in E(G)xy∈E(G) ,则称 GGG 为完全二分图,记成 K∣X∣,∣Y∣K_{|X|,|Y|}K∣X∣,∣Y∣。
子图
图 HHH 叫做图 GGG 的子图,记作 H⊂GH\subset GH⊂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)。若 HHH 是 GGG 的子图,则 GGG 称为 HHH 的母图。
GGG 的支撑子图(生成子图)是指满足 V(H)=V(G)V(H)=V(G)V(H)=V(G) 的子图 HHH 。
顶点的度
设 v∈V(G)v\in V(G)v∈V(G) ,GGG 中与 vvv 关联的边数称为 vvv 的度,记作 d(v)d(v)d(v) 。若 d(v)d(v)d(v) 是奇数,则称 vvv 是奇顶点;反之则是偶顶点。关于顶点的度有以下结论:
(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) 的邻接矩阵:CCC 是一个 n×nn\times nn×n 的0-1矩阵,即
C=(cij)n×n∈{0,1}n×nC=(c_{ij})_{n\times n}\in\{0,1\}^{n\times n} C=(cij)n×n∈{0,1}n×n
cij={1,(i,j)∈A0,(i,j)∉Ac_{ij}=\begin{cases}1,(i,j)\in A\\0,(i,j)\notin A\end{cases} cij={1,(i,j)∈A0,(i,j)∈/A
同样,对于网络中的权,也可以用类似邻接矩阵的 n×nn\times nn×n 矩阵表示,只是此时一条弧所对应的元素不再是1,而是相应的权。
关联矩阵表示法
图 G=(V,A)G=(V,A)G=(V,A) 的关联矩阵:BBB 是一个 n×mn\times mn×m 的矩阵,即
B=(bik)n×m∈{−1,0,1}n×mB=(b_{ik})_{n\times m}\in\{-1,0,1\}^{n\times m} B=(bik)n×m∈{−1,0,1}n×m
bik={1,∃j∈V,k=(i,j)∈A−1,∃j∈V,k=(j,i)∈A0,elseb_{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=v0e1v1e2⋯ekvkW=v_0e_1v_1e_2\cdots e_kv_kW=v0e1v1e2⋯ekvk ,其中 ei∈E(G),1≤i≤k,vj∈V(G),0≤j≤ke_i\in E(G),1\leq i\leq k,v_j\in V(G),0\leq j \leq kei∈E(G),1≤i≤k,vj∈V(G),0≤j≤k ,eie_iei 与 vi−1,viv_{i-1},v_ivi−1,vi 关联,称 WWW 是图 GGG 的一条道路,kkk 为路长,顶点 v0v_0v0 和 vkv_kvk 分别成为 WWW 的起点和终点,而 v1,v2,⋯,vk−1v_1,v_2,\cdots,v_{k-1}v1,v2,⋯,vk−1 称为它的内部顶点。
若道路 WWW 的边互不相同,则称 WWW 为迹。若顶点互不相同,则称 WWW 为轨。
称一条道路是闭的,如果它有正的长且起点和终点相同。起点和终点重合的轨叫做圈。
若图 GGG 的两个顶点 u,vu,vu,v 间存在道路,则称 uuu 和 vvv 连通。u,vu,vu,v 间最短轨的长叫做 u,vu,vu,v 的距离。记作 d(u,v)d(u,v)d(u,v) 。若图 GGG 的任两顶点均连通,则称 GGG 是连通图。
应用:最短路问题
两个指定顶点之间的最短路径——Dijkstra算法
两个指定顶点之间最短路问题的数学表达式
假设有向图有 nnn 个顶点,现需要求从顶点1到顶点 nnn 的最短路。设 W=(wij)n×nW=(w_{ij})_{n\times n}W=(wij)n×n 为赋权邻接矩阵,其分量为
wij={w(vivj),vivj∈E∞,elsew_{ij}=\begin{cases}w(v_iv_j),&v_iv_j\in E\\\infty,&else\end{cases} wij={w(vivj),∞,vivj∈Eelse
决策变量为 xijx_{ij}xij ,当 xij=1x_{ij}=1xij=1 时,说明弧 vivjv_iv_jvivj 位于顶点1至顶点 nnn 的路上;否则等于0。其数学规划表达式为
min∑vivj∈Ewijxij\min\sum_{v_iv_j\in E}w_{ij}x_{ij} minvivj∈E∑wijxij
s.t.∑j=1vivj∈Enxij−∑j=1vjvi∈Enxji={1,i=1−1,i=n0,i≠1,ns.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
xij=0或1x_{ij}=0或1 xij=0或1
每对顶点之间的最短路径——Floyd算法
树
基本概念
连通的无圈图叫做树,记之为 TTT 。若图 GGG 满足 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) ,则称 TTT 是 GGG 的生成树。图 GGG 连通的充分必要条件为 GGG 有生成树。一个连通图的生成树的个数很多,用 τ(G)\tau(G)τ(G) 表示 GGG 的生成树的个数,则有公式
τ(Kn)=nn−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−eG-eG−e 表示从 GGG 上删除边 eee ,G⋅eG\cdot eG⋅e 表示把 eee 的长度收缩为零得到的图。
树有下面常用的五个充要条件:
1、GGG 是树当且仅当 GGG 中任两顶点之间有且仅有一条轨道。
2、GGG 是树当且仅当 GGG 无圈,且 ε=v−1\varepsilon=v-1ε=v−1 。
3、GGG 是树当且仅当 GGG 连通,且 ε=v−1\varepsilon=v-1ε=v−1 。
4、GGG 是树当且仅当 GGG 连通,且 ∀e∈E(G)\forall e\in E(G)∀e∈E(G),G−eG-eG−e 不连通。
5、GGG 是树当且仅当 GGG 无圈,∀e∉E(G)\forall e\notin E(G)∀e∈/E(G),G+eG+eG+e 恰有一个圆。
应用——连线问题
欲修筑连接 nnn 个城市的铁路,已知 iii 城与 jjj 城之间的铁路造价为 CijC_{ij}Cij ,设计一个线路图,使总造价最低。
连线问题的数学模型是在连通赋权图上求权最小的生成树。赋权图的具最小权的生成图叫做最小生成树。
prim算法构造最小生成树
Kruskal算法构造最小生成树
匹配问题
若 M⊂E(G)M\subset E(G)M⊂E(G) ,∀ei,ej∈M\forall e_i,e_j\in M∀ei,ej∈M ,eie_iei 与 eje_jej 无公共端点 (i≠j)(i\neq j)(i=j) ,则称 MMM 为图 GGG 中的一个对集;MMM 中的一条边的两个端点叫做在对集 MMM 中相配;MMM 中的端点称为被 MMM 许配;GGG 中每个顶点皆被 MMM 许配时,MMM 称为完美对集;GGG 中已无使 ∣M′∣>∣M∣|M'|>|M|∣M′∣>∣M∣ 的对集 M′M'M′ ,则 MMM 称为最大对集;若 GGG 中有一轨,其边交替地在对集 MMM 内外出现,则称此轨为 MMM 的交错轨,交错轨的起止顶点都未被许配时,此交错轨称为可增广轨。
若把可增广轨在 MMM 外的边纳入对集,把 MMM 内的边从对集中删除,则被许配的顶点数增加2,对集中的“对儿”增加一个。
定理:MMM 是图 GGG 中的最大对集当且仅当 GGG 中无 MMM 可增广轨。
定理:GGG 为二分图,XXX 与 YYY 是顶点集的划分,GGG 中存在把 XXX 中顶点皆许配的对集的充要条件,∀S⊂X\forall S\subset X∀S⊂X,则 ∣N(S)∣>∣S∣|N(S)|>|S|∣N(S)∣>∣S∣ ,其中 N(S)N(S)N(S) 是 SSS 中顶点的邻集。
推论:若 GGG 是 kkk 次(k>0k>0k>0)正则二分图,则 GGG 有完美对集。
所谓 kkk 次正则图,即每顶点皆 kkk 度的图。
婚配定理:每个姑娘都结识 kkk 位小伙子,每个小伙子都结识 kkk 位姑娘,则每位姑娘都能和她认识的一个小伙子结婚,并且每位小伙子也能和他认识的一个姑娘结婚。
人员分派问题——匈牙利算法
工作人员 x1,x2,⋯,xnx_1,x_2,\cdots,x_nx1,x2,⋯,xn 去做 nnn 件工作 y1,y2,⋯,yny_1,y_2,\cdots,y_ny1,y2,⋯,yn ,每人适合做其中一件或几件,问能否每人都有一份适合的工作?如果不能,最多几人可以有适合的工作?
数学模型:GGG 是二分图,顶点集划分为 V(G)=X∪YV(G)=X\cup YV(G)=X∪Y ,X={x1,x2,⋯,xn},Y={y1,y2,⋯,yn}X=\{x_1,x_2,\cdots,x_n\}, Y=\{y_1,y_2,\cdots,y_n\}X={x1,x2,⋯,xn},Y={y1,y2,⋯,yn} ,当且仅当 xix_ixi 适合做工作 yjy_jyj 时,xiyj∈E(G)x_iy_j\in E(G)xiyj∈E(G) ,求 GGG 中的最大对集。
最优分派问题——Kuhn-Munkres算法
在人员分派问题的模型中,图 GGG 的每边加了权 w(xi,xj)≥0w(x_i,x_j)\geq0w(xi,xj)≥0 ,表示 xix_ixi 干 yjy_jyj 工作的效益,求加权图 GGG 上的权最大的完美对集。
Euler图和Hamilton图
经过 GGG 的每条边的迹叫做 GGG 的Euler迹;闭的Euler迹叫做Euler回路或E回路;含Euler回路的图叫做 Euler图。
定理:GGG 是Euler图的充分必要条件是 GGG 连通且每顶点皆偶次。
定理:GGG 是Euler图的充分必要条件是 GGG 连通且 KaTeX parse error: Expected group after '_' at position 10: G=\bigcup_̲\limits{i=1}^dC… ,CiC_iCi 是圈,E(Ci)∩E(Cj)=Φ(i≠j)E(C_i)\cap E(C_j)=\Phi(i\neq j)E(Ci)∩E(Cj)=Φ(i=j)
定理:GGG 中有Euler迹的充要条件是 GGG 连通且至多有两个奇次点。
包含 GGG 的每个顶点的轨叫做Hamilton轨;闭的Hamilton轨叫做 Hamilton圈;含 Hamilton圈的图叫做 Hamilton图。
Euler回路的Fleury算法
应用——中国邮递员问题
一位邮递员必须经过他所负责投递的每条街道至少一次,为他设计一条投递路线,使得行程最短。
数学模型:在一个赋权连通图上求一个含所有边的回路,且使此回路的权最小。
若此赋权连通图是Euler图,则可用Fleury算法求Euler回路;对于非Euler图,参考Edmonds&Johnson解法。
应用——多邮递员问题(kPP)
邮局有 kkk 位投递员,同时投递信件,全程街道都要投递,完成任务返回邮局,如何分配投递路线,使得完成投递任务的时间最早?
数学模型:G(V,E)G(V,E)G(V,E) 是连通图,v0∈V(G)v_0\in V(G)v0∈V(G) ,求 GGG 的回路 C1,⋯,CkC_1,\cdots,C_kC1,⋯,Ck ,使得
1)v0∈V(Ci),i=1,2,⋯,kv_0\in V(C_i),i=1,2,\cdots,kv0∈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圈,这种圈为最优圈。(目前还没有有效算法)
数学表达式
设城市的个数为 nnn ,dijd_{ij}dij 是两个城市 iii 与 jjj 之间的距离,xij=0/1x_{ij}=0/1xij=0/1 。则有
min∑i≠jdijxij\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…
最大流问题
在以 VVV 为节点集,AAA 为弧集的有向图 G=(V,A)G=(V,A)G=(V,A) 上定义如下的权函数:
1)L:A→RL:A\rightarrow RL:A→R 为弧上的权函数,弧 (i,j)∈A(i,j)\in A(i,j)∈A 对应的权 L(i,j)L(i,j)L(i,j) 记为 lijl_{ij}lij ,称为弧 (i,j)(i,j)(i,j) 的容量下界;
2)U:A→RU:A\rightarrow RU:A→R 为弧上的权函数,弧 (i,j)∈A(i,j)\in A(i,j)∈A 对应的权 U(i,j)U(i,j)U(i,j) 记为 uiju_{ij}uij,称为弧 (i,j)(i,j)(i,j) 的容量上界,或直接称为容量;
3)D:V→RD:V\rightarrow RD:V→R 为顶点上的权函数,节点 i∈Vi\in Vi∈V 对应的权 D(i)D(i)D(i) 记为 did_idi ,称为顶点 iii 的供需量;
此时所构成的网络称为流网络,可以记为 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) ,其上的一个流 fff 是指从 NNN 的弧集 AAA 到 RRR 的一个函数,即对每条弧 (i,j)(i,j)(i,j) 赋予一个实数 fijf_{ij}fij (称为弧的流量)。如果流 fff 满足
∑j:(i,j)∈Afij−∑j:(j,i)∈Afji=di,∀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
lij≤fij≤uij,∀(i,j)∈Al_{ij}\leq f_{ij}\leq u_{ij},\forall(i,j)\in A lij≤fij≤uij,∀(i,j)∈A
则称 fff 为可行流。至少存在一个可行流的流网络称为可行网络。可见,当 di>0d_i>0di>0 时,表示有 did_idi 个单位的流量从网络外部流入该顶点,因此顶点 iii 称为供应点或源,有时也形象地称为起始点或发点等;当 di<0d_i<0di<0 时,表示有 ∣di∣|d_i|∣di∣ 个单位的流量从该顶点流失到网络外部,因此顶点 iii 称为需求点或汇,有时也形象地称为终止点或收点等;当 di=0d_i=0di=0 时,顶点 iii 称为转运点或平衡点、中间点等。此外,对于可行网络,必有
∑i∈Vdi=0\sum_{i\in V}d_i=0 i∈V∑di=0
一般来说,总是可以把 L≠0L\ne0L=0 的流网络转化为 L=0L=0L=0 的流网络进行研究。所以,总是假设 L=0L=0L=0 ,并将流网络简记为 N=(V,A,U,D)N=(V,A,U,D)N=(V,A,U,D) 。
在流网络中,对于流 fff ,如果
fij=0,∀(i,j)∈Af_{ij}=0,\forall(i,j)\in A fij=0,∀(i,j)∈A
则称 fff 为零流,否则为非零流。如果某条弧 (i,j)(i,j)(i,j) 上的流量等于其容量(fij=uijf_{ij}=u_{ij}fij=uij),则称该弧为饱和弧;小于其容量,则称为非饱和弧;流量为0,称为空弧。
最大流问题
考虑流网络 N=(V,A,U,D)N=(V,A,U,D)N=(V,A,U,D) :节点 sss 为网络中唯一的源点,ttt 为唯一的汇点,而其他节点为转运点。如果网络中存在可行流 fff ,此时称流 fff 的流量为 dsd_sds ,通常记为 vvv 或 v(f)v(f)v(f),即
v=v(f)=ds=−dtv=v(f)=d_s=-d_t v=v(f)=ds=−dt
对这种单源单汇的网络,如果我们并不给定 dsd_sds 和 dtd_tdt (即流量不给定),则网络一般记为 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) 中找到流值最大的可行流(最大流)。
用线性规划的方法,最大流问题可以描述如下:
maxv\max v maxv
s.t.∑f:(i,j)∈Afij−∑f:(j,i)∈Afji={v,i=s−v,i=t0,i≠s,ts.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≤fij≤uij,∀(i,j)∈A0\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) 中,设 cijc_{ij}cij 是定义在 AAA 上的非负函数,它表示通过弧 (i,j)(i,j)(i,j) 单位流的费用。所谓最小费用流问题就是从发点到收点怎样以最小费用输送一已知量为 v(f)v(f)v(f) 的总流量。
最小费用流问题可以用如下的线性规划问题描述:
min∑(i,j)∈Acijfij\min \sum_{(i,j)\in A}c_{ij}f_{ij} min(i,j)∈A∑cijfij
s.t.∑j:(i,j)∈Afij−∑j:(j,i)∈Afji=di={v(f),i=s−v(f),i=t0,i≠s,ts.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≤fij≤uij,∀(i,j)∈A0\leq f_{ij}\leq u_{ij},\forall(i,j)\in A 0≤fij≤uij,∀(i,j)∈A
如果 v(f)=最大流v(fmax)v(f)=最大流v(f_{max})v(f)=最大流v(fmax) ,则本问题就是最小费用最大流问题。
求最小费用流的一种方法——迭代法
计划评审方法和关键路线法
计划评审方法(program evaluation and review technique, PERT)和关键路线法(critical path method, CPM)是网络分析的重要部分。由于两种方法有着相同的目标应用,已合并为一种方法, 在国外称为PERT/CPM,在国内称为统筹方法(scheduling method)。
计划网络图
任何消耗时间或资源的行动称为作业。称作业的开始或结束为事件。事件本身不消耗资源。
在计划网络图中通常用圆圈表示事件,用箭线表示工作,有这种方法画出的网络图称为计划网络图。
虚工作用虚箭头表示。它表示工时为零,不消耗任何资源的虚构工作。其作用只是为了正确表示工作的前行后继关系。
在计划网络图中,称从初始事件到最终事件的由各项工作连贯组成的一条路为路线。具有累计作业时间最长的路线称为关键路线。
时间参数
事件时间参数
1、事件的最早时间
事件 jjj 的最早时间用 tE(j)t_E(j)tE(j) 表示,它表明以它为始点的各工作最早可能开始的时间,也表示以它为终点的各工作的最早可能完成时间,它等于从始点事件到该事件的最长路线上所有工作的工时总和。事件最早时间可用以下递推公式,按照事件编号从小到大的顺序逐个计算。
设事件编号为 1,2,⋯,n1,2,\cdots,n1,2,⋯,n ,则
KaTeX parse error: Expected group after '_' at position 36: …=0\\t_E(j)=\max_̲\limits{i}\{t_E…
其中 tE(i)t_E(i)tE(i) 是与事件 jjj 相邻的各紧前事件的最早时间,t(i,j)t(i,j)t(i,j) 是作业 (i,j)(i,j)(i,j) 所需的工时。
终点事件的最早时间显然是整个工程的总最早完工期,即
tE(n)=总最早完工期t_E(n)=总最早完工期 tE(n)=总最早完工期
2、事件的最迟时间
事件 iii 的最迟时间用 tL(i)t_L(i)tL(i) 表示,它表明在不影响任务总工期条件下,以它为始点的工作的最迟必须开始时间,或以它为终点的各工作的最迟必须完成时间。由于一般情况下,我们都把任务的最早完工时间作为任务的总工期,所以事件最迟时间的计算公式为:
KaTeX parse error: Expected group after '_' at position 47: …))\\t_L(i)=\min_̲\limits{j}\{t_L…
其中 tL(i)t_L(i)tL(i) 是与事件 iii 相邻的各紧后事件的最迟时间。
工作的时间参数
1、工作的最早可能开工时间与最早可能完工时间
一个工作 (i,j)(i,j)(i,j) 的最早可能开工时间用 tES(i,j)t_{ES}(i,j)tES(i,j) 表示。任何一件工作都必须在其所有紧前工作全部完工后才能开始。工作 (i,j)(i,j)(i,j) 的最早可能完工时间用 tEF(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) 的最迟开工时间用 tLS(i,j)t_{LS}(i,j)tLS(i,j) 表示。它表示工作 (i,j)(i,j)(i,j) 在不影响整个任务如期完成的前提下,必须开始的最晚时间。工作 (i,j)(i,j)(i,j) 的最迟必须完工时间用 tLF(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_{…
任一个时间 iii (除去始点时间和终点事件),既表示某些工作的开始又表示某些工作的结束。
时差
工作的时差又叫工作的机动时间或富裕时间,常用的时差有两种。
1、工作的总时差
在不影响任务总工期的条件下,某工作 (i,j)(i,j)(i,j) 可以延迟其开工时间的最大幅度,叫做该工作的总时差,用 R(i,j)R(i,j)R(i,j) 表示。其计算公式为:
R(i,j)=tLF(i,j)−tEF(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)=tES(j,k)−tEF(i,j)r(i,j)=t_{ES}(j,k)-t_{EF}(i,j) r(i,j)=tES(j,k)−tEF(i,j)
即单时差等于其紧后工作的最早开工时间与本工作的最早完工时间之差。
计划网络图的计算
建立计划网络图
写出相应的规划问题
设 xix_ixi 是事件 iii 的开始时间,1为最初事件,nnn 为最终事件。希望总的工期最短,即极小化 xn−x1x_n-x_1xn−x1 。设 tijt_{ij}tij 是作业 (i,j)(i,j)(i,j) 的计划时间,因此,对于事件 iii 与事件 jjj 有不等式 xj≥xi+tijx_j\geq x_i+t_{ij}xj≥xi+tij ,由此得到相应的数学规划问题
minxn−x1\min x_n-x_1 minxn−x1
s.t.xj≥xi+tij,(i,j)∈A,i,j,∈Vs.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
xi≥0,i∈Vx_i\geq0,i\in V xi≥0,i∈V
其中 VVV 是所有事件集合,AAA 是所有作业集合。
可以求解出相应的开工时间和整个项目的最短工期,但统筹方法中许多有用的信息,如项目的关键路径、每个工作的最早开工时间、最迟开工时间等。
将目标函数改为 KaTeX parse error: Expected group after '_' at position 5: \sum_̲\limits{i\in V}… ,即作业的开始事件尽量早,这样可以得到作业的最早开工时间。再引进作业对应弧上的松弛变量 sijs_{ij}sij ,且 sij=xj−xi−tij,(i,j)∈As_{ij}=x_j-x_i-t_{ij},(i,j)\in Asij=xj−xi−tij,(i,j)∈A ,这样就可以得到作业的最迟开工时间,记 yiy_iyi 表示事件 iii 的最迟开工时间。当最早开工时间与最迟开工时间相同时,就得到项目的关键路径。
最迟开工时间的分析需要用到松弛变量 sijs_{ij}sij ,当 sij>0s_{ij}>0sij>0 时,说明还有剩余时间,对应作业的工期可以推迟 sijs_{ij}sij 。
将关键路线看成最长路
设 xijx_{ij}xij 为0-1变量,当作业 (i,j)(i,j)(i,j) 位于关键路线上取1,否则取0。数学规划问题写成:
max∑(i,j)∈Atijxij\max \sum_{(i,j)\in A}t_{ij}x_{ij} max(i,j)∈A∑tijxij
s.t.∑j=1vivj∈Anxij−∑j=1vjvi∈Anxji={1,i=1−1,i=n0,i≠1,ns.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
xij=0或1x_{ij}=0或1 xij=0或1
关键路线与计划网络的优化
为提前完成工程, 有些作业需要加快进度,缩短工期,而加快进度需要额外增加费用。设 xix_ixi 是事件 iii 的开始时间,tijt_{ij}tij 是作业 (i,j)(i,j)(i,j) 的计划时间,mijm_{ij}mij 是完成作业 (i,j)(i,j)(i,j) 的最短时间,yijy_{ij}yij 是作业 (i,j)(i,j)(i,j) 可能减少的时间,cijc_{ij}cij 是作业 (i,j)(i,j)(i,j) 缩短一天增加的费用,因此有
xj−xi≥tij−yij且0≤yij≤tij−mijx_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
设 ddd 是要求完成的天数,1为最初事件,nnn 为最终事件,所以有 xn−x1≤dx_n-x_1\leq dxn−x1≤d。由此得到相应的数学规划问题:
min∑(i,j)∈Acijyij\min \sum_{(i,j)\in A}c_{ij}y_{ij} min(i,j)∈A∑cijyij
s.t.xj−xi+yij≥tij,(i,j)∈A,i,j∈Vxn−x1≤d0≤yij≤tij−mij,(i,j)∈A,i,j∈Vs.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}… ,记 ziz_izi 表示事件 iii 的最迟开工时间,其他处理方法与前面相同。
计算出所有作业的最早开工时间和最迟开工时间,当最早开工时间与最迟开工时间相同时,对应的作业就在关键路线上。
完成工作期望和实现事件的概率
每项作业完成的时间均看成固定的,但在实际应用中,每一工作的完成会受到一些意外因素的干扰,一般不可能是完全确定的,往往只能凭借经验和过去完成类似工作需要的时间进行估计。通常情况下,对完成一项作业可以给出三个时间上的估计值:最乐观值的估计值( a ),最悲观的估计值(b)和最可能的估计值(m)。
设 tijt_{ij}tij 是完成工作 (i,j)(i,j)(i,j) 的实际时间,通常用下面的方法计算相应的数学期望和方差。
E(tij)=aij+4mij+bij6var(tij)=(bij−aij)236E(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… 为最短工期,由中心极限定理,可以假设 TTT 服从正态分布,而且期望值和方差满足
KaTeX parse error: Expected group after '_' at position 24: …ne{T}=E(T)=\sum_̲\limits{(i,j)\i…
设规定的工期为 ddd ,则在规定的工期内完成整个项目的概率为
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(tij)=aij+4mij+bij6var(tij)=(bij−aij)236E(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… 为最短工期,由中心极限定理,可以假设 TTT 服从正态分布,而且期望值和方差满足
KaTeX parse error: Expected group after '_' at position 24: …ne{T}=E(T)=\sum_̲\limits{(i,j)\i…
设规定的工期为 ddd ,则在规定的工期内完成整个项目的概率为
P(T≤d)=Φ(d−t‾S)P(T\leq d)=\Phi(\frac{d-\overline{t}}{S}) P(T≤d)=Φ(Sd−t)
钢管订购和运输
数学模型学习——图与网络相关推荐
- excel中如何对矩阵得对角线进行求和_如何利用图卷积网络进行图形深度学习(第2部分)...
图上的机器学习是一项艰巨的任务,由于高度复杂但信息量丰富,本文是关于如何利用图卷积网络(GCN)进行深度学习的系列文章中的第二篇.我将简要回顾一下上一篇文章: 图形卷积网络的高级介绍 具有谱图卷积的半 ...
- 文献阅读总结:网络表示学习/图学习
本文是对网络表示学习/图学习(Network Representation Learning / Graph Learning)领域已读文献的归纳总结,长期更新. 朋友们,我们在github创建了一个 ...
- 【论文翻译】HCGN:面向集体分类的异构图卷积网络深度学习模型
HCGN:面向集体分类的异构图卷积网络深度学习模型 摘要 集合分类是研究网络数据的一项重要技术,旨在利用一组具有复杂依赖关系的互联实体的标签自相关性.随着各种异构信息网络的出现,集合分类目前正面临着来 ...
- 关系抽取:图卷积网络的学习(二)(附代码)
关系抽取:图卷积网络的学习(二)(附代码) 目录 关系抽取:图卷积网络的学习(二)(附代码) 论文一:基于关系图的实体关系联合抽取 摘要 1.Introduction 2.Motivation 3.G ...
- 基于图特征混合学习的功能网络组织动力学
大家好,这里是 "茗创科技" .茗创科技专注于脑科学数据处理,涵盖(EEG/ERP, fMRI,结构像,DTI,ASL, ,FNIRS)等,欢迎留言讨论及转发推荐,也欢迎了解茗创科 ...
- 【人工智能与深度学习】图卷积网络 I
[人工智能与深度学习]图卷积网络 I 传统卷积神经网络 什么是维度诅咒? 有关卷积神经网络的主要假设:: 图域 数据域 图域 图域的启发性示例 图的定义和特征 传统卷积网络中的卷积 卷积 我们如何定义 ...
- 用于主动学习的顺序图卷积网络(论文解读)
文章目录 前言介绍 Abstract Introduction Framework Related Works 基于模型的方法 在主动学习的GCNs 基于不确定性的方法 基于几何的方法 Method ...
- 基于图卷积网络的测量与先验知识相结合的故障诊断方法
目录 Graph Convolutional Network-Based Method for Fault Diagnosis Using a Hybrid of Measurement and Pr ...
- 一文读懂简化的图卷积网络GCN(SGC)| ICML 2019
作者 | yyl424525 来源 | CSDN博客 文章目录 1 相关介绍 1.1 Simple Graph Convolution (SGC)提出的背景 1.2 SGC效果 2 Simple Gr ...
- 【GCN】图卷积网络 Graph Convolutional Networks
公众号关注 "视学算法" 设为 "星标",DLCV消息即可送达! 作者 | Frank Cao 专栏 | 深度学习 地址 | https://zhuanlan. ...
最新文章
- static成员函数不能调用non-static成员函数
- OpenDesktop 1.0开放桌面操作系统光盘启动安装过程详细图解
- 使用SD-WAN进行WAN转换的业务影响—Vecloud微云
- 对 Stream 中 Map 与 ForEach 做个简单说明
- 15.4.1 杠杆利用类型参数推断
- visual studio可以开发app吗_个人能开发App软件吗?从想法到App开发完成,我只用了三天...
- 安卓手机充电慢_非 iPhone 12 独享,安卓系统手机也能用 MagSafe 充电|手机|安卓系统|充电器|安卓手机...
- IOS-企业开发人员账号amp;邓白氏码申请记录
- 马匹赛跑java_java模拟龟兔赛跑
- TensorFlow的基本运算01-02
- Ambari 安装配置 MySql
- (转)好的投资应当是:善良为先,智慧为道,奋斗为本
- 基于selenium的python模拟登陆虎牙发送弹幕并截取主播头像
- 河南第八届ACM省赛(真题训练)
- 邮箱服务器 拦截策略,企业邮箱服务器的安全管理策略
- No qualifying bean of type found for dependency: expected at least 1 bean which qualifies as autowir
- PHP+Mysql—留言管理系统网站(前端+后端、整套源码)
- 产业互联网将会取代消费互联网成为一个全新的风口
- 方维互动直播系统(美女、游戏、会议、在线教育、体育、赛事直播系统)
- 家用双wan口路由器推荐_请推荐双WAN口的有线千兆硬路由器?
热门文章
- ANR系列之一:ANR显示和日志生成原理讲解
- macOS Big Sur 11.6.3 (20G415) 正式版 DMG、ISO、IPSW 下载
- Word 标题后自动添加分页符、分节符显示与查看
- 什么是驱动程序?为什么要用驱动程序?
- 能否将一个网址(如QQ空间网址),打包成APK,然后别人下载APK安装到手机后,点击进入这个网址?
- Windows 系统添加 VirtIO 驱动(Windows ISO 安装镜像添加驱动)
- OpenCV+Python车牌字符分割和识别入门 (含新能源车牌识别)
- 什么是虚拟主机管理系统?
- 2020年android studio ------jni常用函数总结
- JavaScript:事件:冒泡和捕获机制