多車軌道路徑規劃演算法設計

查士丁尼發表於2021-09-09

場景:多車,走最頂層軌道方格,立方倉,多車共同取貨。

 

單車路徑規劃演算法選擇 

 

 

常用的最短路徑規劃演算法是Dijkstra、A*、D*演算法。

Dijkstra演算法效率低,D*是對A*的優化版本,減少計算量,區別在於D*以終點為搜尋開始點,適合環境變化的場景。優化在於,障礙物變更,可以利用之前的部分計算結果,離終點越遠,需要重新計算的計算量越小。由於專案場景最高是100*100的方格,A*已經足夠,而且A*的路徑更為優化,所以最終選擇使用A*演算法。

 

多車運動實現方法

多車運動需要考慮的問題是如何不卡死,問題類似於死鎖,容易想到的演算法是銀行家演算法、優先順序;每量車將要走下一步之前預判是否完成任務,如果不能,停止分配新空間。使用這個方法可以避免絕大多數情況的多車互卡的問題。只是有兩個問題:1.少數情況卡死;2.效率低,遠處的阻塞也會帶來小車等待

問題1是因為多車運動場景和死鎖的場景不同,無論如何小車都會佔用一定的空間,所以如果互鄰的車想走向對方位置,會發生互卡,為了避免卡死,選擇卡死時間過長會產生隨機運動的策略避免問題。

 

多車運動路徑規劃最優解

多車運動涉及到多輛小車的互相影響,阻塞等情況。如何尋找最優解。

理論上最優解只有兩種可能,第一種是公式,直接算出,第二種是窮舉法。

多車運動,是複雜場景,沒有公式直接算出。是需要根據當時情況隨時會變化。而每輛車,每一秒運動軌跡是(上、下、左、右、不動、取貨/放置)六種可能的狀態。假設完成一個任務可能需要10秒,假如總共5輛車,以一秒為時間單位,需要窮舉的可能性是6的5次方的10次方,也就是8*10的38次方,遠遠超過計算機運算能力,故最優解無法實現。

當前人類面對最優解不存在,又不想陷入區域性最優,所選擇的方法原理都一致:使用隨機數。例如:蟻群演算法、退火演算法、粒子演算法、遺傳演算法還有AlphaGo使用的蒙特卡洛隨機樹,本質都是加入一定的隨機數。所以為了避免多車運動陷入區域性最優卡死,必須引入隨機數。

 

引入隨機數帶來效率問題

引入隨機數會導致小車很容易發生隨機運動,重複來回移動,影響效率。

為了增加效率又不能陷入卡死困境,所以引入程式邏輯,儘量避免隨機運動:1.通過隨機數加權(類似蒙特利爾隨機樹),同一任務走過的路,隨機比重更低,有其他車路徑的路,隨機比重更低;2.通過程式邏輯設計,優先採取預設定會車策略,例如兩車相向行駛,互相阻塞前進道路,先輛車左旋嘗試避讓,失敗了右旋避讓……預設策略都失敗了,再使用隨機防卡死設計。

 

交通阻塞問題-時間片

多車同時走,由於演算法一致,容易發生都走一條路問題,為了避免交通擁堵,對每個方格做時間片設計,在a*演算法時,對不同方向做一定的加權,擁堵路段權重更低,同時對走直線進行直線加速,走直線權重更高。

相關文章