歡迎來到項目管理的世界!

你有沒有想過,像建造摩天大樓、發射衛星,甚至是舉辦大型音樂節這類龐大的項目,是如何確保進度不落後的呢?這可不僅僅是靠運氣,而是離散數學 (Discrete Mathematics) 的應用!在本章中,我們將探討關鍵路徑分析 (Critical Path Analysis, CPA)。你將學會如何將一個大型項目拆解成較小的任務,找出最重要的任務,並精確計算在整個項目延誤之前,你還有多少「緩衝時間」。

1. 基本概念:活動網絡 (Activity Networks)

要管理一個項目,首先需要將其視覺化。在本課程中,我們使用箭線式網絡圖 (Activity on Arc, AoA)

關鍵組件:

  • 弧線 (Arcs,即箭頭): 代表活動 (activities)(任務)本身。箭頭的長度並不重要,但方向至關重要!
  • 節點 (Nodes,即圓圈): 代表事件 (events),例如活動的開始或完成。
  • 優先順序 (Precedence): 有些任務必須在其他任務完成後才能開始。例如,在牆壁砌好之前,你無法蓋房子屋頂!

你知道嗎?關鍵路徑 (Critical Path) 其實是網絡中「最長」的路徑。這聽起來很奇怪,但因為你必須完成所有任務,最長的任務序列決定了整個項目所需的「最短」總時間。

快速回顧: 活動網絡展示了任務的邏輯順序。弧線 = 任務,節點 = 事件。

2. 「發散」與「合併」

在繪製或閱讀網絡圖時,你會遇到兩種常見情況:

  • 發散 (Burst): 這是一個節點,從這裡結束一個活動後,可以開始多個新的活動。看起來就像網絡向外「發散」。
  • 合併 (Merge): 這是一個節點,在下一個活動開始之前,多個活動必須全部完成。所有的箭頭都「合併」到這一個點上。

3. 計算時間:向前傳遞與向後傳遞

為了找出項目總時長,我們會在網絡中進行兩次「傳遞」。我們通常將節點分為兩或三個部分來記錄這些時間。

向前傳遞 (Forward Pass) - 最早開始時間 (Earliest Start Times)

我們從起點(時間 0)開始,向終點推進。

  1. 為每個節點計算最早開始時間 (EST)
  2. 如果多個活動合併到一個節點,則 EST 為 \( (\text{前一節點的 EST} + \text{活動時長}) \) 中的最大值

類比:如果你在等三位朋友到齊才能開始看電影,他們分別在 6:00、6:15 和 6:30 到達,你必須等到 6:30 才能開始。你永遠都要取「最晚」(最大)的那個時間!

向後傳遞 (Backward Pass) - 最晚完成時間 (Latest Finish Times)

一旦我們知道了總項目時間,我們就從終點向起點反向計算。

  1. 為每個節點計算最晚完成時間 (LFT)
  2. 如果一個活動從節點發散,則 LFT 為 \( (\text{後一節點的 LFT} - \text{活動時長}) \) 中的最小值

關鍵要點: 向前傳遞 = 最大值(找出我們最早能開始的時間)。向後傳遞 = 最小值(找出我們在不延誤終點的情況下,最晚能完成的時間)。

4. 識別關鍵路徑

關鍵活動 (Critical Activity) 是指沒有任何「緩衝空間」的任務。如果它延誤哪怕一秒鐘,整個項目都會延誤。
若要判斷一個活動是否為關鍵活動,需檢查:

  • 其起始節點的 EST 等於其起始節點的 LFT。
  • 其結束節點的 EST 等於其結束節點的 LFT。
  • LFT(結束節點)與 EST(起始節點)之差,正好等於該任務的時長

關鍵路徑: 這是一條由關鍵活動組成的、從起點到終點的連續路徑。

5. 關於「浮動時間」(Float)

浮動時間 (Float) 是指「備用時間」或「緩衝空間」。你需要了解三種類型:

總浮動時間 (Total Float)

這是指在不延誤整個項目的前提下,一個活動可以延遲的最大時間量。

公式: \( \text{Total Float} = \text{LFT(結束節點)} - \text{EST(起始節點)} - \text{時長} \)

干擾浮動時間 (Interfering Float)

這是指一旦使用,就會延遲後續活動開始時間的備用時間(即使它不會延遲項目的最終結束日期)。它會「干擾」你的鄰居!

公式: \( \text{Interfering Float} = \text{LFT(結束節點)} - \text{EET(結束節點)} \)

獨立浮動時間 (Independent Float)

這是「自私」的浮動時間。即使前置活動盡可能晚地完成,且後續活動盡可能早地開始,該活動仍可延遲的時間。它獨立於其他人的行為。

公式: \( \text{Independent Float} = \text{max}(0, \text{EST(結束節點)} - \text{LFT(起始節點)} - \text{時長}) \)

記憶小技巧:
總浮動: 整個項目的備用時間。
干擾浮動: 共享的備用時間(會影響下一個人)。
獨立浮動: 我個人專屬的備用時間。

6. 視覺化項目:級聯圖 (Gantt Chart)

級聯圖 (Cascade Chart) 幫助我們在時間軸上觀察項目。每個活動都以橫條表示。

  • 關鍵活動通常繪製為實心條。
  • 非關鍵活動顯示其持續時間,其總浮動時間通常以虛線表示。

為什麼要用它? 它對於資源平衡 (Resource Leveling) 非常有用。如果你只有 3 名工人,而圖表顯示你在週二需要 5 名工人,你可以利用「浮動時間」將非關鍵任務調整到週三或週四。

常見錯誤: 學生常忘記移動非關鍵任務可能會耗盡其浮動時間,導致其變為「關鍵任務」,或減少後續任務的浮動時間。在移動橫條時,請務必檢查邏輯!

總結檢查清單

  • 我能根據優先順序表繪製箭線式網絡圖嗎?
  • 我能計算 EST(向前傳遞 - 取最大值)和 LFT(向後傳遞 - 取最小值)嗎?
  • 我是否知道關鍵路徑是最長的路徑?
  • 我能計算總浮動、獨立浮動和干擾浮動時間嗎?
  • 我能使用級聯圖來為特定數量的工人安排項目進度嗎?

如果剛開始覺得幾種浮動時間有點複雜,別擔心!只要記住「浮動時間」歸根結底就是:(可用時間) - (所需時間)。你表現得很棒!