AOE网
- 定义: 把工程计划表示为边表示活动的网络,叫AOE网。用顶点表示事件,弧表示活动,弧的权表示活动持续时间。
- 例子:
事件:表示在它之前的活动已经完成,在它之后的活动可以开始。例如,菜单定制(活动A)表示为,
其中,
结点v1:表示A之前的活动已经完成,
边:表示活动A,
边的权值:表示活动A持续30分钟,
结点v2:表示活动A完成之后的后续活动可以开始。
上述问题的AOE网为,
那么压缩哪项活动的时间可以使总时间变短?——求解关键路径。
求解关键路径
-
例子: 设一个工程有11项活动,9个事件。
事件v1——表示整个工程的开始(源点:入度为0的顶点)
事件v9——表示整个工程的结束(汇点:出度为0的顶点)
那么,对于上述的AOE网,我们关心两个问题:
(1)完成整项工程至少需要多少时间?
(2)哪些活动是影响工程进度的关键?
解决上述问题的关键,就是找到关键路径。 -
关键路径:路径长度最长的路径。
路径长度:路径上各活动持续时间之和。 -
4个描述量:
- ve(vj)——表示事件vj的最早发生时间。
例:ve(v1)=0,ve(v2)=30 - vl(vj)——表示事件vj的最迟发生时间。
例:vl(v4)=165 - e(i)——表示活动ai的最早开始时间。
例:e(a3)=30 - l(i)——表示活动ai的最迟开始时间。
例:l(a3)=120 - l(i)-e(i)——表示完成活动ai的时间余量。
例:l(3)-e(3)=90
- ve(vj)——表示事件vj的最早发生时间。
-
关键活动:关键路径上的活动,即l(i)==e(i)(即,l(i)-e(i)==0)的活动。
-
如何找到关键路径?
-
如何找到l(i)==e(i)的关键活动?
设活动ai用弧 < j , k > <j,k> <j,k>表示,其持续时间为: w j , k w_{j,k} wj,k,如下图,
则有:(1).活动ai的最早开始时间(e(i))=以活动ai为边的弧尾(事件vj)的最早发生时间,即,
e ( i ) = v e ( j ) e(i)=ve(j) e(i)=ve(j)
(2).活动ai的最迟开始时间(l(i))=以活动ai为边的弧头(事件vk)的最迟发生时间-活动ai的持续时间( w j , k w_{j,k} wj,k),即,
l ( i ) = v l ( k ) − w j , k l(i)=vl(k)-w_{j,k} l(i)=vl(k)−wj,k -
如何求ve(j)和vl(j)?
(1). 从ve(1)=0开始向前递推
v e ( j ) = M a x i { v e ( i ) + w i , j } , < i , j > ∈ T , 2 ≤ j ≤ n ve(j) = \mathop {Max}\limits_i \{ ve(i) + {w_{i,j}}\} , < i,j > \in T,2 \le j \le n ve(j)=iMax{ve(i)+wi,j},<i,j>∈T,2≤j≤n
其中T是所有以j为头的弧的集合。
(2). 从vl(n)==ve(n)开始向后递推
v l ( i ) = M i n j { v l ( j ) − w i , j } , < i , j > ∈ S , 1 ≤ i ≤ n − 1 vl(i) = \mathop {Min}\limits_j \{ vl(j) - {w_{i,j}}\} , < i,j > \in S,1 \le i \le n - 1 vl(i)=jMin{vl(j)−wi,j},<i,j>∈S,1≤i≤n−1
其中S所有以i为尾的弧的集合。
-
-
求关键路径的步骤:
1.求ve(i)、vl(j)
2.求e(i)、l(i)
3.计算l(i)-e(i) -
例子说明:
1.求ve(i)、vl(j)。
v e ( j ) = M a x i { v e ( i ) + w i , j } , < i , j > ∈ T , 2 ≤ j ≤ n v l ( i ) = M i n j { v l ( j ) − w i , j } , < i , j > ∈ S , 1 ≤ i ≤ n − 1 ve(j) = \mathop {Max}\limits_i \{ ve(i) + {w_{i,j}}\} , < i,j > \in T,2 \le j \le n\\vl(i) = \mathop {Min}\limits_j \{ vl(j) - {w_{i,j}}\} , < i,j > \in S,1 \le i \le n - 1 ve(j)=iMax{ve(i)+wi,j},<i,j>∈T,2≤j≤nvl(i)=jMin{vl(j)−wi,j},<i,j>∈S,1≤i≤n−1
2.求e(i)、l(i),计算l(i)-e(i) 。
e ( i ) = v e ( j ) l ( i ) = v l ( k ) − w j , k e(i)=ve(j)\\l(i)=vl(k)-w_{j,k} e(i)=ve(j)l(i)=vl(k)−wj,k
3.关键路径如下,
-
几点关于关键路径的讨论:
- 若网中有几条关键路径,则需加快同时在几条关键路径上的关键活动。如:a11、a10、a8、a7。
- 如果一个活动处于所有的关键路径上,那么提高这个活动的速度,就能缩短整个工程的完成时间,如:a1、a4。
- 处于所有的关键路径上的活动完成时间不能缩短太多,否则会使原来的关键路径变成不是关键路径。这时,必须重新寻找关键路径。如:a1由6变成3,就会改变关键路径。