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

你有沒有想過像興建摩天大樓、發射衛星,甚至是籌辦音樂節這類大型項目,是如何確保進度不落後的呢?它們就是運用了一種叫作關鍵路徑分析(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. 優化: 計算工人下限,確保資源運用效率。