[英]A* admissible heuristics on a grid with teleporters?
假設你有一個2D網格的單元格,其中一些是用牆填充的。 角色可以從一個正方形到任何與其一步水平或垂直的正方形,但不能穿過牆壁。
給定起始位置和結束位置,我們可以通過使用具有可允許啟發式的A *算法找到從起始位置到結束位置的最短路徑。 在目前的設置中,曼哈頓距離是可以接受的,因為它永遠不會高估到目的地的距離。
現在假設除了牆壁之外,世界上還有成對的傳送器。 踏上傳送器會立即將角色傳送到鏈接的傳送器。 傳送器的存在打破了上面給出的允許啟發式,因為通過使用傳送器來減少距離,可能比通過最佳曼哈頓距離步行更快地到達目的地。 例如,考慮這個線性世界,其中傳送器標記為T,開始位置標記為S,結束位置標記為E:
T . S . . . . . . . . . . . . . E . T
在這里,最好的路線是步行到左邊的傳送器,然后向左走兩步。
我的問題是: 在帶有傳送器的網格世界中,A *的一個很好的可接受的啟發式算法是什么?
謝謝!
如果您的世界中沒有太多的遠程傳送器,我會嘗試以下啟發式,其中MHD(a,b)
是單元格a
和b
之間的曼哈頓距離,而T(i)
是最接近單元格i
的遠程傳送器:
h(x,y) = min( MHD(x,y), MHD(x,T(x)) + MHD(T(y),y) )
形成傳送器的圖形:
使用Dijkstra算法計算從每個節點到結尾的最短距離。
您現在可以使用特定位置和所有節點之間的距離的最小值加上從節點到結束的預先計算的距離作為啟發式函數。 Dijkstra算法只需作為預處理步驟運行一次。 但是,如果傳送器的數量是單元數量的一個較大的百分比,則使用更簡單的啟發式功能可能無法獲得任何好處。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.