欢迎来到关键路径分析(Critical Path Analysis)的世界!
你有没有想过,建造摩天大楼、发布新款智能手机,甚至是筹办一个音乐节这些庞大的工程,是如何准时完成的呢?它们背后运用了一种称为关键路径分析 (CPA) 的技巧。在决策数学 (Decision Mathematics 1) 的这一章中,你将学会如何将一个大项目拆解成较小的工序,找出哪些工序最紧急,并计算完成整个项目所需的最短时间。
如果刚开始接触时觉得数据繁杂,不必担心——这本质上只是一份“待办事项清单”转化成的逻辑地图。让我们开始吧!
1. 项目建模:活动网络 (Activity Network)
在进行任何计算之前,我们需要将项目可视化。我们使用活动网络。在本课程中,我们采用活动在弧上 (Activity on Arc, AOA) 的方法。
关键术语
- 活动 (Activity):需要时间和资源的任务(以弧/箭头表示)。
- 事件 (Event):活动的开始或完成点(以节点/圆圈表示)。
- 优先级表 (Precedence Table):一份清单,列出每个活动以及在其开始前必须完成的任务(即其紧前活动/先行任务)。
虚活动 (Dummies) 的规则
有时候,我们需要绘制一条虚线箭头,称为虚活动 (dummy)。虚活动的持续时间为零。我们使用它主要基于两个原因:
- 显示依赖关系:如果活动 C 同时依赖于 A 和 B,但活动 D 只依赖于 B,我们就使用虚活动将 B 连接到 C,而不会将 A 连接到 D。
- 唯一性:每个活动必须由其起始节点和结束节点唯一标识。如果两个活动在相同的事件开始和结束,我们就使用虚活动为它们提供独立的路径。
类比:想想穿衣的过程。你必须先穿袜子才能穿鞋。“穿袜子”是一个活动,“穿鞋”是另一个活动,而你完成穿袜子的那一刻就是一个“事件”。
重点小结:活动网络是项目的地图,箭头代表任务,圆圈代表里程碑。虚活动只是保持逻辑清晰的“隐形”连接器。
2. 前向递推与后向递推 (Forward and Backward Pass)
当网络绘制完成后,你需要找出每个节点的最早事件时间 (EET) 和最晚事件时间 (LET)。我们通常会在每个节点旁画一个分成两半的小方格来记录这些数据。
前向递推 (计算 EET)
我们从起点(节点 0)开始,时间为 0。我们由左至右穿过网络。
- 对于每个节点,检查所有指向它的活动。
- 规则:EET = \( \text{max}(\text{前一个节点的 EET} + \text{活动的持续时间}) \)。
- 为什么要取最大值? 因为只有在所有相关任务中最慢的一个完成后,该里程碑才算达成。
后向递推 (计算 LET)
我们从最后一个节点(EET 与 LET 相同)开始,由右至左进行。
- 对于每个节点,检查所有从该节点出发的活动。
- 规则:LET = \( \text{min}(\text{下一个节点的 LET} - \text{活动的持续时间}) \)。
- 为什么要取最小值? 为了确保从该节点出发的所有活动都能按时完成。
常见错误:学生经常在前向递推时取最小值,或在后向递推时取最大值。请紧记:前向 = Max (最大),后向 = Min (最小)。
重点小结:前向递推告诉你各项任务最早何时开始;后向递推则告诉你若不延误整个项目,各项任务最迟何时必须完成。
3. 确定关键路径 (Critical Path)
关键路径是决定项目总工期的活动序列。如果路径上的任何活动延误哪怕一秒钟,整个项目都会延误。
如何找出它:
- 寻找关键活动。若一项活动(从节点 \( i \) 到节点 \( j \))满足以下条件,即为关键活动:
- 节点 \( i \) 的 EET 等于其 LET。
- 节点 \( j \) 的 EET 等于其 LET。
- \( \text{节点 } j \text{ 的 LET} - \text{节点 } i \text{ 的 EET} = \text{活动的持续时间} \)。
- 关键路径是由这些活动组成的、从起点到终点的连续路径。
你知道吗?一个项目可以有多于一条关键路径!如果两条不同的路径所需的总时间相同且为最长,那么它们都是关键路径。
重点小结:关键路径是“零浮动”地带,它是网络中最长的路径。
4. 总浮动时间 (Total Float)
对于不在关键路径上的活动,通常会有一定的“宽裕度”,这称为总浮动时间。
公式
对于起始节点为 \( i \)、结束节点为 \( j \) 的活动:
\( \text{总浮动时间} = \text{节点 } j \text{ 的 LET} - \text{节点 } i \text{ 的 EET} - \text{活动的持续时间} \)
将总浮动时间想象成你的“缓冲时间”。它是指在不拖慢整个项目的情况下,你可以延误该任务的时间长度。
关键点:关键活动的总浮动时间永远为零。
5. 甘特图 (Gantt Charts / Cascade Charts)
甘特图是一种将项目进度与时间线对照的可视化方法。
- 每个活动以一个横条表示。
- 横条的长度等于其持续时间。
- 关键活动通常列在最上方,并绘制为实心块。
- 非关键活动展示其持续时间,后面跟着虚线,代表其总浮动时间。
小贴士:在绘制初始图表时,始终将每个活动安排在其最早开始时间(即其起始节点的 EET)。
重点小结:甘特图让你一眼就能看出任务的进行时间,以及哪些任务有“灵活调度”的空间。
6. 资源平衡与下界 (Resource Levelling and Lower Bounds)
在现实世界中,人力并非无限。你需要计算完成项目所需的最低工人数量。
计算下界
要计算在关键时间内完成项目所需的最低人数,请使用以下公式:
\( \text{下界} = \lceil \frac{\text{所有活动的持续时间之和}}{\text{项目的关键时间}} \rceil \)
重要提示:符号 \( \lceil \dots \rceil \) 表示你必须向上取整到最接近的整数,因为你不可能雇佣半个工人!
重点小结:下界给出了员工配置的绝对“最佳情况”。现实中,如果许多任务同时进行,你可能需要更多人手。
摘要清单
考试前,请确保你能做到:
- 从优先级表绘制活动网络(并正确使用虚活动!)。
- 进行前向与后向递推,以找出 EET 和 LET。
- 识别关键路径和关键活动。
- 计算任何活动的总浮动时间。
- 构建甘特图。
- 计算所需工人的下界。
你一定没问题的!只要按部就班,逐个节点处理即可。