关键路径
AOE网:关键路径
用一个有向图表示一个工程的各子工程及其相互制约关系,其中以弧表示活动,顶点表示活动的开始或结束事件,称这种有向图为边表示活动的网(Activity On Edge)
弧的权表示活动持续时间
事件表示在它之前的活动已经完成,在它之后的活动可以开始
用AOE表示工程计划
事件v1:表示整个工程开始 (源点:入度为0的顶点)
事件v7:表示整个工程结束(汇点:出度为0的顶点)
求解关键路径
路径长度最长的路径
路径长度:路径上各活动持续时间之和
描述量
- ve(vj): 表示事件vj的最早发生时间 ve(v1) = 0 ; ve(v2) = 30
- vl(vj): 表示事件vj的最迟发生时间 vl(v4) = 165 = 180 - 15
- e(i): 表示活动ai的最早开始时间 e(a3) = 30
- l(a3): 表示活动ai的最迟开始时间 l(a3) = 120 = 180 - 15 - 45
l(i) - e(i)表示完成活动ai的时间余量
关键活动:关键路径上的活动,即l(i) = e(i) ,时间余量为0
如何找?
设活动ai用弧<j,k>表示,其持续时间记为:w(j,k)
则:(1)e(i) = ve(j) (2)l(i) = vl(k) - w(j,k)
如何求?
- 从ve(1) = 0 开始向前递推 :ve(j) = Max( ve(i) + w(i,j) ) <i,j>是以j为投的弧的集合,2 <= j < n
- 从vl(n) = ve(n) 开始向后递推:vl(i) = Min( vl(j) - w(i,j) ) <i,j>是以i为尾的弧的集合,1 <= i <= n-1
找最早发生时间
求ve(vj) 由源点到汇点(从前向后)
1.找到最大值ve(j) = Max( ve(i) + w(i,j) ) = 0 + 88
2.找到最大值ve(j) = Max( ve(i) + w(i,j) ) = 82 + 6 = 88
找最晚发生时间
求vlv(j) 由汇点到源点(从后向前)
1.取最小值vl(i) = Min( vl(j) - w(i,j) ) = 10 - 7 = 3
2.取最小值vl(i) = Min( vl(j) - w(i,j) ) = 5 - 2 = 3
求关键路径步骤
1. 求 ve(i) , vl(j)
2. 求 e(i) , l(i)
3. 计算 l(i) - e(i)
顶点 | ve | vl |
---|---|---|
v1 | 0(从源点开始) | MIN(v2-6,v3-4,v4-5) = 0 |
v2 | 6 | v5 - 1 = 6 |
v3 | 4 | v5 - 1 = 6 |
v4 | 5 | v6 - 2 = 8 |
v5 | MAX(6+1,4+1) = 7 | MIN(v7-9,v8-7) = 7 |
v6 | V4 + 2 = 7 | v8 - 4 = 10 |
v7 | V5 + 9 = 16 | v9 - 2 = 16 |
v8 | MAX(V5+7,V6+4) = 14 | MIN(v9-2,v9-4) = 14 |
v9 | MAX(V8+4,V7+2) = 18 | 18(从汇点开始) |
”ve正着算,vl倒着算“
活动 | e | l | l - e |
---|---|---|---|
a1 | ve(v1) = 0 | vl(v2) - 6 = 0 | 0 |
a2 | ve(v1) = 0 | vl(v3) - 4 = 2 | |
a3 | ve(v1) = 0 | vl(v4) - 5 = 3 | |
a4 | ve(v2) = 6 | vl(v5) - 1 = 6 | 0 |
a5 | ve(v3) = 4 | vl(v5) - 1 = 6 | |
a6 | ve(v4) = 5 | vl(v6) - 2 = 8 | |
a7 | ve(v5) = 7 | vl(v7) - 9 = 7 | 0 |
a8 | ve(v5) = 7 | vl(v8) - 7 = 7 | 0 |
a9 | ve(v6) = 7 | vl(v8) - 4 = 10 | |
a10 | ve(v7) = 16 | vl(v9) - 2 = 16 | 0 |
a11 | ve(v8) = 14 | vl(v9) - 4 = 14 | 0 |
关键活动:a1 a4 a7 a8 a10 a11
关键路径:v1->v2->v5->v7->v9 和 v1->v2->v5->v8->v9
讨论
- 若网中有几条关键路径,则需加快同时在几条关键路径上的关键活动
- 如果一个活动处于所有的关键路径上,那么提高这个活动的速度,就能缩短整个工程的完成时间
- 处于所有关键路径上的活动完成时间不能缩短太多,否咋会使原来的关键路径变成不是关键路径,需要重新寻找关键路径