A*算法

A*簡介

A*算法是一種在靜態路網中求解最短路徑最有效的直接搜索方法,也是解決許多其他搜索問題的有效算法。算法中的距離估算值與實際值越接近,擴展的節點數越少, 搜索速度越快。A*算法的估價函數的一般形式

                        f(n) = g(n) + h(n)

其中 f(n) 是從初始狀態經由狀態n到目標狀態的代價估計,g(n) 是在狀態空間中從初始狀態到狀態n的實際代價,h(n) 是從狀態n到目標狀態的最佳路徑的估計代價。而傳統的A*算法的 h(n) 多數採用Manhattan 距離和Euclidean 距離對目標狀態進行估計。因此傳統A*所規劃出來的路徑往往不具有連續的曲率且轉折次數過多等不滿足車輛運動學模型問題。

因爲A*算法是一種啓發式搜索算法,而啓發函數 h(n)直接影響 A*算法的路徑規劃性能。假設當前節點到目標節點的實際代價值爲H(n) ,當h(n) < H(n)  時,搜索節點多,運算效率低,但可搜索到最優路徑;當 h(n) = H(n)時,是理想情況,沿最短路徑進行搜索, 且效率最高;當 h(n) > H(n)時, 搜索節點少,運算效率高,但通常難以搜索到最優路徑[19]。而傳統的A*算法的 h(n)所使用 Manhattan 距離和Euclidean 距離對代價值進行估計。

 

 

A*算法執行步驟

創建兩個表 OPEN 和 CLOSED,其中 OPEN 表保存所有已經生成而未考察的節點, CLOSED 表保存已訪問過的節點。
1.將 S 點放入OPEN表中,並且將CLOSED表置爲空。
2.重複執行以下步驟:
(1)遍歷 OPEN,查找並將其作爲預處理節點。
(2)將步驟(1)得到的節點移入CLOSED表中。
(3)對於當前節點的4個相鄰節點的每一個節點作如下處理:
   ①如果其爲障礙物或者已經移入CLOSED表中,則忽略掉此節點。
   ②如果其不在 OPEN 表中, 則將其移入OPEN 表,並將當前節點設置爲其父節點,並記錄值。
   ③如果其已經在 OPEN 表中,通過對 OPEN表中節點再進行判斷,如果有更小值,則將其父節點設置爲當前節點,並重新計算和。
   ④將目標節點加入 OPEN 表中, 即表示路徑已經找到,否則查找失敗,且OPEN爲空,即無路徑。

 (4)保存路徑,路徑即爲從目標節點開始, 沿着父節點移動至起始節點所組成。

A* 算法作爲一種典型的啓發式搜索算法, 在人工智能尋徑問題有着廣泛的應用。其不必遍歷所有節點,搜尋速度快,但由於評估進行移動開銷預測, 所以可能存在找不到最優路徑的問題。

 

A*算流程圖

 

 

 

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