歡迎來到關鍵路徑分析 (Critical Path Analysis)!

你好,未來的項目經理們!這一章——關鍵路徑分析 (Critical Path Analysis, CPA),是決策數學 (Decision Mathematics) 中最實用且引人入勝的課題之一。它的一切核心都在於如何高效率地規劃複雜項目。

如果一開始看到網絡圖感到有點壓力,請不用擔心。我們會將項目規劃拆解為簡單的步驟:繪製任務流程、計算最早與最晚時間,並找出那些關鍵的「瓶頸」活動。學完這些筆記後,你將會掌握以最快速度完成任何項目的秘訣!

什麼是關鍵路徑分析?

  • CPA 是一個強大的數學工具,用於規劃、排程和管理大型項目(例如建造摩天大樓、發射衛星,甚至是籌備一場大型演唱會)。
  • 它的主要目標是確定完成整個項目所需的最短時間,並識別出哪些活動是絕對必須按時完成的。

第 1 節:基礎——活動與先行關係

1.1 活動與先行關係表 (Precedence Tables)

一個項目由個別的活動 (Activities)(任務)組成,每項活動都需要一定的時間(持續時間),並且必須按特定順序完成。

任務的順序稱為先行關係 (Precedence)。例如,在建造好牆壁(活動 A)之前,你無法粉刷牆壁(活動 B)。

我們使用先行關係表來列出所有活動、它們的持續時間,以及它們依賴於哪些活動。

關鍵術語:
  • 活動 (Activity): 需要時間和資源的任務(例如:挖掘地基)。
  • 持續時間 (Duration): 完成活動所需的時間(例如:5 天)。
  • 緊前活動 (Immediate Predecessor): 在此活動開始之前,必須先行完成的活動。

類比:想像一下準備上學的過程。在穿上襪子(活動 B)之前,你無法穿上鞋子(活動 C)。活動 B 就是活動 C 的緊前活動。

1.2 活動網絡圖 (Activity Networks - AOA Diagrams)

為了進行 CPA 計算,我們會將先行關係表轉換為稱為活動網絡圖的圖表,在 D1 中我們通常使用活動箭線圖法 (Activity on Arc, AOA)

在 AOA 圖中:

  • 任務(活動)由箭線 (Arcs) 表示。持續時間寫在箭線旁邊。
  • 箭線的起點和終點稱為節點 (Nodes)(或事件)。節點代表一個時間點,在此點上,一個或多個活動已經完成,而其他活動可以開始。

規則 1:開始與結束
每個項目都從單一的源節點 (Source node)(節點 1)開始,並在單一的匯節點 (Sink node) 結束。

規則 2:唯一節點
每個活動必須有唯一的起始節點和終止節點。兩個不同的活動不能在相同的兩個節點之間同時開始和結束。

第 1 節重點總結

網絡圖就是地圖。活動是路程(箭線),而節點是主要的里程碑(事件)。繪製地圖時,我們必須嚴格遵守先行關係的規則。


第 2 節:令人頭痛的虛活動 (Dummy Activities)

這通常是繪製網絡圖中最棘手的部分,但只要你記住它們存在的兩個主要原因,你就會覺得很簡單!

2.1 什麼是虛活動?

虛活動 (Dummy activity) 在網絡圖中由虛線箭頭表示。

  • 它的持續時間為零。它代表邏輯上的依賴關係,而不是一個耗時的任務。
  • 虛活動確保網絡圖的繪製規則被正確遵守。

2.2 何時使用虛活動?

我們引入虛活動主要有兩個原因:

原因 1:維持節點唯一性(規則 2)

如果活動 A 和活動 B 都從節點 1 開始並在節點 2 結束,這就違反了規則 2(兩個活動共享相同的起點和終點節點)。

解決方法: 我們必須引入一個虛活動來在邏輯上將它們分開。

原因 2:顯示複雜的依賴關係

這是最常見的用法。當一組活動依賴於部分(而非全部)已完成的先前活動時,就需要用到虛活動。

範例:

活動緊前活動
A-
B-
CA
DA 及 B

看看這個表格:

  • 活動 C 只依賴於 A。
  • 活動 D 依賴於 A B。

如果 A 和 B 都從節點 1 開始並在節點 2 會合,那麼 C 和 D 都會依賴於 A 和 B 在節點 2 的完成。這對 C 來說是不正確的!

解決方法: 我們需要拆分依賴關係。從 A 的終點引出一條虛活動到 B 的終點(或反之),這允許 D 依賴兩個完成點,而 C 只依賴於 A 的完成點。


記憶口訣: 如果你發現繪製時有兩個活動在同一對節點之間開始或結束,或者依賴關係與要求的流程不符,請考慮使用虛活動

避免常見錯誤!

不要將虛活動(邏輯連接,虛線,持續時間 0)與標準活動(實際任務,實線,持續時間 > 0)混淆。


第 3 節:時間計算——前向與後向遍歷

一旦網絡圖繪製正確,我們就可以利用每個節點上的一個特殊方框,計算出每個事件(節點)的最早和最晚時間。

這個方框通常看起來像這樣:

\[\n \begin{array}{|c|c|}\n \hline\n \text{EST} & \text{LST} \\\n \hline\n \end{array}\n \]

  • EST (Earliest Start Time): 從該節點出發的活動的最早開始時間
  • LST (Latest Start Time): 從該節點出發的活動的最晚開始時間(或進入該節點的活動的最晚完成時間)。

3.1 前向遍歷 (Forward Pass - 計算最早時間)

我們從節點 1 開始,在網絡中向前推進。這能計算出每個事件可能發生的最早時間。

所用公式: \[\n \text{下一節點的 EST} = \text{當前節點的 EST} + \text{活動的持續時間}\n \]

前向遍歷步驟:
  1. 開始節點(節點 1): EST 永遠為 0。
  2. 向前推進: 對於每個離開節點的活動,將其持續時間加上當前節點的 EST,即可算出該活動的完成時間。
  3. 最大值規則 (Maximum Rule): 當一個活動到達一個有「多個活動匯入」的節點時,該節點的 EST 取所有匯入時間中的最大值

    為什麼選最大值? 因為該事件(節點)只有在匯入的所有活動都完成後才能發生。如果三個任務分別在時間 5、8 和 10 完成,那麼你能開始下一階段的最早時間只能是 10。

  4. 最後匯節點的 EST 即為整個項目的最短完成時間

3.2 後向遍歷 (Backward Pass - 計算最晚時間)

我們從最後一個節點(匯節點)開始,在網絡中向後推算。這能計算出每個事件在不延誤整個項目的前提下,最晚可以發生的時間。

所用公式: \[\n \text{當前節點的 LST} = \text{下一節點的 LST} - \text{活動的持續時間}\n \]

後向遍歷步驟:
  1. 開始節點(最後節點): LST 設定為等於該點的 EST(即最短完成時間)。
  2. 向後推進: 對於每個進入節點的活動,從下一節點的 LST 減去其持續時間,即可算出該活動的最晚開始時間。
  3. 最小值規則 (Minimum Rule): 當計算一個有「多個活動出發」的節點的 LST 時,LST 取所有算出的最晚開始時間中的最小值

    為什麼選最小值? 該事件(節點)必須在接下來所有活動要求的最早開始時間之內完成。如果離開該節點的活動分別必須在時間 12、15 和 18 開始,為了不延誤任何一個活動,你必須在時間 12 之前完成該節點的工作。

計算快速複習:

前向遍歷: 從 0 開始,向前推,節點取最大值 (MAX)
後向遍歷: 從項目結束時間開始,向後推,節點取最小值 (MIN)


第 4 節:關鍵路徑與總浮動時間

既然我們已經有了每個節點的最早和最晚時間,我們就可以找出項目中最重要的部分。

4.1 關鍵路徑 (The Critical Path)

關鍵路徑是指從開始節點到結束節點的一連串活動,它決定了項目的最短總完成時間。

它是網絡中最長的路徑

如何識別關鍵活動:

當且僅當一項活動的延誤會導致整個項目延誤時,該活動才被稱為關鍵活動

在網絡圖上,關鍵路徑位於那些在活動的起始節點和終止節點上,EST 與 LST 相等的路徑上。

$$ \text{關鍵活動條件:} \quad \text{起始節點的 EST} = \text{起始節點的 LST} $$

提示:關鍵路徑通常用雙線畫出或進行高亮標註,以便在最終答案中清晰呈現。

4.2 總浮動時間 (Total Float)

並非所有活動都是關鍵的。非關鍵活動擁有一定的空餘時間——這種空餘時間稱為浮動時間 (Float)

總浮動時間是指在不影響整個項目最短完成時間的前提下,一項活動可以被推遲的最大時間量。

計算總浮動時間 (\(F\))

浮動時間是針對個別活動(箭線)計算的,而不是針對節點。

設 \(D\) 為活動的持續時間。

方法 1:使用完成時間 (EFT 和 LFT) $$ F = \text{最晚完成時間 (LFT)} - \text{最早完成時間 (EFT)} $$ 其中 \(EFT = EST + D\)。
其中 \(LFT = \text{終止節點的 LST}\)。

方法 2:使用開始時間 (EST 和 LST) $$ F = \text{最晚開始時間 (LST)} - \text{最早開始時間 (EST)} $$ 其中 \(LST = \text{終止節點的 LST} - D\)。
其中 \(EST = \text{起始節點的 EST}\)。

方法 3(最常用的計算方式): $$ F = \text{終止節點的 LST} - \text{起始節點的 EST} - \text{持續時間} $$

重要: 如果一項活動的總浮動時間為 0,這意味著它是一項關鍵活動。它沒有任何空餘時間。

你知道嗎?

浮動時間對於資源平衡 (Resource levelling) 至關重要。如果你有兩項非關鍵活動爭奪同一有限資源(例如同一位專門工程師),你可以利用浮動時間將其中一項活動安排在稍後進行,確保它們不會衝突。

4.3 解讀與總結

  • 在最後節點計算出的數值 (EST/LST) 即為最短項目持續時間
  • 關鍵路徑指出了必須密切監控的活動。任何此處的延誤都會導致整個項目延誤。
  • 具有較大總浮動時間的活動,在排程和資源分配方面提供了靈活性。
最後鼓勵:

CPA 結合了邏輯與算術。請清晰地繪製你的網絡圖,在進行前向和後向遍歷時保持耐心(特別要留意 MINIMUM 和 MAXIMUM 的規則),你一定能掌握這一章!多練習繪製那些棘手的虛活動情境,直到它們成為你的直覺。祝你成功!