Appearance
关键路径保姆级:正推、逆推一步一步标
本页导读:项目里十几个活动,有的能拖两天没事,有的晚一天整个项目就晚一天——怎么区分?关键路径法(CPM)就是干这个的:找出"耗时最长的那条链"(它决定总工期),再给每个活动算出"能拖延的余量"(时差)。这页是案例计算第二大考点。零基础同学常被"正推逆推"吓住,其实它就是"从左往右加一遍、再从右往左减一遍"。本页每个节点每个数字都一行一行标给你看。
你将学会
- 看懂单代号网络图,用"枚举路径"快速找出关键路径和总工期;
- 正推算最早开始/结束(ES/EF),逆推算最迟开始/结束(LS/LF),每个节点标一遍;
- 分清总时差(TF)和自由时差(FF),会算会解释含义;
- 赶工题怎么选"最便宜的压缩方案",一步一步比价。
一、先看懂网络图,再用"枚举法"找关键路径
① 生活例子引入
做一顿年夜饭:买菜(30 分钟)→ 洗切(40 分钟)→ 然后两条线并行:炖汤(120 分钟)和炒菜(30 分钟)→ 最后摆盘(10 分钟)。几点能开饭?看最慢的那条线:
- 炖汤线:30 + 40 + 120 + 10 = 200 分钟;
- 炒菜线:30 + 40 + 30 + 10 = 110 分钟。
开饭时间由炖汤线决定——这条最长的链就是关键路径:炖汤慢一分钟,开饭就晚一分钟;炒菜慢个十几分钟根本不影响开饭。
② 公式卡片
| 名称 | 含义 | 一句话理解 |
|---|---|---|
| 节点(活动) | 圆圈/方块里写活动名 | 单代号网络图里"圈=活动,箭头=先后关系" |
| 紧前活动 | 必须先干完才能开始本活动的 | 我的"前置任务" |
| 紧后活动 | 必须等我干完才能开始的 | 我的"后续任务" |
| 关键路径 | 从起点到终点耗时最长的路径 | 它有多长,总工期就有多长 |
| 关键活动 | 关键路径上的活动 | 总时差为 0,一天不能拖(注意:也可能不止一条关键路径) |
每个活动常用"七格图"标注(考试自己画个简易表格就行):
ES | 历时 | EF
―――――――――――――
活动 A(历时 D)
―――――――――――――
LS | 总时差 | LF③ 例题手把手(枚举法)
题目:项目含 6 个活动,逻辑与历时如下,找关键路径与总工期。
| 活动 | 紧前活动 | 历时 D(天) |
|---|---|---|
| A | — | 3 |
| B | A | 5 |
| C | A | 4 |
| D | B | 6 |
| E | C | 5 |
| F | D、E | 2 |
- 从起点到终点把所有路径一条条列全(为什么:漏一条就可能漏掉关键路径);
- 路径 1:A→B→D→F = 3+5+6+2 = 16 天;
- 路径 2:A→C→E→F = 3+4+5+2 = 14 天;
- 比大小:16 > 14;
- 结论:关键路径 A→B→D→F,总工期 16 天(下一步用正推逆推验证)。
④ 易错陷阱
- 路径必须列全,漏列是最大失分点;列完后把每条加一遍核对;
- 别把"历时最长的活动"当"关键活动"——关键看整条链的总长,不是单个活动;
- 关键路径可能不止一条(两条并列最长时),答题时都要写;
- 枚举法适合活动少的上午题;案例大题要求标 ES/EF/LS/LF,就得用下面两步推演法。
二、正推:从左往右算"最早"(ES、EF)
① 生活例子引入
你几点能出门,取决于前面每件事几点干完:吃饭、换衣服可以并行,但出门必须等最晚结束的那件——"最早出门时间 = 前面所有事情最早结束时间的最大值"。这就是正推。
② 公式卡片
| 符号 | 含义 | 公式 |
|---|---|---|
| ES | 最早开始 | 等于所有紧前活动 EF 的最大值(起点活动 ES = 0) |
| EF | 最早结束 | EF = ES + 历时 D |
口诀:正推取大(多个紧前汇进来,取最晚的)。
③ 例题手把手(还是上面那张 6 活动网络)
- A(起点):ES = 0,EF = 0 + 3 = 3(为什么是 0:本页约定从第 0 天起算);
- B(紧前只有 A):ES = EF_A = 3,EF = 3 + 5 = 8;
- C(紧前只有 A):ES = 3,EF = 3 + 4 = 7;
- D(紧前只有 B):ES = EF_B = 8,EF = 8 + 6 = 14;
- E(紧前只有 C):ES = EF_C = 7,EF = 7 + 5 = 12;
- F(紧前有 D 和 E 两个):ES = max(EF_D, EF_E) = max(14, 12) = 14(为什么取大:D 和 E 都干完 F 才能开始,得等最慢的);
- F:EF = 14 + 2 = 16;
- 总工期 = 终点 EF = 16 天,与枚举法一致 ✔。
④ 易错陷阱
- 汇聚点(多个紧前)忘记取 max,顺手写了最后一个——每次遇到多个紧前,强迫自己写"max(...)";
- 时间起算口径:本页从 0 起算(ES=0);有的教材从第 1 天起算,结论只差口径不差逻辑,考试按题目来并在答卷注明;
- EF 是"加上历时",不是"紧前的 EF 加历时"——先定 ES 再加 D。
三、逆推:从右往左算"最迟"(LS、LF)
① 生活例子引入
高铁 8 点发车,你倒着推:进站要 10 分钟 → 最晚 7:50 到站口;路上要 30 分钟 → 最晚 7:20 出门。"不误事的最晚时间"就是逆推,要是后面还要赶多件事,就得按最早开始的那件倒推。
② 公式卡片
| 符号 | 含义 | 公式 |
|---|---|---|
| LF | 最迟结束 | 等于所有紧后活动 LS 的最小值(终点活动 LF = 总工期) |
| LS | 最迟开始 | LS = LF − 历时 D |
口诀:逆推取小(分出去多个紧后,按最急的那个)。
③ 例题手把手(同一网络,总工期 16 天)
- F(终点):LF = 总工期 = 16,LS = 16 − 2 = 14(为什么终点 LF=总工期:再晚就超工期);
- D(紧后只有 F):LF = LS_F = 14,LS = 14 − 6 = 8;
- E(紧后只有 F):LF = 14,LS = 14 − 5 = 9;
- B(紧后只有 D):LF = LS_D = 8,LS = 8 − 5 = 3;
- C(紧后只有 E):LF = LS_E = 9,LS = 9 − 4 = 5;
- A(紧后有 B 和 C 两个):LF = min(LS_B, LS_C) = min(3, 5) = 3(为什么取小:B 更急,A 最晚 3 天末必须结束);
- A:LS = 3 − 3 = 0;
- 自查:A 的 LS = ES = 0、TF = 0 ✔(起点在关键路径上,时差应为 0)。
④ 易错陷阱
- 分支点(多个紧后)忘记取 min;
- 终点的 LF 不是 0,是总工期(逆推从总工期开始减);
- 方向别搞反:正推用紧前的 EF,逆推用紧后的 LS——一个是"等谁来",一个是"被谁等"。
四、时差:TF(总时差)与 FF(自由时差)
① 生活例子引入
午休你有多少"摸鱼余量"?有两个口径:不影响下班你最多摸 2 小时(总时差);但下午 2 点要开会,不影响开会你只能摸 40 分钟(自由时差)。总时差管"全局底线",自由时差管"下一件事"。
② 公式卡片
| 符号 | 含义 | 公式 | 口诀 |
|---|---|---|---|
| TF | 总时差:最多可推迟多久而不影响总工期 | TF = LS − ES = LF − EF | 迟减早 |
| FF | 自由时差:最多可推迟多久而不影响任何紧后活动最早开始 | FF = min(紧后活动 ES) − 本活动 EF | 紧后最早减我最早完 |
两条铁律:FF ≤ TF;TF = 0 的活动是关键活动,把 TF=0 的活动串起来就是关键路径。
③ 例题手把手(把前面的推演结果汇成总表)
| 活动 | ES | EF | LS | LF | TF = LS−ES | FF |
|---|---|---|---|---|---|---|
| A | 0 | 3 | 0 | 3 | 0 ★ | 0 |
| B | 3 | 8 | 3 | 8 | 0 ★ | 0 |
| C | 3 | 7 | 5 | 9 | 2 | 0 |
| D | 8 | 14 | 8 | 14 | 0 ★ | 0 |
| E | 7 | 12 | 9 | 14 | 2 | 2 |
| F | 14 | 16 | 14 | 16 | 0 ★ | 0 |
逐行演示两个非关键活动的算法:
- C 的 TF = LS − ES = 5 − 3 = 2 天(含义:C 最多晚开始 2 天,总工期不变);
- C 的 FF = min(紧后 E 的 ES) − EF_C = 7 − 7 = 0 天(含义:C 只要晚 1 天,紧后的 E 就被迫晚开始——虽不影响总工期,但会吃掉下游的机动时间);
- E 的 TF = 9 − 7 = 2 天;FF = 紧后 F 的 ES − EF_E = 14 − 12 = 2 天(E 晚 2 天以内,谁都碍不着);
- 连 TF=0 的活动:A→B→D→F,就是关键路径,总工期 16 天,与枚举法双验证 ✔;
- 本例 C 演示了经典考点"FF=0 但 TF>0":不耽误总工期 ≠ 不耽误下游。
④ 易错陷阱
- FF ≤ TF 恒成立,算出 FF > TF 必有一步错了,立刻回查;
- FF 是"紧后 ES 的最小值"减"我的 EF",多个紧后时别忘 min;
- 关键活动 TF=0 且 FF=0,但非关键活动 FF 也可能等于 0(如本例 C)——别拿 FF=0 判关键路径;
- 答含义题时两个时差的"对象"别说反:TF 对总工期,FF 对紧后活动的最早开始。
五、赶工:花钱买时间,怎么花最省
① 生活例子引入
两个快递都能让你的包裹早到一天:顺丰加急 20 元,某通加急 5 元——都早到一天,当然选 5 元的。赶工题就是这道选择题:同样压缩 1 天,选"每天赶工费最便宜"的关键活动压。
② 公式卡片
| 概念 | 含义 |
|---|---|
| 赶工(Crashing) | 给关键活动加资源换时间,代价是直接成本上升 |
| 快速跟进(Fast Tracking) | 原本串行的活动改为部分并行,代价是返工与风险上升 |
| 赶工三原则 | ① 只压关键路径(压非关键=白花钱);② 每压一步重新判定关键路径;③ 从"每天赶工费最低"的活动开始压 |
③ 例题手把手
题目:接上面的网络(关键路径 A-B-D-F = 16 天,次关键 A-C-E-F = 14 天)。可压缩情况:
| 活动 | 可压缩上限(天) | 每天赶工费(千元) |
|---|---|---|
| A | 1 | 2.0 |
| B | 2 | 3.0 |
| C | 1 | 2.5 |
| D | 3 | 1.5 |
| E | 2 | 2.0 |
| F | 不可压 | — |
第一问:16 天压到 14 天,最少花多少钱?
- 列出关键路径 A-B-D-F 上各活动的单价:A 2.0、B 3.0、D 1.5(F 不可压);
- 比价:D 最便宜(1.5 千/天),上限 3 天,够压;
- 压 D 2 天:A-B-D-F = 3+5+4+2 = 14 天 ✔;
- 复查次关键路径:A-C-E-F = 14 天,恰好并列关键,没有更长的路径顶上来,达标;
- 花费 = 2 天 × 1.5 = 3.0 千元;
- 反面教材:若压 B 2 天(3.0 千/天)也能到 14 天,但要花 6.0 千——先比单价再动手,能省一半。
第二问:再压到 13 天,还要加多少钱?
- 现状:两条路径并列关键(都是 14 天),必须同时压短两条,只压一条另一条就顶上来顶死;
- A-B-D-F 侧比价:D 还剩 1 天余量(1.5 千/天)< A(2.0)< B(3.0)→ 再压 D 1 天;
- A-C-E-F 侧比价:E(2.0 千/天)< C(2.5)→ 压 E 1 天;
- 验证:A-B-D-F = 3+5+3+2 = 13 ✔;A-C-E-F = 3+4+4+2 = 13 ✔;
- 增加花费 = 1×1.5 + 1×2.0 = 3.5 千元;
- 两问合计 = 3.0 + 3.5 = 6.5 千元,最终工期 13 天,双关键路径。
④ 易错陷阱
- 压了非关键活动:工期没变钱白花——动手前先确认活动在当前关键路径上;
- 压完不重新判定:次关键路径随时可能顶上来变成新关键路径,每压一步重画一次账;
- 并列关键后只压一条:总工期纹丝不动;
- 概念混搭:花的是钱→赶工;并行干活、冒返工险→快速跟进;"资源不够挪一挪、工期可能变长"→资源平衡;"只在时差内挪、工期不变"→资源平滑。
术语卡
| 术语 | 一句话解释 |
|---|---|
| AON | 单代号网络图:节点表示活动,箭线表示先后逻辑 |
| 关键路径 | 起点到终点耗时最长的路径,决定总工期,可有多条 |
| 总时差 TF | 不影响总工期的最大可推迟量 |
| 自由时差 FF | 不影响紧后活动最早开始的最大可推迟量,恒不大于 TF |
| 赶工 | 加资源压缩关键活动历时,用成本换时间 |
| 快速跟进 | 串行活动改并行,用风险换时间 |
| 资源平衡 | 消除资源过载的排期调整,可能延长工期 |
自测题(1 道综合题,先自己做再展开答案)
题目:某项目活动如下:A(2 天,起点);B(3 天,紧前 A);C(4 天,紧前 A);D(2 天,紧前 B、C)。求:(1) 关键路径与总工期;(2) B 的 TF 与 FF;(3) 画出全部四个活动的 ES/EF/LS/LF 表。
参考答案(点击展开)
(1) 关键路径与总工期
- 枚举路径:A→B→D = 2+3+2 = 7 天;A→C→D = 2+4+2 = 8 天;
- 8 > 7 → 关键路径 A→C→D,总工期 8 天。
(2) B 的 TF 与 FF(需先推 ES/EF/LS/LF)
正推:A:ES=0,EF=2;B:ES=2,EF=5;C:ES=2,EF=6;D:ES=max(5,6)=6,EF=8。
逆推:D:LF=8,LS=6;B:LF=LS_D=6,LS=6−3=3;C:LF=6,LS=2;A:LF=min(3,2)=2,LS=0。
- B 的 TF = LS−ES = 3−2 = 1 天(B 最多晚 1 天,总工期不变);
- B 的 FF = ES_D − EF_B = 6−5 = 1 天(B 晚 1 天以内,D 的最早开始不受影响)。
(3) 汇总表
| 活动 | ES | EF | LS | LF | TF | FF |
|---|---|---|---|---|---|---|
| A | 0 | 2 | 0 | 2 | 0 ★ | 0 |
| B | 2 | 5 | 3 | 6 | 1 | 1 |
| C | 2 | 6 | 2 | 6 | 0 ★ | 0 |
| D | 6 | 8 | 6 | 8 | 0 ★ | 0 |
自查:TF=0 的是 A、C、D,连起来正是关键路径 A-C-D ✔;本例 B 的 FF=TF=1,与正文 C 活动的"FF=0、TF=2"对照着记。