欢迎来到关键路径分析(Critical Path Analysis, CPA)的世界!

你有没有想过像兴建摩天大楼、发射卫星,甚至是筹办音乐节这类大型项目,是如何确保进度不落后的呢?它们就是运用了一种叫作关键路径分析(Critical Path Analysis, CPA)的技术。在决策数学 1(Decision Mathematics 1)的这一章中,你将学会如何将复杂的项目拆解成独立任务,找出哪些任务最为迫切,并推算出完成整个项目的最快方法。别担心,刚开始看到一堆方框和箭头可能会觉得眼花缭乱,我们会一步一步来拆解!

1. 项目建模:活动网络(Activity Networks)

为了分析一个项目,我们首先需要将它可视化。我们使用的是活动网络(Activity Network)。在本课程中,我们特别采用的是箭线图法(Activity on Arc, AoA)

基础知识

活动(Activities): 这是指需要完成的具体任务(例如:“粉刷墙壁”)。它们以箭线(arcs)表示。每条箭头都有方向,代表时间的流动。
事件(Events): 这些代表活动的开始或完成点。它们以节点(nodes)表示(通常为圆圈)。节点本身不占用时间;它们只是“里程碑”。
优先级表(Precedence Table): 一份告诉你在开始其他活动之前,哪些活动必须先完成的清单。如果活动 B 依赖于活动 A,我们称 A 为 B 的直接前导活动(immediate predecessor)

“虚活动”(Dummy Activities)的奥秘

有时,你需要画一条虚线箭头,称为虚活动(Dummy Activity)。虚活动的持续时间为零。你需要它们的原因有两个:
1. 用于显示无法以其他方式绘制的特定优先级关系。
2. 确保两个节点之间仅由一个活动连接(每个活动都必须有唯一的起点节点和终点节点)。

类比:你可以把虚活动想象成一个“幽灵”工人,瞬间递交接力棒。他自己不做任何工作,但他会告诉下一个人:“好啦,你可以开始了!”

重点总结: 活动网络就是项目的地图。箭头是工作;圆圈则是工作开始或停止的时间点。

2. 推算时间:顺向及逆向运算(Forward and Backward Passes)

当网络绘制完成后,你需要计算事件时间(event times)。我们将节点的圆圈分成左右两半来记录这些时间。

顺向运算(最早开始时间,Earliest Event Times, EET)

我们从起点(节点 0)开始,向遍历网络,为每个节点找出最早事件时间(EET)。这是指所有前导活动都能完成的最早时间。
规则: 当多条路径汇集到同一个节点时,取最大值
\( EET = \text{max}(EET \text{ of previous node} + \text{duration of activity}) \)

逆向运算(最迟完成时间,Latest Event Times, LET)

我们从最后一个节点开始,向遍历,找出最迟事件时间(LET)。这是指在不延误整个项目的前提下,一个事件最迟可以发生的时间。
规则: 当向后遍历且多条路径汇集时,取最小值
\( LET = \text{min}(LET \text{ of next node} - \text{duration of activity}) \)

快速复习箱:
- 顺向运算: 从左到右,加总持续时间,取最大数值。
- 逆向运算: 从右到左,减去持续时间,取最小数值。

重点总结: 顺向运算告诉你项目的最短完成时间。逆向运算则告诉你还有多少“缓冲空间”。

3. 关键活动与关键路径

关键活动(Critical Activity)是指任何延误都会导致整个项目延迟的任务。在这里完全没有缓冲空间!

如何识别关键活动

连接节点 \( i \) 和节点 \( j \) 的活动若符合以下条件,即为关键活动:
1. 起点节点的 EET 和 LET 相同(\( e_i = l_i \))。
2. 终点节点的 EET 和 LET 相同(\( e_j = l_j \))。
3. 活动持续时间完全吻合:\( e_j - e_i = \text{duration} \)。

关键路径(Critical Path)是一条由起点节点到终点节点,由关键活动组成的连续路径。一个项目可能同时存在多于一条关键路径!

你知道吗? 如果你正在筹备婚礼,而“购买蛋糕”在关键路径上,但“购买鲜花”不在,那么蛋糕延误一天,整个婚礼就会延误。但鲜花延误一天可能完全没有影响!

重点总结: 关键路径是项目的“瓶颈”。如果你想更快完成,就必须缩短这条路径上的活动。

4. 总浮动时间(Total Float):你的“缓冲空间”

总浮动时间(Total Float)是指在不延误整个项目的前提下,一项活动可以被延迟的时间长度。

节点 \( i \) 与节点 \( j \) 之间活动的总浮动时间计算公式为:
\( F(i, j) = l_j - e_i - \text{duration}(i, j) \)

简单记忆法: 最迟完成时间减去最早开始时间,再减去任务本身的实际耗时。

常见错误提醒: 学生常会忘记关键活动的总浮动时间永远为 0。如果你算出来的关键活动浮动时间大于 0(例如 2),请重新检查你的 EET/LET 运算!

重点总结: 浮动时间反映了你在处理非紧急任务时有多大的灵活性。

5. 可视化进度:甘特图(Gantt Charts)

甘特图(Gantt Chart)(亦称级联图)是一种横条图,用以显示各个活动的发生时间。
- 每个活动都有一个代表其持续时间的长条。
- 长条后方通常会有虚线或阴影区域,用以标示其总浮动时间
- 关键活动通常列在最上方,且没有浮动时间的“尾巴”。

重点总结: 甘特图让管理者能轻松看出任何一天正在进行哪些任务。

6. 资源管理与排程

在现实世界中,人力资源并非无限。CPA 能帮助我们有效率地管理人员。

资源直方图(Resource Histograms)

资源直方图(Resource Histogram)是一种柱状图,显示在任何时间点所需的工人数量。我们通常假设每个活动正好需要一名工人(除非题目另有说明)。
通过在“浮动时间”内平移活动,我们可以进行资源均衡(Resource Leveling)。这意味着尽量保持工人数量平稳,而不是周一有 10 人工作,周二却只有 1 人。

计算工人的下限

如果你需要找出准时完成项目所需的最少工人数,请使用此公式:
\( \text{Lower Bound} = \frac{\sum \text{all activity durations}}{\text{Critical path duration}} \)
重要: 记得一定要无条件进位至整数。毕竟你无法聘请 2.3 个工人!

鼓励语: 资源均衡有时像解拼图一样。只要记住,你可以移动那些有“浮动时间”的活动,但绝对不能移动关键活动!

重点总结: 利用总工作量除以总时间来找出所需的最少人力。

CPA 最终总结

1. 建模: 根据优先级表建立箭线与节点的网络。
2. 计时: 使用顺向及逆向运算找出 EET 与 LET。
3. 分析: 识别关键活动(浮动时间 = 0)并找出关键路径。
4. 排程: 使用甘特图和直方图来管理工人和时间。
5. 优化: 计算工人下限,确保资源运用效率。