RRT,RRT*,A*,Dijkstra,PRM算法
RRT:
實現:給定一個node_start, node_goal,隨機選擇一個node_rand,在node_list列表里選擇一個離node_random最近的點設置為node_nearest,然后沿著node_nearest朝node_random走step_length距離,找到一個node_new, 將其加入node_list。
重復上述過程直到找到一個node_new接近node_goal,然后再在得到的node_list中找到從node_start到最后一個node_new的列表就構成了path。
優勢:速度較快,概率完備
劣勢:通常不是最優路徑
https://blog.csdn.net/u013528298/article/details/80546175
RRT*:
實現原理于RRT,基本相同,但是RRT的最優化的版本。
1 不同:RRT會記錄每個頂點相對于其父頂點移動的距離。 這稱為頂點的cost()。 在圖中找到最近的節點后,將檢查距新節點固定半徑內的頂點鄰域。 如果找到比近端節點更便宜的 cost() 節點,則更便宜的節點替換近端節點。
2 不同:RRT樹的重新布線,當新的頂點連接到更便宜的節點后,再次檢查新節點固定半徑內的頂點,如果將其連接到新的頂點后(即將新的節點當作父節點)會使得其cost降低,則將新節點當作此節點的父節點連接上去。
Dijkstra:
實現:從綠色start開始對每個柵格進行遍歷,即對每個柵格的cost進行更新,一直迭代遍歷到黃色的goal為止,然后從goal再反向查找start即得最優路徑。
優勢:簡單
劣勢:環境太大的話,算法復雜度較高
https://www.guyuehome.com/5652
https://www.guyuehome.com/33665
A*算法:
實現:相對于Dijkstra算法,增加了每個節點到目標點的啟發函數,根據啟發函數構建最小代價的節點。
優勢:相對Dijkstra算法較快
劣勢:當目標較多的時候,會帶入大量重復數據和復雜的估價函數
A*算法和Dijkstra算法的比較:
Dijkstra算法計算源點到其他所有點的最短路徑長度,A關注點到點的最短路徑
Dijkstra算法的實質是廣度優先搜索,是一種發散式的搜索,所以空間復雜度和時間復雜度都比較高。對路徑上的當前點,A算法不但記錄其到源點的代價,還計算當前點到目標點的期望代價,是一種啟發式算法,也可以認為是一種深度優先的算法。
PRM算法:
相較于Dijkstra算法,PRM只是采樣了一個地圖中的一堆點,來進行A*等搜索算法的路徑搜索。
優勢:算得比較快
劣勢:概率不完備
總結
以上是生活随笔為你收集整理的RRT,RRT*,A*,Dijkstra,PRM算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 卷积神经网络的网络层与参数的解析
- 下一篇: conda配置清华镜像