天天看點

夜光精講 Opentcs 三大算法(七)路徑算法

夜光序言:

生活多麼無趣,但一則則無趣的生活編織在一起,才構成了生命的繁華。

夜光精講 Opentcs 三大算法(七)路徑算法

正文:

4.哈希表實作

(1)哈希表底層結構體的實作

夜光精講 Opentcs 三大算法(七)路徑算法

(2)哈希表節點類型

夜光精講 Opentcs 三大算法(七)路徑算法

(3)哈希表操作方法實作

夜光精講 Opentcs 三大算法(七)路徑算法

(4)時間複雜度和空間複雜度

空間消耗由維護局部更新資料和哈希表産生。假設地圖有n個點,那麼最多有n*n個需要插入的元索,tableSize大小設為n。

INSERT操作的最壞情況時間為0(1)。

DELETE操作的最壞情況時間為0(n)。

查找不成功的SEARCH操作的平均運作時間為0(n),最壞情況時間為0(n)。

查找成功的SEARCH操作的平均運作時間為0((n+U/2),最壞情況時間為0(n)。

哈希表存儲有較明顯的優勢:

a.通路速度快,存儲大小可拓展。

b.省去每次新路徑讀入時,都要重新計算視窗中相同起點終點出現次數的比較,提高算法的效率。保證輸出結果有較小的延時。

C.記錄維護各自的hash表。(分區域倉庫中毎個map/area都有自己的哈希表;整個倉庫有拓撲哈希表。這樣利于維護,隻需要更新局部資料)

評估函數和性能名額的确定

該系統的路徑解決方案設定一下以下評估名額:

1.距離Distance:小車行駛的路徑長度;

2.轉彎數目Tur ns:盡量避免小車的轉彎,進而提高運作速度和效率;

3.運作時間TravelTime:區分"距離"名額,對于相同長度的兩條邊,可能預設的限速值不同,進而經過兩條邊的用時也不同;

4.跳數Hops:一條路徑上經曆的點或區域地圖塊的數目越多,就需要AGV進行更多的坐标掃描定位和位置資訊上報通信,甚至需要AGV乘坐電梯進行跨區域任務,是以應盡量減少跳數,提高運作效率。

【沉下心來,好好研究】

函數實作和調用流程

給定要尋找的路的起始點和終止點(Point A->PointB)

1)首先要調用isRou table()判斷此兩點之間是否可達(可通行)

2)調用getCost()函數計算給定路徑的花費,

3)毎走一步,需要判定未經過的點是否可以通行(不能通行要上報,重新指派)

需要注意,當起始點和目标點是同一點時,傳回的路徑不為空(NULL),将此點放入路徑鍊路表中,是以AGV相當于在此點停留一次。

繼續閱讀