☞ 综合学习笔记:关键路径分析 (D1)
欢迎来到关键路径分析的世界!
你好!如果你正在学习决策数学 1 (Decision Mathematics 1),那么关键路径分析 (CPA) 无疑是其中最实用且最有趣的课题之一。如果刚开始觉得图论有些抽象,请别担心——CPA 本质上是一个用于高效规划和管理项目的强大工具。
我们要学什么? 我们将学习如何将一个复杂的项目(比如盖房子或开发产品)建模为网络图。随后,通过简单的算术计算,找出完成整个项目的最短时间,并识别出那些绝对不能延误的关键任务。这个最短时间就是所谓的关键路径 (Critical Path)。
第一部分:项目建模 – 活动网络图
1.1 活动、持续时间与先行关系
在动笔绘图之前,我们需要先了解项目的组成要素。
- 活动 (Activity): 需要执行的具体任务(例如:“打地基”)。活动是需要消耗时间的。
- 持续时间 (Duration): 完成该活动所需的时间(以小时、天或周为单位)。
- 先行关系/前置关系 (Precedence/Dependency): 在开始一项新活动之前,必须先完成哪些活动。这是构建网络图的核心信息。
例子: 如果活动 B 要求必须先完成活动 A,那么我们称 A 是 B 的直接先行活动 (Immediate Predecessor)。
1.2 绘制活动网络图 (AOA)
在决策数学中,我们通常使用箭线图法 (Activity on Arc, AOA)。
- 箭线 (Arcs/Arrows): 代表活动本身。活动名称及其持续时间标注在箭线上。
- 节点 (Nodes/Circles/Vertices): 代表事件 (Events)——即一系列活动已经完成、可以开始新活动的时刻。
方向规则: 箭头必须始终从较早的事件(节点)指向较晚的事件。
绘图的分步指南
- 从一个单一节点(节点 1)开始,作为项目的起点。
- 从节点 1 引出所有没有先行活动的箭线。
- 继续添加节点和箭线,确保只有在所有先行活动都到达前置节点后,后续活动才能开始。
- 以一个单一的最终节点结束整个网络。
⚠ 知识点小贴士: 可以把节点想象成火车站,把活动想象成火车行程。只有当上一班火车顺利到达后,你才能从车站出发!
1.3 核心概念:虚活动 (Dummy Activities)
这通常是最棘手的部分,但对于正确绘制网络图至关重要。虚活动是一个概念性的活动,它不消耗任何时间(持续时间 = 0)。它在图中用虚线箭头表示。
什么时候必须使用虚活动?
我们使用虚活动主要是为了确保网络图能准确反映任务间的依赖关系,主要有两个原因:
- 违反唯一性规则: 如果两个或多个活动共享完全相同的起始节点和结束节点。(这在 AOA 中是不允许的,因为它导致无法区分到底是哪个活动。)
-
复杂依赖规则(“重叠”规则): 这是最常见的原因。观察以下依赖关系:
- 活动 C 仅依赖于 A。
- 活动 D 依赖于 A 和 B。
💡 记忆辅助: 虚活动是数学上的必要手段,而非现实中的任务。它们帮助我们遵循准则:一个活动 = 一条唯一的箭线。
第一部分重点总结: 一幅绘制良好的网络图,能够通过节点及必要的零持续时间虚线箭头(虚活动),正确展示所有的任务(箭线)和依赖关系。
---第二部分:关键路径算法
网络图绘制完成后,我们需要进行时间计算。我们在每个节点中填入两个重要时间:最早开始时间 (EST) 和 最迟开始时间 (LST)。
我们通常在每个节点处使用标准的方框标记法,格式如下:
\[\n \begin{array}{|c|c|}\n \hline\n \text{EST} & \text{节点编号} \\\n \hline\n \text{LST} & \\\n \hline\n \end{array}\n \]
2.1 前向传递 (计算 EST)
任何节点处的最早开始时间 (Earliest Start Time, EST) 是该事件可能实现的最早时间。我们通过从起点向终点进行前向遍历来计算。
前向传递分步计算
- 起始节点: 第一个节点(节点 1)的 EST 永远为 0。
- 计算: 对于随后的任何节点,找到其前置节点的 EST,加上连接活动的持续时间。 $$ \text{EST}_{\text{下一节点}} = \text{EST}_{\text{当前节点}} + \text{持续时间} $$
- 最大值规则: 如果一个节点有多个进入的活动(箭线),你必须计算通向该节点的每一条路径的到达时间。该节点的 EST 取这些到达时间中的最大值。这保证了在下一阶段开始前,所有前置活动都已完全结束。
💭 类比: 想象同时参加几场比赛。整个项目只有当最慢的选手(时间最长的那条路径)冲过终点线时,才能开始下一轮活动。
最终结果: 最后一个节点的 EST 即为整个项目的最小完成时间。
2.2 后向传递 (计算 LST)
任何节点处的最迟开始时间 (Latest Start Time, LST) 是该事件在不延误整个项目最小完成时间的前提下,所能发生的最晚时间。我们通过从终点向起点进行后向遍历来计算。
后向传递分步计算
- 结束节点: 最后一个节点的 LST 等于其 EST(即项目的最小完成时间)。
- 计算: 对于任何节点,找到其后继节点的 LST,减去连接活动的持续时间。 $$ \text{LST}_{\text{当前节点}} = \text{LST}_{\text{下一节点}} - \text{持续时间} $$
- 最小值规则: 如果一个节点有多个发出的活动(箭线),你必须计算每一条发出路径所要求的开始时间。该节点的 LST 取这些时间中的最小值。这确保我们不会延误任何后续任务。
⚠ 常见错误警示: 同学们常会混淆规则!
- 前向传递 (EST): 看前向后,取最大值。
- 后向传递 (LST): 看后向前,取最小值。
第二部分重点总结: 前向传递找出绝对的最短时间 (EST),后向传递则在不超出该时间的前提下,找出各任务最晚可开始的时间节点 (LST)。
---第三部分:浮动时间与关键路径识别
CPA 最重要的产出是识别哪些任务是至关重要的(关键路径),以及哪些任务具有一定的灵活性(浮动时间)。
3.1 计算总浮动时间 (Total Float)
总浮动时间 (Total Float) 是指在不影响整个项目最小完成时间的情况下,某项活动可以被延误的时间量。它代表了该特定任务的“剩余时间”。
对于从节点 \(i\)(起始节点)到节点 \(j\)(结束节点)、持续时间为 \(D\) 的活动 \(X\),其总浮动时间的计算公式为:
$$ \text{总浮动时间} = \text{LST}_j - \text{EST}_i - D $$其中:
- \( \text{LST}_j \):结束节点的“最迟开始时间”。
- \( \text{EST}_i \):起始节点的“最早开始时间”。
- \( D \):活动的持续时间。
例子: 如果活动 A 的 EST 为 5,LST 为 15,持续时间为 8,则浮动时间为 \( 15 - 5 - 8 = 2 \)。这意味着活动 A 可以被延误 2 个单位时间而不会拖慢整个项目。
3.2 定义关键路径
关键路径是指那些总浮动时间为零 (Float = 0) 的活动序列。
- 这些活动是项目的“瓶颈”。如果任何关键活动被延误,整个项目将随之延误相同的时间。
- 在网络图中,关键路径通常用双线标记,或通过连接关键节点的加粗实线来表示。
如何识别关键节点: 若一个节点的 EST 等于其 LST,则该节点为关键节点。 $$ \text{EST} = \text{LST} $$ 关键路径就是连接这些关键节点的路径。
🗄 知识点小贴士: 将关键路径视为网络中最长、最慢的路径。因为它最长,所以它决定了总体时间。在非关键活动上节省的时间没有意义,但在关键活动上浪费的每一秒都会毁掉进度计划!
3.3 最小完成时间
最小完成时间 (Minimum Completion Time) 即最终节点的 EST。这是在所有任务高效执行的前提下,完成整个项目所需的最短时间。
🧩 速查宝盒:关键 CPA 术语
EST: 任务可开始的最早时间(前向传递,取最大值)。
LST: 任务必须开始的最晚时间(后向传递,取最小值)。
浮动时间 (Float): 剩余缓冲时间(LST 终点 - EST 起点 - 持续时间)。
关键路径: 浮动时间为零的活动链(绝对不可延误)。
第四部分:高级概念与常见陷阱
4.1 资源分配与约束(简述)
虽然基础的 CPA 确定了最短时间,但在现实中,我们经常面临资源约束(例如:只有两名建筑工,或只有一台机器)。
如果两个非关键活动计划同时进行但需要争夺同一有限资源,其中一个就必须延后。这种延后会消耗其浮动时间。我们必须始终确保活动的浮动时间不会耗尽,否则项目的最小完成时间就会增加。
4.2 考试中必须避免的常见错误
- 遗漏虚活动: 一定要仔细检查先行关系表。如果违反了唯一性或复杂依赖规则,必须插入虚活动(持续时间 = 0)。
- 混淆最大值/最小值规则: 记住口诀!EST = 进入路径的最大值;LST = 出发路径的最小值。
- 浮动时间计算错误: 确保使用正确的节点时间:结束节点的 LST 减去起始节点的 EST,再减去持续时间。
- 没有标出路径: 在考试中,如果题目要求确定关键路径,不仅要写出最短时间,还必须在网络图中用双线标出关键路径(或列出节点/活动)。
🎉 你没问题的! CPA 是非常程序化的。一旦你掌握了前向和后向传递,剩下的就是熟能生巧。多加练习绘制网络图,直到节点和虚活动的位置摆放成为你的肌肉记忆。
最终总结: CPA 将复杂的任务列表转化为稳健的进度表,清晰地标出那些最需要严密监控的活动,从而确保项目按时完成。