Download presentation
Presentation is loading. Please wait.
Published by彥君 陳 Modified over 7 years ago
1
Activity Networks AOV 網路 AOE 網路
2
AOV 網路 (Activity on Vertx Networks) 為了表示一件工作中,各子工程間的先後 關係,我們可以利用有向圖中的有向邊代 表事情進行的順序,位於一條有向邊終點 的事件必須要等待起點的事情完成後,才 可以進行。 以頂點表示工作項目、以有向邊表示工作 進行順序的圖形被稱為頂點工作網路 (Activity on Vertx Networks) ,簡稱 AOV 網 路。
3
AOV 網路應該是一個不包含迴路的有向圖 如果網路中有迴路,則會造成死結 (deadlock) 現象。 如果網路中有迴路,則會造成死結 (deadlock) 現象。 在 AOV 網路中,如果不存在迴路,則所有 的事件可以排成一個線性序列,使得每個 事件的所有先驅事件都排在該事件之前, 這種序列稱之為「拓撲序列」。
4
AOV 網路
5
拓撲排序 (Topology Sort)
6
定義 假設 G=(V , E) 中, 對任何 (Vi , Vj) 為 G 的有向邊, 也就是存在一條有向路徑從 Vi 到 Vj , 則在走訪 G 中的所有頂點時,頂點 Vi 一定在 Vj 之前, 這種走訪順序為拓撲排序。 其中每一個頂點都可視為一個事件, 其中每一個頂點都可視為一個事件, Vi 就稱為 Vj 的先驅事件, Vi 就稱為 Vj 的先驅事件, Vj 則稱為 Vi 的後繼事件。 Vj 則稱為 Vi 的後繼事件。
7
演算法則 要建立拓撲序列,主要是重複下列兩大步 驟,直到找不到入分支度為 0 的頂點為止: 選擇一個入分支度為0的頂點輸出 選擇一個入分支度為0的頂點輸出 從網路中刪除該點的所有出邊 從網路中刪除該點的所有出邊
8
1. 由圖中頂點 C1 、 C2 的入邊數皆為 0 ,所以這二 個頂點都可以輸出,假設選擇頂點 C1 ,則輸出 C1 ,並從網路中刪除邊 (C1,C3) ; 2. 圖中頂點 C2 、 C3 的入邊數皆為 0 ,選擇頂點 C2 輸出,並刪除邊 (C2,C4) ; 3. 再由頂點 C3 、 C4 中,選擇頂點 C3 ,並刪除邊 (C3,C4) 、 (C3,C6) 、 (C3,C7) ; 4. 再依次輸出點 C4 、 C5 、 C6 、 C7 。 最後得到拓撲序列: 最後得到拓撲序列: C1→C2→C3→C4→C5→C6→C7C1→C2→C3→C4→C5→C6→C7
9
演算法 =>圖解演算法 F =1 ; S = {1} , V= { 0, 1, 2, 3, 4 } 01234 05020∞75
10
由陣列 D 中可看出 D(2) = 20 最少,因此將頂點 2 加入到 S 集合中: S = {1, 2 } V – S = {1, 3, 4} 頂點 2 的相鄰頂點有 1 和 3 ,則 D [3] = min(D[3], D[2] +A [2,3] ) = min (∞, 20+10)=30 D [1] = min(D[1], D[2] +A [2,1] ) = min (50, 20+25)=45 此時 D 陣列變成 01234 045203075
11
從 V – S = {1, 3, 4 } 找出 D 陣列的最小值是 D[3] =30 , 而頂點的相鄰點為 1 , 4 將頂點 3 加入 S 中, S = {0, 2, 3} , V – S = {1, 4} D [1] = min(D[1], D[3] +A [3,1] ) = min (45, 30+10)=40 D [4] = min(D[4], D[3] +A [3,4] ) = min (75, 30+35)=65 此時 D 陣列變成 01234 040203065
12
從 V – S = {1, 4 } 找出 D 陣列的最小值是 D[1] =40 , 而頂點的相鄰點為 4 將頂點 1 加入 S 中, S = {0, 1, 2, 3} , V – S = {4} D [4] = min(D[4], D[1] +A [1,4] ) = min (65, 40+10)=50 繼續將頂點 4 加入 S 中,則 S = {0, 1, 2, 3, 4} , V – S = {Φ} 此時已完成城市 0 至其他城市的最短距離。 而 D 陣列則變成 01234 040203050
13
=>演算虛擬碼 for ( i = 0; i < n; I ++) { if every vertex has a predecessor { fprintf(stderr, “Network has a cycle, \n”) ; exit (1) ; } else { pick a vertex v that has no predecessors; output v ; delete v and all edages leading out of v from the network ; }
14
=>演算程式碼 void topological ( int count [ ], int vertex, int link [ ], int n) { int top = 0, i, j, k ; for ( i = 1 ; i <= n ; i ++ ) if ( count [i] = = 0 ) { count [i] = top ; top = i ; }
15
for ( i = 1 ; i <= n ; i ++) { if ( top = = 0 ) { printf ( “network has a cycle” ); break ; } j = top ; top = count [top] ; printf ( “%d”, j ) ; ptr = link [j] ;
16
while ( ptr != 0) { k = vertex [ptr] ; count [k] = count [k] – 1; if ( count [k] = = 0 ) { count [k] = top ; top = k ; } ptr = link [ptr] ; }
17
範例 假設 AOV 網路如圖所示,其拓樸排序過程如下:
18
輸出 V1 ,並刪除 (V1 , V2) 與 (V1 , V6) 兩個邊。 此時 V2 和 V6 皆沒有前行者,若輸出 V2 則刪除 (V2 , V3) 與 (V2 , V4) 兩個邊。
19
選擇輸出 V6 ,並刪除 (V6 , V4) 與 (V6 , V5) 兩個邊。
20
AOE 網路 (Activity on Edge Networks)
21
AOV 網路
22
相關的名詞
23
最早開始/最脕開始時間 在 AOE 網路上所有的活動皆有的時間, 最晚開始時間指一活動在不影響整個計畫 完成之下,最晚能夠開始進行的時間。
24
臨界路徑 一個計畫所需完成的最短時間,是從起始點到結束 點間最長的路徑來算;而長度最長的路徑為臨界路 徑 (Critical Path) AOE 網路上的活動是可以並行處理的 AOE 網路上的活動是可以並行處理的 臨界路徑 (Critical Path) 可能不止一條 臨界路徑 (Critical Path) 可能不止一條 臨界活動分析的目的 辨別那些路徑是臨界路徑 (Critical Path) ,以便能夠集中資 源在這些臨界活動上,進而縮短計畫完成的時間。 辨別那些路徑是臨界路徑 (Critical Path) ,以便能夠集中資 源在這些臨界活動上,進而縮短計畫完成的時間。 AOE 網路的應用 即是在求得其臨界路徑,進而達到控制或評估專案績效的 目的。 即是在求得其臨界路徑,進而達到控制或評估專案績效的 目的。
25
計算最早開始時間 ES (j) 每個活動 j 的最早開始時間,計算公式如下: ES(j) = max { ES(j), ES(i) + ( i, j ) 時間 } 其中 i p ( j ) ,而 p( j ) 是所有與 j 相鄰頂點所成的集合。 再利用拓樸排序,每當輸出一個活動時,就修正 此活動到各活動之最早開始時間。 如果拓樸排序輸出是活動 j ,而活動 j 指向活動 k ,此時的 如果拓樸排序輸出是活動 j ,而活動 j 指向活動 k ,此時的 ES(k) = max { ES(k), ES(j) + ( j, k) 時間 }
26
現在以下圖的 AOE 網路為例,假設 ES(i) = 0 , 1 ≦ i ≦ 7 ,如下所示: ES1234567 開始 0000000
27
由於 1 沒有前行者,故輸出 V1 計算 V1 相鄰頂點 V2,V3,V5 的 ES : ES(2) = max { ES(2), ES(1) +( 1, 2 ) }=max( 0, 0+3 ) = 3 ES(2) = max { ES(2), ES(1) +( 1, 2 ) }=max( 0, 0+3 ) = 3 ES(3) = max { ES(3), ES(1) +( 1, 3 ) }=max( 0, 0+3 ) = 3 ES(3) = max { ES(3), ES(1) +( 1, 3 ) }=max( 0, 0+3 ) = 3 ES(5) = max { ES(5), ES(1) +( 1, 5 ) }=max( 0, 0+4 ) = 4 ES(5) = max { ES(5), ES(1) +( 1, 5 ) }=max( 0, 0+4 ) = 4 ES1234567 0330400
28
V3 亦無前行者,故計算其與相鄰的頂點 V 4, V5 的 ES : ES(4) = max { ES(4), ES(3) +( 3, 4 ) }=max( 0, 3+3 ) = 6 ES(5) = max { ES(5), ES(3) +( 3, 5 ) }=max( 0, 3+2 ) = 5 ES1234567 0336500 V2 亦無前行者,故計算其與相鄰的頂點 V 4的 ES : ES(4) = max { ES(4), ES(2) +( 2, 4 ) }=max( 6, 3+1 ) = 6 ES1234567 0336500
29
V4 無前行者,故計算其與相鄰的頂點 V5 , V6 , V7 的 ES : ES(5) = max { ES(5), ES(4) +( 4, 5 ) }=max( 5, 6+0 ) = 6 ES(5) = max { ES(5), ES(4) +( 4, 5 ) }=max( 5, 6+0 ) = 6 ES(6) = max { ES(6), ES(4) +( 4, 6 ) }=max( 0, 6+3 ) = 9 ES(6) = max { ES(6), ES(4) +( 4, 6 ) }=max( 0, 6+3 ) = 9 ES(7) = max { ES(7), ES(4) +( 4, 7 ) }=max( 0, 6+9 ) = 15 ES(7) = max { ES(7), ES(4) +( 4, 7 ) }=max( 0, 6+9 ) = 15 ES1234567 03366915 V6 無前行者,故計算其與相鄰的頂點 V7 的 ES : ES(7) = max { ES(7), ES(6) +( 6, 7 ) }=max( 5, 6+9 ) = 15 ES1234567 03366915
30
V5 無前行者,故計算其與相鄰的頂點 V7 的 ES : ES(7) = max { ES(7), ES(7) = max { ES(7), ES(5) +( 5, 7 ) }=max( 15, 6+5 ) = 15 ES(5) +( 5, 7 ) }=max( 15, 6+5 ) = 15 ES1234567 03366915
31
最後輸出 V7 。
32
計算最晚開始時間 LS (j) 每個活動 j 的最晚開始時間,計算公式如下: LS(j) = min { LS(j), LS(i) - ( i, j ) 時間 } 其中 i s( j ) ,而 s( j ) 是所有與 j 相鄰頂點所成的集合。 再利用拓樸排序,每當輸出一個活動時,就修正 此活動到各活動之最晚開始時間。 如果拓樸排序輸出是活動 j ,而活動 j 指向活動 k ,此時的 如果拓樸排序輸出是活動 j ,而活動 j 指向活動 k ,此時的 LS(k) = min { LS(k), LS(j) - ( j, k) 時間 }
33
同樣以前圖的 AOE 網路為例,假設 LS (i) = 15 , 1 ≦ i ≦ 7 ,如下所示: LS1234567 開始 15
34
求得臨界路徑 當下列三個條件成立時,便可求出二頂點 Vi 與 Vj 間的路徑是否為臨界路徑: (1) ES( i ) = LS( i ) (2) ES( j ) = LS( j ) (3) ES( j ) – ES(i) = LS( j ) – LS( i ) = a ij
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.