詳解關鍵路徑法,這可能是你能找到的最詳盡的了
小圱說
關鍵路徑法是PMP必考的知識點,我們在編寫《PMBOK指南》第六版輔導教材(暫定書名《PMP考試全解讀》)的過程中,對其進行了詳細的整理說明,除了明確考試的重點,還對其中考生常見的模稜兩可的知識點進行了圖解說明,現在分享給正在準備參加PMP考試的廣大考生。
【小圱注】文中圖表編號與《PMP考試全解讀》一致,沒有做調整。
01.什麼是關鍵路徑法CPM?
關鍵路徑法用於在進度模型中估算專案最短工期,確定邏輯網路路徑的進度靈活性大小。這種進度網路分析技術在不考慮任何資源限制的情況下,沿進度網路路徑使用順推與逆推法,計算出所有活動的最早開始ES、最早結束EF、最晚開始LS和最晚完成LF日期。
由此得到的最早和最晚的開始和結束日期並不一定就是專案進度計劃,而只是把既定的引數(活動持續時間、邏輯關係、提前量、滯後量和其他已知的制約因素)輸入進度模型後所得到的一種結果,表明活動可以在該時段內實施。
02.什麼是關鍵路徑法
關鍵路徑是專案中時間最長的活動順序,決定著可能的專案最短工期。
計算關鍵路徑的長度時,需要將路徑上的所有活動的持續時間、提前量(負的)和滯後量(正的)加總在一起。
最長路徑的總浮動時間最少,通常為零;進度網路圖可能有多條關鍵路徑。
長度僅次於關鍵路徑的路徑稱為次關鍵路徑,次關鍵路徑也可能有多條。
藉助進度計劃軟體來規劃時,為了達成相關方的限制要求,可以自行定義用於確定關鍵路徑的引數。
03.關鍵路徑法的作用
關鍵路徑法用來計算進度模型中的關鍵路徑、總浮動時間和自由浮動時間,或邏輯網路路徑的進度靈活性大小。
04.最早時間和最晚時間
1. 最早開始結束時間
ES:最早開始時間(Earliest Start),是指某項活動能夠開始的最早時間,只決定於專案計劃,只要計劃的條件滿足了就可以開始的時間。
EF:最早結束時間(Earliest Finish),是指某項活動能夠完成的最早時間。其中EF = ES+DU, DU為活動持續時間,順推法先知道開始時間。
2. 最晚結束和開始時間
LF:最遲結束時間(Latest Finish),是指為了使專案在要求完工時間內完成,某項活動必須完成的最遲時間。往往決定於相關方(客戶或管理層)的限制。
LS:最遲開始時間(Latest Start),是指為了使專案在要求完工時間內完成,某項活動必須開始的最遲時間。其中LS = LSF -DU,DU為持續時間,逆推法先知道結束時間。
3. 圖形表示
按照《PMBOK指南》的推薦,採用圖6-24的方式來標註活動的ES、EF、DU、LF、LS以及活動名稱(ID)
圖6-24
@提示:在考試中未必需要把圖6-24的格子畫出來,只需要按照圖中的方位進行標註就可以了,這樣做的好處時在計算TF和FF時不容易出錯。TF和FF的計算方法參見本節後續內容。
4. 活動從第0天開始還是從第1天開始
採用順推法和逆推法進行進度網路路徑計算時,需要關注活動是從第0天開始還是從第1天開始,不同的假設計算的結果是不一樣的。首先需要明確以下幾個概念。
活動的持續時間DU是指活動的工作時間段,例如一個活動持續時間是24小時,是指3個工作日(每天8小時)。
活動的開始時間是指活動開工日的上班開始時間;活動結束是指開工日的下班時間。也就是說假設一個活動的持續時間是2天,是指從第1天上班時間,到第2天下班時間的所有工作時間段。
所謂活動從第0天還是第1天開始,意思是說要不要把活動開始的那一天計算在工作時間段內。因為現實中第0天是不存在的,所以活動開始的那一天就不需要計算在內;而活動從第1天開始,由於第1天是存在的,就需要計算在工作時間段內。這兩種情況導致當前活動的EF或者LS,緊後活動的ES和LF在計算時要考慮是否減去或加上這1天的問題。
無論是從第0天開始,還是第1天開始,都不會影響關鍵路徑的和浮動時間的計算方法,但是考試中如果弄錯了則會影響計算結果,考試中為了簡化計算通常採用第0天開始,現實中為了與實際相符合通常採用第1天開始。下面就這兩種方式舉例說明。
圖6-25
第一種情況:活動從第0天開始。如圖6-25
計算公式如下:
(1) 對於當前活動:
順推時EF = ES + DU;
逆推時LS= LF – DU
(2)對於緊後活動:
順推時ESi= EFi-1,;
順推時LFi-1= LSi (例如逆推時活動C相當於活動D的緊後活動)
其中自左向右,“i”代表當前活動,則“i-1”代表“i”的緊前活動。
例如:對於活動A、B的最早時間:
EFA= ESA+DU = 0+5 = 5,
ESB= EFA= 5;
對於活動D和C的最晚時間:
LSD= LFD– DU = 30 -15 =15,
LFC= LSD= 15;
第二種情況:活動從第1天開始。如圖6-26
圖6-26
對於當前活動
順推時EF = (ES + DU)-1;
逆推時LS =(LF – DU)+1
對於緊後活動
順推時ESi= EFi-1+1;
逆推時LFi-1= LSi -1
其中自左向右,“i”代表當前活動,則“i-1”代表“i”的緊前活動。例如:
對於活動A、B的最早時間:
EFA= ESA+DU-1 = 1+5-1 = 5,
ESB= EFA+1= 5+1 = 6;
對於活動D和C的最晚時間:
LSD= LFD– DU+1 = 30 -15 +1 =16,
LFC=LSD-1 = 15;
@提示:從上兩種計算方法來看,活動從第0天開始顯然對人工計算來說更加直觀簡便,這種方法的缺點是與日曆日期的對應關係是不一致的。活動從第1天開始計算的結果與日曆日期是一致的,但是計算過程是不直觀的。好在考試中一般不會涉及具體的日曆日期,所以推薦使用活動從第0天開始的計算方法。
05.順推法與逆推法
自左向右計算最早時間稱為順推;自右向左計算最晚時間稱為逆推。
圖6-27
在順推時會出現如圖6-27(左)的情況,即當前活動有兩個和兩個以上的緊前活動,那麼當前活動的ES的取值應該遵循順推取最大的原則,
即ES0= MAX(EF1,EF2,……)
在逆推時也會出現如圖6-27(右)的情況,即當前活動有兩個和兩個以上的緊後活動,那麼當前活動的ES的取值應該遵循逆推取最小的原則,
即ES0 = MIN(EF1,EF2,……)。
@提示:順推法得到的最早工期代表專案期望的計劃工期;逆推法時設定的最晚工期代表相關方的期望工期。
1. 總浮動時間TF
定義:在任一網路路徑上,進度活動可以從最早開始日期推遲或拖延的時間,而不至於延誤專案完成日期或違反進度制約因素,就是總浮動時間或進度靈活性。
取值:在進行緊前關係繪圖法排序的過程中,取決於所用的制約因素,關鍵路徑的總浮動時間可能是正值、零或負值。
總浮動時間為正值,是由於逆推計算所使用的進度制約因素要晚於順推計算所得出的最早完成日期,即給定的工期比計劃的工期要長。
總浮動時間為負值,是由於持續時間和邏輯關係違反了對最晚日期的制約因素,即給定的工期要比計劃的工期要短。
計算方法:TF = LS – ES = LF – EF,即按照圖6-28箭頭所示的方向求值。
圖6-28
2. 負值浮動時間分析
關鍵路徑出現負的浮動時間意味著,如果不採取措施專案將延期。
負值浮動時間分析是一種有助於找到推動延遲的進度回到正軌的方法的技術,從而找到保證工期的途徑。
為了使網路路徑的總浮動時間為零或正值,可能需要調整活動持續時間(可增加資源或縮減範圍時)、邏輯關係(針對選擇性依賴關係時)、提前量和滯後量,或其他進度制約因素。
3. 自由浮動時間FF
自由浮動時間就是指在不延誤任何緊後活動最早開始日期或不違反進度制約因素的前提下,某進度活動可以推遲的時間量。
總浮動時間可能等於大於自由浮動時間,TF≥FF。
計算方法,如圖6-29所示
圖6-29
對於圖6-29(左)的情況:活動0的FF0= ES1– EF0
對於圖6-29(右)的情況:活動0的FF0= MIN{ (ES1– EF0),(ES2-EF0) ,……}
@提示:由於自由浮動時間的計算涉及前後活動之間的引數不容易記憶,只要記住圖6-29所示的計算方式就不容易搞錯了。
4. 專案浮動
一個專案可以延誤但不影響外界(如客戶或發起人)限制的完工日期的時間。例如客戶要求11.11號完工,專案團隊的計劃是在11.1完工,那麼二者之間就有10天的浮動時間;如果按照客戶要求日期完工,則專案浮動會反映在總浮動時間上。
關鍵路徑常見考點小結,請參考表6-7。
表6-7
06.關鍵路徑法完整的計算示例
請計算如表6-8所列活動的關鍵路徑,並完成順推計算最早時間和逆推計算最晚時間,計算所有活動的TF和“活動C”的自由浮動時間FF。
表6-8
第一步,畫出網路圖。如圖6-30(1)
圖6-30(1)
第二步:計算關鍵路徑。列出所有可能的路徑,比較其長度
路徑A-B-F長度為2+2+2 = 6
路徑A-C-F長度為2+3+2 = 7
路徑A-D-E-F長度為2+4+2+2 = 9
故關鍵路徑為A-D-E-F,長度為9
第三步:順推。計算最早時間,按照從第0天開始,如圖6-30(2)
圖6-30(2)
第四步:逆推。計算最晚時間,如圖6-30(3)
圖6-30(3)
第五步,計算所有活動的TF和活動C的FF。如圖6-30(4)所示。活動C的FF為:
FFc = ESF-EFc= 8 – 5 = 3
6-30(4)
【項圱原創】【歡迎轉發、嚴禁轉載】【版權所有、違者必究】
相關文章
- 可能是最詳細的字元編碼詳解字元
- 可能是史上最詳盡的 QEM 網格簡化演算法解釋演算法
- 這可能是你看過最詳細的NodeJS安裝配置教程NodeJS
- 這可能是最詳細的Python檔案操作Python
- iOS路徑相關的, 都在這了iOS
- Kafka原始碼篇 --- 可能是你看過最詳細的RecordAccumulator解讀Kafka原始碼
- 可能是最漂亮的Spring事務管理詳解Spring
- canvas路徑與子路徑詳解Canvas
- Android 動畫詳盡教程 [詳盡!詳盡!]Android動畫
- 最詳盡的 Swift 程式碼規範指南Swift
- 應有盡有!這可能是最全的 AI 面試筆記了AI面試筆記
- 前端魔法堂:可能是你見過最詳細的WebWorker實用指南前端Web
- 這可能是市面上最詳細的jQuery教程了!附贈原始碼限時免費領jQuery原始碼
- 【程式人生】這是 2017 關於程式設計師薪酬最詳盡的調查報告程式設計師
- 別找了,這是 Pandas 最詳細教程了
- Javascript中this關鍵字詳解JavaScript
- 關於對小程式網路請求的封裝(詳盡版)封裝
- 可能是全網最詳細的express--middlewareExpress
- “無法找到網路路徑”無法實現資源共享
- 未能找到路徑“in oslyncsc.exe”的一部分 的解決辦法
- Go 切片詳解(理解是關鍵)Go
- Python關鍵字yield詳解Python
- Python 關鍵字 yield 詳解Python
- 最全面最詳細的字符集講解來了!
- 詳解gitignore的使用方法,讓你盡情使用git add .Git
- 年底晉升,全網最詳細的通關指南來了!
- 詳解C++的模板中typename關鍵字的用法C++
- 詳解 C++ 的模板中 typename 關鍵字的用法C++
- 關於商業部署機器學習,這有一篇詳盡指南機器學習
- jQuery 的語法詳解jQuery
- Dota2白帽們,這可能是你實現夢想最後的機會了!
- 機器學習模型可解釋性的詳盡介紹機器學習模型
- 五一帶你找到最省旅遊路線【dijkstra演算法推導詳解】演算法
- C++ typeid關鍵字詳解C++
- C#9新關鍵詞詳解C#
- C語言中static關鍵字詳解C語言
- c# yield關鍵字原理詳解C#
- Java設計模式之單例模式,這是最全最詳細的了Java設計模式單例