視頻參考:6.6.4關鍵路徑2–求解關鍵路徑
一,什麼是關鍵路徑
【引例 1】某項目的任務是對A公司的辦公室重新進行裝修
如果10月1日前完成裝修工程,項目最遲應該合適開始?
(需要完成的活動、每個活動所需時間、及先期需完成工作如下圖所示)
【引例 2】準備一個小型家庭宴會,晚6點宴會開始,最遲幾點開始準備?壓縮哪項活動時間可以使總時間減少?
我們把工程計劃表示爲邊表示活動的網絡,即 AOE網,用頂點表示事件,弧表示活動,弧的權表示活動持續時間。
事件表示在它之前的活動已經完成,在它之後的活動可以開始。
【引例 3】設一個工程有 11項活動,9 個事件。
- 事件 v1 ---- 表示工程的開始(源點:入度爲0的頂點)
- 事件 v9 ---- 表示工程的結束(匯點:出度爲0的頂點)
對於AOE網,我們關心兩個問題:
- 完成整項工程至少需要多少時間? — 求關鍵路徑長度
- 哪些活動是影響工程進度的關鍵? — 求關鍵路徑上經過的頂點(活動)
關鍵路徑 — 路徑長度最長的路徑。
路徑長度 — 路徑上各活動持續時間之和。
最終,這道題就變成了求解關鍵路徑的問題。
二,求解關鍵路徑需要的4個描述量
確定關鍵路徑之前,我們需要定義4個描述量(以上圖爲例):
- ve(vj) ----- 表示時間 vj 的最早發生時間。
例:ve(v1) = 0、ve(v2) = 30 - vl(vj) ----- 表示時間 vj 的最晚發生時間。
例:vl(v4) = 180 - 15 = 165 - e(i) ---- 表示活動 ai 的最早開始時間。
例:e(a3) = 30 - l(i) ---- 表示活動 ai 的最晚開始時間。
例:l(a3) = 180 - 30 - 60 - 60 = 120
l(i) - e(i) ---- 表示完成活動 ai 的時間餘量。
例:l(3) - e(3) = 90
關鍵活動 ---- 關鍵路徑上的活動,即 l(i) == e(i)即(l(i) - e(i) = 0)
的活動。
三,如何求得關鍵路徑
那麼我們如何找到滿足 l(i) == e(i)
的關鍵活動?
設活動 ai 用弧 < j, k > 表示,其持續時間記爲:wj,k
則有:
- e(i) == ve(j)
- l(i) = vl(k) - wj,k
如何求得 ve(j) 和 vl(j) ?
- 從 ve(1) = 0 開始向前地推
ve(j) = Maxi{ ve(j) + wi,j },< i, j >∈T,2 ≤ j ≤ n
其中 T 是所有以 j 爲頭的弧的集合。 - 從 vl(n) = ve(n) 開始向後遞推
vl(j) = Minj{ vl(j) + wi,j },< i, j >∈S,1 ≤ i ≤ n-1
下邊我們通過一個例子來說明,求得關鍵路徑的步驟(視頻:28min開始)
關鍵路徑的討論
- 若網中有幾條關鍵路徑,則需要加快同時在幾條關鍵路徑上的活動。
如:a11、a10、a8、a7。 - 如果一個活動處於所有的關鍵路徑上,那麼提高這個活動的速度,就能縮短整個工程的完成時間。
如:a1、a4。 - 處於所有關鍵路徑上的活動完成時間不能縮短太多,否則會是的原來的關鍵路徑變成非關鍵路徑。這時,必須重新尋找關鍵路徑。
如:a1 由 6天變成 3天,就會改變關鍵路徑。