大廠面試:求解集裝箱港口翻箱問題的最短路徑

摘要:針對集裝箱港口提箱過程中的翻箱問題,以最小化翻箱次數爲目標,構建基於狀態結點的網絡圖模型,將翻箱問題轉化爲最短路徑問題,並採用最短路徑算法進行求解,最後給出一組計算樣例。

1.集裝箱堆場翻箱問題

在集裝箱碼頭作業過程中,由於船舶抵港時間具有不確定性,可能出現集裝箱提箱順序與初始堆放位置不完全相符的情況,導致需要較早離場集裝箱被壓在後續離場集裝箱下層現象。所以提箱過程中不可避免需要進行翻箱,甚至當被翻箱落箱位置選取不當,會造成後續提箱的二次翻箱;翻箱過程存在如下定義:

(1)目標箱:某一堆存狀態下,預最先發箱的集裝箱爲該堆存狀態下的目標箱;

(2)必翻箱:若某集裝箱下方存在比其優先取箱的箱子,則該集裝箱爲相應堆存狀態下的必翻箱;

(3)阻塞箱:連續堆存在某集裝箱上方的必翻箱,爲相應堆存狀態下該集裝箱的阻塞箱;

如圖1所示爲某一貝位內的堆存狀態(6*6的貝位,且均爲20FT集裝箱,底部橫軸爲棧編號,左側縱軸爲層編號);當提箱順序爲C21->C15->C12時,可知當前堆存狀態的目標箱位C21,C12處於棧頂,不存在阻塞箱,可直接發出;而C15作爲後續堆存狀態的目標箱,其上方還有其他集裝箱;此時,定義C12,C13,C14爲目標箱C15的阻塞箱,同時C12,C13,C14稱爲當前堆存狀態的必翻箱;

圖1 堆存狀態

2. 基於狀態結點的網絡圖模型

(1)堆存狀態:指某堆存範圍內集裝箱的堆存情況,如圖1所示,即爲棧6-11的一組堆存狀態;翻箱過程中可行的堆存狀態應具有如下特點:

a):集裝箱不能懸空放置;

b):不考慮輕壓重等重量原則;

c):不允許超過堆存區域既定的最大堆高;

d):集裝箱位置不能超過作業機械所能達到的最大堆高;

(2)狀態結點:每一個可行的堆存狀態即可作爲一個狀態結點;

(3)結點可達:針對某一目標箱,若狀態結點A中的某一集裝箱經過翻箱操作後得到的堆存狀態與狀態結點B一致,則稱結點A可達結點B;

(4)權重取值: 且若結點A可達結點B,那麼結點A、B間存在方向A->B,且可計算A->B的翻箱次數,並將其作爲連接權重;

(5)網絡圖構建原理:以初始堆存狀態作爲根節點,將目標箱作爲層級劃分的標識。同時,將提箱過程中各層可能的堆存狀態作爲該層的葉子節點,完成提箱操作的堆存狀態作爲結束節點;構造形如圖2所示的樹狀網絡圖結構,並增加虛擬結束節點:

圖2狀態結點樹狀網絡圖

(4)網絡圖性質:分析可知,上述構造的堆存狀態樹狀網絡圖具有以下特徵:

特徵0:結束狀態層中,不存在待提集裝箱,此時堆存狀態可能爲空,也可能包括非待提箱;

特徵1:圖中入度爲0的點和出度爲0的點有且僅有一個(分別爲根節點和虛擬結束節點);其他節點的出度、入度均大於等於1;

特徵2:虛擬節點作爲後續節點與所有結束節點相連,且權重均等於0;

特徵3:上一層的目標箱在當前堆存狀態一定處於棧頂或已被提箱離場;

特徵4:由於提箱順序有優先級要求,結合特徵3,因此不存在跨層節點連接;

特徵5:由於不涉及預翻箱作業,則中間層每層至少存在一個狀態葉子節點,且兩兩狀態之間不可達;

特徵6:結合特徵4和特徵5可知,網絡圖爲有向無環圖;

至此,通過構建具有上述特徵的樹狀網絡圖,可將翻箱問題轉化爲尋找從根節點到虛擬結束節點的最短路徑問題,並採用最短路徑問題算法進行精確求解。

3. 計算樣例

(1)初始堆存狀態Node0;

(2)構造樹型網絡圖結構

結點信息如下:

(3)最短路徑問題求解

當前最短路徑支持Dijkstra's 算法(正權有向圖)、Floyd算法、0-1整數規劃等方式求解;此外,進一步結合特徵6可知,上述構建的最短路徑問題爲有向無環圖,因此可採用更爲高效的基於拓撲排序的快速求解算法求解;最終得到翻箱方案如下,翻箱次數爲1次;

參考文檔

本文分享自華爲雲社區《集裝箱港口翻箱問題的最短路徑求解算法》,原文作者:CKW@10270 。

點擊關注,第一時間瞭解華爲雲新鮮技術~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章