A*算法啓發函數

A*算法是一種啓發式搜索算法,而啓發函數hn直接影響 A*算法的路徑規劃性能。假設當前節點到目標節點的實際代價值爲Hn,當hn < Hn時,搜索節點多,運算效率低,但可搜索到最優路徑;當hn = Hn時,是理想情況,沿最短路徑進行搜索, 且效率最高;當hn > Hn時, 搜索節點少,運算效率高,但通常難以搜索到最優路徑,擴展節點p(x1, y1),終點g(x2,y2),一個柵格移動到相鄰的柵格上的最小代D.。

1.Manhattan距離

h(n)=D*( | x1 - x2|+|y1 - y2| )

對於網格地圖來說, 如果只能四方向(上下左右)移動, 曼哈頓距離(Manhattan distance) 是最合適的啓發函數.

2.Euclidean距離

h(n) =D*sqrt(x1-x22+((y1-y2)2)) 

如果網格地圖可以八方向(包括斜對角)移動, 使用 切比雪夫距離(Chebyshev distance) 作爲啓發函數比較合適. 如果地圖中允許任意方向移動, 不太建議使用網格 (Grid) 來描述地圖, 可以考慮使用路點(Way Points) 或者 導航網格 (Navigation Meshes) , 此時使用 歐式距離(Euclidean distance) 來作爲啓發函數比較合適。歐式距離因爲有一個 sqrt() 運算, 計算開銷會增大。

3.Octile距離

dx=|x1- x2|

                                                 dy=|y1- y2|

k=D*sqrt2-1

h(n)=max(dx, dy) + k * min(dx, dy)

Octile 的核心思想就是假定只能做 45 度角轉彎.

4.Chebyshev距離

dx=|x1- x2|

dy=|y1- y2|

h(n)=D*max(dx,dy)

 

切比雪夫距離:各座標數值差的最大值

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