[圖] 8 AOE網-關鍵路徑|關鍵活動-原理
文章目錄
關鍵路徑
情景
【情景】:你、張三、王五、李四下午約在【叫一隻雞】炸雞店打牌,相約下午14點開始出發
【情況】是這樣子的:
- 【你】有摩托車,去車站需要15分鐘,從車站到店裡需要10分鐘
- 【張三】在鄉下,來縣城到車站需要30分鐘
- 【王五】步行,去店裡需要10分鐘
- 【李四】騎單車,去店裡需要15分鐘
【約定】你們做了一個安排:【張三】上來後,【你】去接【張三】來店裡
我們用【有向圖】表示這次【活動】:
活動發起時間14:00
張三到縣城 | 你到車站等張三 | 張三、你到店裡 | 王五到店裡 | 李四到店裡 | 開始打牌 | |
---|---|---|---|---|---|---|
ve最早發生時間 | 張三乘車到縣城需要 30min | 你去車站需要 15min |
你在車站等到張三後,立刻去店裡 從活動發起時間14:00需要 40min(30+10) |
王五步行到店裡需要 10min |
李四騎單車去店裡需要 15min |
活動發起14:00到最早開始打牌需要 40min,即14:40 等人到齊,就張三最慢,所以等張三來了,其他人準時到,就可以開始 |
vl最遲發生時間 | 張三從家裡去縣城最遲的出發時間 30-30=0,即14:00 |
你最遲出發去車站的時間 30-15=15min,即14:15 |
張三和你最遲從車站過來的時間為 40-10=30min,即14:30 |
王五最晚出發的時間是 40-10=30min,即14:30 |
李四最晚出發時間是 40-15=25min,即14:25 |
從ve的分析,我們可以知道,打牌的最早時間是14:40 即40min |
【補充】 vl表示,為了保證14:40能夠開始打牌,各個人最遲的出發時間。求vl時,應該從右邊往左邊求
【關鍵活動】“張三到縣城”,如果張三到縣城的時間耽擱了,那開始打牌的時間就得推遲了
【關鍵路徑】“張三到縣城”->“你到車站等到張三”->“張三、你到達店裡”->“開始打牌”
問題
用【有向網】表示一個【施工流圖】
- 【弧上的權值】:表示完成該專案【子工程】所需時間
- 整個工程【完成的時間】:從【有向圖】的【源點】到【匯點】的最長路徑
【問】 哪些子工程項是“關鍵工程”
【解釋】 關鍵工程:這個工作如果推遲完成,它會導致整個工程完成推遲
【定性來談】該弧上的權值增加,將使有向圖上的【最長路徑的長度】增加,這個【弧】稱之為【關鍵活動】或【關鍵工程】
AOE網
【AOE網】上面的圖有向圖即為AOE網
Activity On Edge Network,活動在邊上。用邊表示活動、活動的持續時間,用頂點表示活動發生或結束的事件。
【相關概念】
- 頂點:活動的開始或結束的事件
頂點1表示:活動a2、a3的開始
頂點6表示:活動a6、a7的結束 - 邊:活動的執行時間
- 源點:沒有入度,結點1
- 匯點:沒有出度,結點6
【關鍵路徑】從源點開始,到匯點結束的最大長度的路徑
- 圖中1->3->6,由a2、a6組成的路徑,長度為8
- 圖中1->4->6,由a3、a7組成的路徑,長度為9
【關鍵路徑】後者才是關鍵路徑,a3、a7叫關鍵活動
【關鍵】代表工程完成的最短時間 --> 關鍵路徑上的關鍵活動完成,所有工程才可能完成 --> 關鍵活動會影響整個工期,非常關鍵了
如何求關鍵活動
ve(j)
【含義】 事件(頂點)最早發生的時間
【解釋】這個事件(這個工作,這個工程)最早什麼時候能開始
【定性來談】ve(j)=從源點到頂點j的最長路徑長度
匯點(終點)的【最早發生時間】:即為整個工程能夠【最早完成的時間】
【解釋】中途不拖拉,一個工作完成,下一個工作立刻動手。整個工程保質保量的幹下來(效率最高),最早能夠完成的時間。我們記為plan_time,後面要用到
vl(k)
【含義】事件(頂點)的最遲發生時間vl(k)
【解釋】上面談到plan_time,與這個有關。假設,我們要在plan_time的時間內把整個工作做完,每個小工作最遲開始的時間稱之為【最遲發生時間】。也就是說,【小工程】最遲什麼時候開始,它不會影響總工程的按時的完成
【定性來談】vl(k)=從頂點k到匯點(終點)的最短路徑長度
演算法
假設第i條弧為<i,k>
則 第i項活動
- “活動(弧)”的最早開始時間ee(i):ee(i)=ve(j)
- “活動(弧)”的最遲開始時間el(i):el(i)=vl(k)-dut(<j,k>)
事件發生時間的計算公式:
ve(源點) = 0;
ve(k) = Max{ ve(j) + dut(<j,k>) }
vl(匯點) = ve(匯點)
vl(j) = Min{ vl(k)-dut(<j,k>) }
演算法實現要點
顯然,求ve的順序應該是按【拓撲有序的次序】
而,求vl的順序應該是按【拓撲逆序】的次序
因為,拓撲逆序序列即為【拓撲有序序列的逆序列】
因此,應該在拓撲排序的過程中,另設一個“棧”記下拓撲有序序列
例子
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | ||
---|---|---|---|---|---|---|---|---|---|---|
事件最早發生時間 | ve | 0 | 6 | 4 | 5 | 7 | 7 | 15 | 14 | 18 |
事件最遲發生時間 | vl | 0 | 6 | 6 | 8 | 7 | 10 | 16 | 14 | 18 |
【說明】vl為最遲發生時間,保證18天完成,每項工作最遲第幾天開始。求得時要從後面往前求
1-2 | 1-3 | 1-4 | 2-5 | 3-5 | 4-6 | 5-7 | 5-8 | 6-8 | 7-9 | 8-9 | ||
---|---|---|---|---|---|---|---|---|---|---|---|---|
最早開始加工時間 | ee | 0 | 0 | 0 | 6 | 4 | 5 | 7 | 7 | 7 | 15 | 14 |
保證14天內完成 最遲開始加工時間 |
el | 0 | 2 | 3 | 6 | 6 | 8 | 8 | 7 | 10 | 16 | 14 |
【說明】el這道工序最遲開始的時間
【關鍵活動】1->2、2->5、5->8、8->9
【說明】最早開始時間 與 最遲開始時間 相同的弧
【解釋】活動不能夠推遲的,兩個時間相同
【關鍵路徑】1->2->5->8->9
【解釋】該路徑就是圖中的最長路徑,如果最長路徑上因為一些事情耽擱了,權重邊長了,那麼工期就會被延長