软件工程 |关键路径法
关键路径法 (CPM) 是一种用于项目计划的方法,通常用于按时完成项目的项目调度。它实际上有助于确定整个项目可以完成的最早时间。该方法有两个主要概念,即关键任务和关键路径。关键任务是不能延迟的任务/活动,否则整个项目的完成将被延迟。它必须在开始其他相关任务之前按时完成。
关键路径是一系列关键任务/活动,是项目网络中最大的路径。它为我们提供了完成整个项目所需的最短时间。关键路径中的活动被称为关键活动,如果这些活动被延迟,那么整个项目的完成也会被延迟。
关键路径法的主要步骤:
- 识别活动
- 构建项目网络
- 使用前向和后向传递执行时间估计
- 确定关键路径
下表包含活动标签、其各自的持续时间(以周为单位)及其先例。我们将使用关键路径法来寻找这个项目的关键路径和活动。
Activity | Duration (in weeks) | Precedents |
---|---|---|
A | 6 | – |
B | 4 | – |
C | 3 | A |
D | 4 | B |
E | 3 | B |
F | 10 | – |
G | 3 | E, F |
H | 2 | C, D |
Activity-on-Node网络图设计规则:
- 一个项目网络应该只有一个起始节点
- 一个项目网络应该只有一个终端节点
- 一个节点有一个持续时间
- 链接通常没有持续时间
- “先例”是紧接在前的活动
- 时间在项目网络中从左到右移动
- 网络不应包含循环
- 网络不应包含悬挂
节点表示:
- 活动标签是该节点所代表的活动的名称。
- 最早开始是可以最早开始活动的日期或时间。
- 最早完成是可以最早完成活动的日期或时间。
- 最晚开始是最迟可以开始活动的日期或时间。
- 最迟完成是最迟可以完成活动的日期或时间。
- 浮点数等于最早开始和最晚开始或最早结束和最晚结束之间的差值。
活动节点图:
前传:
执行前向传递以计算每个活动可以开始和完成的最早日期。
- 活动 A 可以立即开始。因此,其开始的最早日期为零,即 ES(A) = 0。完成执行需要 6 周。因此,最早可以完成的是第 6 周,即 EF(A) = 6。
- 活动 B 可以立即开始。因此,它开始的最早日期为零,即 ES(B) = 0。完成它的执行需要 4 周。因此,最早可以完成的是第 4 周,即 EF(B) = 4。
- 活动 F 可以立即开始。因此,它开始的最早日期为零,即 ES(F) = 0。完成它的执行需要 10 周。因此,最早可以完成的是第 10 周,即 EF(F) = 10。
- 活动 A 完成执行后,活动 C 立即开始。因此,它可以开始执行的最早周是第 6 周,即 ES(C) = 6。完成执行需要 3 周。因此,最早可以完成的是第 9 周,即 EF(C) = 9。
- 活动 B 完成执行后,活动 D 立即开始。因此,它可以开始执行的最早一周是第 4 周,即 ES(D) = 4。完成执行需要 4 周。因此,最早可以完成的是第 8 周,即 EF(D) = 8。
- 活动 B 完成执行后,活动 E 立即开始。因此,它可以开始执行的最早一周是第 4 周,即 ES(E) = 4。完成执行需要 3 周。因此,最早可以完成的是第 7 周,即 EF(E) = 7。
- 活动 G 会在活动 E 和活动 F 完成执行后立即开始。由于活动需要完成两者才能开始执行,因此我们将考虑 MAX(ES(E), ES(F))。因此,它可以开始执行的最早一周是第 10 周,即 ES(G) = 10。完成执行需要 3 周。因此,最早可以完成的是第 13 周,即 EF(G) = 13。
- 活动 H 会在活动 C 和活动 D 完成执行后立即开始。由于活动需要完成两者才能开始执行,我们将考虑 MAX(ES(C), ES(D))。因此,它可以开始执行的最早周是第 9 周,即 ES(H) = 9。完成执行需要 2 周。因此,最早可以完成的是第 11 周,即 EF(H) = 11。
后传:
执行反向传递以计算每个活动可以开始和完成的最晚日期,而不会延迟项目的结束日期。
假设:最晚完成日期 = 最早完成日期(项目)。
- 假设LF(G) = 13,活动G 的最迟完成日期等于finish 的前一个活动的最早完成日期。完成它的执行需要3 周的时间。因此,它可以开始的最晚是第 10 周,即 LS(G) = 10。
- 根据假设LF(H) = 13,活动H 的最晚完成日期等于前一个完成活动的最早完成日期。完成它的执行需要2 周时间。因此,它可以开始的最晚是第 11 周,即 LS(H) = 11。
- 活动 C 的最晚结束日期将是 H 的最晚开始日期,即 LF(C) = 11。完成它的执行需要 3 周。因此,它可以开始的最晚是第 8 周,即 LS(C) = 8。
- 活动 D 的最晚结束日期将是 H 的最晚开始日期,即 LF(D) = 11。完成它的执行需要 4 周。因此,它可以开始的最晚是第 7 周,即 LS(D) = 7。
- 活动 E 的最晚结束日期将是 G 的最晚开始日期,即 LF(G) = 10。完成其执行需要 3 周。因此,它可以开始的最晚是第 7 周,即 LS(E) = 7。
- 活动 F 的最晚结束日期将是 G 的最晚开始日期,即 LF(G) = 10。完成其执行需要 10 周。因此,它可以开始的最晚是第 0 周,即 LS(F) = 0。
- 活动 A 的最晚结束日期将是 C 的最晚开始日期,即 LF(A) = 8。完成其执行需要 6 周。因此,它可以开始的最晚是第 2 周,即 LS(A) = 2。
- 活动 B 的最晚结束日期将是 D 和 E 的最晚开始日期中的最早日期,即 LF(B) = 7。完成其执行需要 4 周。因此,它可以开始的最晚是第 3 周,即 LS(B) = 3。
识别关键路径:
关键路径是给我们或帮助我们估计整个项目可以完成的最早时间的路径。在这条关键路径上的任何活动延迟都会导致整个项目的完成延迟。为了确定关键路径,我们需要计算每个活动的活动浮动。活动浮动实际上是一项活动的最早开始日期与最晚开始日期之间的差异,或活动最早完成日期与最晚完成日期之间的差异,它表示在不延迟整个项目完成的情况下可以延迟多少活动。如果一项活动的浮动为零,则该活动是一项关键活动,必须添加到项目网络的关键路径中。在此示例中,活动 F 和 G 的浮动为零,因此是关键活动。