这是 PMGT1865(Project Time, Cost and Resources)期末前整理的 Week 2 和 Week 3 内容:CPM 和重叠网络。全文一条主线:画图,前推,后推,算 Float。

先记住这四句

  1. 前推求 ES、EF,后推求 LS、LF,最后用 LS − ES 求 Float。
  2. 前推遇到 merge(多个前置汇入)取最大,后推遇到 burst(多个后续分出)取最小。
  3. Float 为 0 的活动连成的链,就是关键路径。
  4. 重叠网络只是换了每条连接用的端点:关系名的两个字母,就是“用前置的哪个端点,去限制后续的哪个端点”。

1. CPM 的三步

步骤规则
前推 Forward pass起点 ES = 0;EF = ES + 工期;后续的 ES 取所有前置 EF 的最大值
后推 Backward pass终点 LF = 项目 EF;LS = LF − 工期;前置的 LF 取所有后续 LS 的最小值
FloatFloat = LS − ES(也等于 LF − EF);Float 为 0 的链是关键路径

Float 要会用文字解释:

  • 非关键活动的延误不超过 Float,项目总工期不变;
  • 延误超过 Float 的部分,会推迟整个项目;
  • 关键活动(Float = 0)延误 1 天,项目就延误 1 天。

Float 是可以推迟的时间,不是必须用掉的时间。

2. 例题 1:前推、后推、Float

A 3 天;B 4 天、C 6 天都在 A 之后;D 2 天在 B 之后;E 5 天在 C 之后;F 3 天,D 和 E 都做完才能开始。

fig1-cpm.png

图中蓝色是 ES / EF,绿色是 LS / LF,琥珀色是 Float,红框是关键活动。

前推:A 是 0–3;B 是 3–7;C 是 3–9;D 是 7–9;E 是 9–14。F 是 merge:D 的 EF 是 9,E 的 EF 是 14,取最大的 14,所以 F 是 14–17,项目工期 17 天。

后推:F 的 LF = 17,LS = 14;D 的 LF = 14,LS = 12;E 的 LF = 14,LS = 9;B 的 LF = 12,LS = 8;C 的 LF = 9,LS = 3。A 是 burst:B 的 LS 是 8,C 的 LS 是 3,取最小的 3,所以 A 的 LF = 3,LS = 0。

活动工期ESEFLSLFFloat
A303030
B4378125
C639390
D27912145
E59149140
F3141714170

结论:工期 17 天,关键路径是 A → C → E → F(3 + 6 + 5 + 3 = 17)。B 和 D 各有 5 天 Float,但它们在同一条支路上(4 + 2 = 6 天,比 C → E 那条支路的 11 天短 5 天),共用这 5 天,不是各 5 天。

3. 重叠网络:四种关系

前面所有箭头都是 FS(前一个做完,后一个才开始)。重叠网络再加入三种关系,每种都可以带 lag(用 LT 表示)。设 I 是前置活动,J 是后续活动:

关系含义Forward 约束Backward 约束
FSI 做完,J 才开始ES(J) ≥ EF(I) + LTLF(I) ≤ LS(J) − LT
SSI 开始后,J 才能开始ES(J) ≥ ES(I) + LTLS(I) ≤ LS(J) − LT
FFI 做完后,J 才能做完EF(J) ≥ EF(I) + LTLF(I) ≤ LF(J) − LT
SFI 开始后,J 才能做完EF(J) ≥ ES(I) + LTLS(I) ≤ LF(J) − LT

记忆法:关系名的第一个字母是前置活动 I 的端点(Start 或 Finish),第二个字母是后续活动 J 的端点。FS 就是“用 I 的 Finish 去限制 J 的 Start”。

三个注意点:

  • FF 和 SF 约束的是 J 的 EF,要再用 ES = EF − 工期 换算成 ES。
  • Lag 是两者之间至少要隔开的时间,不是“最多可以延迟”。
  • 有多个约束时,前推先统一换成 ES 再取最大,后推先统一换成 LS 再取最小。

4. 例题 2:SS 和 FF

A 6 天;B 4 天,A → B 是 SS+2;C 3 天,A → C 是 FF+2;D 2 天,B → D 和 C → D 都是 FS。

例题 2:重叠网络图与计算结果

前推:A 是 0–6。B:SS+2,ES = 0 + 2 = 2,EF = 6。C:FF+2,EF ≥ 6 + 2 = 8,所以 ES = 8 − 3 = 5。D:B 的 FS 要求 ES ≥ 6,C 的 FS 要求 ES ≥ 8,取 8,EF = 10。

后推:D 的 LF = 10,LS = 8;B 的 LF = 8,LS = 4;C 的 LF = 8,LS = 5。A 同时受两条连接限制:来自 B(SS+2)的 LS(A) ≤ 4 − 2 = 2;来自 C(FF+2)的 LF(A) ≤ 8 − 2 = 6,也就是 LS(A) ≤ 6 − 6 = 0。取最小,LS(A) = 0,LF(A) = 6。

活动工期ESEFLSLFFloat
A606060
B426482
C358580
D28108100

结论:工期 10 天,关键路径是 A → C → D,B 有 2 天 Float。检验:A 的 EF 6,加 FF 的 lag 2,再加 D 的 2 天,6 + 2 + 2 = 10。

如果所有箭头都按 FS 算,A → B → D 是 6 + 4 + 2 = 12 天,SS 和 FF 的重叠把工期缩短到 10 天。另外,重叠网络里关键路径不一定是最长的串联路径,要看每条连接是否“绷紧”,这里绷紧的是 A → C 的 FF+2。

5. 易错点

  1. merge 和 burst 记反:前推 merge 取最大,后推 burst 取最小。
  2. SS 用前置的 ES,FF 用前置的 EF,不要都当成 FS 来算。
  3. FF 和 SF 先求出 EF,再减工期得到 ES。
  4. 后推时同一个活动有多个后续,每条连接各算一个,统一成 LS 后取最小。
  5. Lag 是“至少隔开”,不是“最多可以延迟”。
  6. Float 公式是 LS − ES,不是 ES − LF。
  7. 排日期时第 1 天计入:8 天的活动从周一 17 Aug 开始,在周三 26 Aug 结束,后续活动从下一个工作日开始。

6. 自测

  1. 某活动 ES = 4,LS = 7,Float 是多少?它延误 2 天会影响项目工期吗?
  2. FF+3:前置 I 的 EF = 10,后续 J 工期 4 天,J 的 ES 和 EF 各是多少?
  3. A 有两个后续 B 和 C,都是 FS,B 的 LS = 8,C 的 LS = 5,A 的 LF 是多少?

答案:1. Float = 7 − 4 = 3,延误 2 天不超过 Float,不影响项目工期。2. EF(J) ≥ 10 + 3 = 13,ES(J) = 13 − 4 = 9。3. 取最小的 LS,LF(A) = 5。

标签: CPM