1. 程式人生 > >AOE網絡的關鍵路徑問題

AOE網絡的關鍵路徑問題

註意 問題 ont 例子 基礎 sea 時間 art 數據結構

關於AOE網絡的基本概念可以參考《數據結構》或者search一下就能找到,這裏不做贅述。

尋找AOE網絡的關鍵路徑目的是:發現該活動網絡中能夠縮短工程時長的活動,縮短這些活動的時長,就可以縮短整個工程的時長。因此,尋找關鍵路徑就是尋找關鍵活動。

接下來開始尋找一個工程中的關鍵路徑(關鍵活動)。

尋找關鍵路徑,每本教材都會提及四個特征屬性:Ve[],Vl[],e[],l[],此處可能還補充一個屬性:活動ai的時間余量,也就是l[i]-e[i],當某個活動的時間余量=0時,該活動就是關鍵活動。所以,尋找關鍵路徑(關鍵活動)也就是求解AOE網絡中所有活動、事件的上述特征屬性,然後發現時間余量為零的活動,這樣的活動就是關鍵活動。

至此,我們分析出,求解四個特征屬性就可以找到關鍵路徑。


Ve[i]:事件Vi的最早可能發生時間。
按照就是以起始事件為源點,類似於逆迪傑斯特拉算法求解單源點的最長路徑。
Vl[i]:事件Vi的最遲允許發生時間。
結束事件的最遲允許發生時間=最早可能發生時間,以此為基礎,按照逆拓撲序列求解前驅事件的Vl[],每次減去關聯兩個事件的具有最短時長的活動。
e[i]:活動ai的最早可能開始時間。
若活動ai由弧<.vk,vj>表示,則活動ai的最早開始時間應該等於事件vk的最早發生時間Ve[k]。因而,有:e[i]=ve[k];(即:邊(活動)的最早開始時間等於,它的發出頂點的最早發生時間)。
l[i]:活動ai的最遲允許開始時間。


若活動ai由弧<.vk,vj>表示,則ai的最晚開始時間要保證事件vj的最遲發生時間不拖後。 因而有:l[i]=Vl[j]-dur<.vk,vj>(為邊(活動)的到達頂點的最晚發生時間減去邊的權值)。


至此,所有計算完成,如果活動ai的e[i]=l[i],則ai是關鍵活動。

註意,如果某項工程中,多個關鍵活動構成了兩條或更多關鍵路徑,此時並不是縮短任意關鍵活動的時間都能縮短整個工程時間,而是要縮短所有關鍵路徑的公共關鍵活動的時間。

例子或者詳細概念,可以參考這篇博文:
http://blog.csdn.net/wang379275614/article/details/13990163

AOE網絡的關鍵路徑問題