iT邦幫忙

2021 iThome 鐵人賽

DAY 25
0
自我挑戰組

後端工程師與圖的修練系列 第 25

關鍵路徑法 Critical Path Method

  • 分享至 

  • xImage
  •  

CPM (Critical Path Method) 關鍵路徑法,是一種構圖方法,主要用於確定專案執行任務的關鍵路徑,其中【關鍵路徑】是整個專案從開始到結束必須完成的最長任務路徑。

【關鍵路徑】這對專案評估者來說很重要,因為路徑上碰到任何問題都會阻撓專案項目前進而導致延遲; 一個項目可以有多個關鍵路徑,而使用 CPM 方法很常與 PERT 一起使用 (PERT 圖中都有評估時間)。

CPM 目標

  1. 確定在關鍵路徑上每個任務要花的時間
  2. 防止進度延誤

如 PERT 圖繪製時相同,每個任務的時間都會被確定下來,如下圖 [1]:

https://ithelp.ithome.com.tw/upload/images/20211005/20092753rdj4OiS7If.png

根據 1 所告知的 CPM 關鍵步驟是 (與 PERT 圖幾乎相同):

  1. 列出所有任務
  2. 確定任務執行順序
  3. 繪製有箭頭的網路圖
  4. 確定每個活動的時間
  5. 確定活動之間的依賴關係
  6. 找到關鍵路徑
  7. 隨著專案變化更新網路圖

解釋

對於 CPM 的術語有以下幾個對照解釋:

*任務持續時間: 通常一個任務【允許】、【差不多】做多久,可能會與有多少資源、整體還有多少任務,總無法一個任務做了一年都還沒有結果。

最早開始時間 (Earliest start time, ES): 該項目可以開始任務的最早時間,需要弄清楚是否有前置任務或其他開始條件,才能確定這點。

最晚開始時間 (Latest start time, LS): 必須開始任務的最後時間 (再不開始就完蛋了)。

最早完成時間 (Earliest finish time, EF): 參考任務持續的時間以及最早開始的時間,評估最快什麼時候完成。

最晚完成時間 (Latest finish time, LF): 參考任務持續時間以及最晚開始的時間,評估最慢什麼時候完成。

浮動時間 (Float or Slack): 浮動時間的意思是一個寬鬆、允許任務延遲的時間,你可能可以把這個任務推到多久之後才做的時間; 可以根據上述的時間來評估浮動時間。

崩潰任務持續時間 (Crash duration): 執行任務的最短工期,崩潰任務持續時間代表的是每個任務的最短持續時間 (至少要做 x 小時/天),執行資源(包含人力) 越少,崩潰成本就越高 (只有一個人做的工作,跟有 10 個人做的工作,大致上時間不一樣)

關鍵路徑拖曳 (Critical Path DRAG (Devaux's Removed Activity Gauge)): 如果把約束(條件) 加入到工作項目導致任務受到約束而要花費的時間

計算關鍵路徑的方法

  1. 建立一個 PERT 圖
  2. 把 PERT 圖每塊都簡化成一個節點

https://ithelp.ithome.com.tw/upload/images/20211005/20092753WTGeNZph2D.png

  1. 把 PERT 圖任務製作成一張表 (可根據之前文章中使用的 PERT 計算表,把預期時間直接列成一張表)

https://ithelp.ithome.com.tw/upload/images/20211005/20092753YsvgGb621g.png

上面至少都要包含活動對應的簡寫、詳細名稱、前置任務、預期時間,像是下圖 [4]:

https://ithelp.ithome.com.tw/upload/images/20211005/20092753Eqw1cM81RE.png

假設你已經有上面圖中這張表,那就把對應的 TaskID, Task Duration 填上節點位置,畫出來,而且把前置任務彼此連接 (Task Predecessors),如下圖 [4]。

https://ithelp.ithome.com.tw/upload/images/20211005/20092753pLB4BzEidj.png

並且,每一個物件的左右邊都有 ES, EF,這代表你需要填上 ES (最早開始時間), EF (最晚開始時間) ,請參考上述定義。

https://ithelp.ithome.com.tw/upload/images/20211005/200927531NyDla9mOJ.png

填上時間後,會得到下圖,如果有兩個前置任務,像是 D, E,他們的前置任務是 B, C,會依照前任務最晚的那個 EF (最晚完成時間) 當作 D, E 的 ES (最早完成時間),所以 D, E 的 ES 是根據 B, C 選一個最大 EF 的人當作他們 (D, E) 的 ES 時間。

https://ithelp.ithome.com.tw/upload/images/20211005/20092753DSR9EDZ97m.png

每個任務的 EF 會由他的最早開始時間和持續時間 t 給出,所以 EF = ES + t (如果一個任務 ES 是 20 小時,要做 10 小時才會好的話, EF 就會是 20 + 10 = 30 )。

現在要繪製關鍵路徑,最長的那條路徑就是關鍵路徑:

https://ithelp.ithome.com.tw/upload/images/20211005/200927539ZpvtnCiUg.png

這些 ES, EF 都是彼此有關連性的,所以最後一個 EF 就是這個整體專案所需完成的最短時間、最長時間。

這裡只有定義 ES, EF,其實也可以換成計算 LS, LF,他們各自是兩套相反的系統 [6]:

Forward Pass: 有 ES, EF, EF = ES + t

Backward Pass: 有 LS, LF, LS = LF -t

使用 CPM 規劃最重要的部分就是浮動時間,詳細的範例是,如果你要煎蛋餅,你必須先準備材料、加熱平底鍋、煎出蛋餅,額外可以再加上調味料,像是鹽巴、糖漿,現在你選出一個關鍵路徑是 【先準備材料、加熱平底鍋、煎出蛋餅】,則隨便拿裡面的例子舉例浮動時間,像是【加熱平底鍋】這個任務的浮動時間就是 0,因為他在關鍵路徑上,但是 【加鹽巴】、【加糖漿】可以先做後做都行,甚至可以在煎出蛋餅之後才加,因此浮動時間就會很大。

如果一個任務的浮動很大,就可以先推遲它,把其他重要的任務先做完; 反過來說,關鍵路徑上的任務都是 0 浮動時間的。

浮動時間計算: Float = LS - ES (上面只有帶入 ES, EF,事實上 LS, LF 也都要做出來)。

關於崩潰,由於文章都稱任務資源 Resource (其實我看起來可以用人力來解釋),所以參考文獻的資源我都會使用人力來解釋他。

崩潰是一個活動,如果你某個任務死線快到了,這時候主管要分配一大堆工程師來幫你 carry ,這個資源的調度就會被稱為崩潰,為什麼是崩潰?

因為把其他人手邊在做的事情都暫停過來幫忙 carry 任務已達成死線前交付,都會影響到關鍵路徑內外,所以通常都會在這幾種方式才會崩潰,其餘情形可能不推薦:

  1. 做完這件事的時間與原本的時間成正比,而且有好處
  2. 把某些正在做浮動時間很高的任務的人,調度來做這些事,畢竟那些任務都可以推遲

[6] 提到除非緊急狀況,否則通常不建議崩潰。

使用 CPM 的好處算是可以量化每個任務,清楚知道該如何進行,也可以掌握時間。

References:
[1] https://acqnotes.com/acqnote/tasks/critical-path-critical-path-method
[2] http://www.pmknowledgecenter.com/dynamic_scheduling/baseline/critical-path-method-cpm-incorporating-activity-timecost-trade-offs-project-schedule#:~:text=The%20crash%20duration%20is%20the,activity%20cost%20(crash%20cost).
[3] http://www.planningplanet.com/wiki/422733/critical-path-drag
[4] https://www.workamajig.com/blog/critical-path-method
[5] https://online.visual-paradigm.com/drive/#diagramlist:proj=0&new, (PERT Chart Arrow Diagram)
[6] https://www.projectmanager.com/critical-path-method


上一篇
Burnup/Down Chart
下一篇
ADM / PDM 網路圖
系列文
後端工程師與圖的修練31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言