游戲a演算法演算法
『壹』 A星演算法詳解(個人認為最詳細,最通俗易懂的一個版本)
在探索領域中,尋找最短路徑的問題經常需要使用到A*演算法。A*演算法是一種廣泛應用於路徑規劃和游戲開發中的啟發式搜索演算法。本文將通過詳細的步驟,深入解讀A*演算法的運作原理和實現細節。首先,我們假設目標是從A點移動到B點,其中兩點之間被一堵牆隔開。圖1展示了這個示例,其中綠色代表A點,紅色代表B點,藍色代表牆。
圖1展示了簡化後的搜索區域,我們將其劃分為正方形的格子。這一簡化方法將搜索區域轉化為二維數組,數組的每一項代表一個格子,其狀態為可走或不可走。通過計算從A點到B點需要經過哪些格子,我們可以找到一條路徑。當路徑確定後,角色將從一個格子的中心移動到另一個格子的中心,直至到達目的地。
在A*演算法中,搜索區域的簡化為節點(nodes)的引入提供了基礎。節點可以被放置在任意多邊形內,可以位於多邊形的中心,也可以位於邊線上。使用這種方法最簡單的原因在於其通用性,適用於不同形狀的搜索區域。
演算法開始於定義起點A,並將其加入到一個名為開放列表(open list)的集合中。開放列表是一個待檢查的格子列表,其中的格子可能是路徑的一部分,也可能是路徑的候選。隨後,我們檢查起點A的相鄰格子,並將其中可走的或可到達的格子加入開放列表中,同時將起點A作為這些格子的父節點。在追蹤路徑時,父節點的信息至關重要。
下一步是從開放列表中選擇一個與起點A相鄰的格子,重復上述過程。但選擇哪一格子則基於其F值最小的原則。F值是由G值(從起點A到特定格子的移動代價)和H值(從該格子到終點B的估算成本)相加得到的。
路徑排序涉及計算路徑中每個格子的F、G和H值。G值代表從起點A到指定格子的移動代價,橫向和縱向移動的代價為10,對角線移動的代價為14。這些數值簡化了計算過程,同時提高了演算法的執行效率。H值通過估計起點到終點的曼哈頓距離計算得出,即橫向和縱向距離的總和,忽略對角移動。
計算出G和H值後,我們得到F值,用於後續選擇操作。在選擇過程開始時,我們會遍歷開放列表,選擇F值最小的格子。這一過程不斷重復,直到將終點加入開放列表,路徑被找到。在每一步中,選擇的格子從開放列表移除,加入到關閉列表(closed list)中,表示不再需要關注的格子。
在搜索過程中,我們需要對選定的格子執行一系列操作。首先,將該格子從開放列表中移除並加入到關閉列表中。接著,檢查與該格子相鄰的格子,忽略那些已位於關閉列表中或不可走的格子。對於不在開放列表中的相鄰格子,將其加入開放列表中,並將選定的格子作為其父節點。若相鄰格子已在開放列表中,會檢查新路徑是否更優。如果新路徑更優,則更新該格子的父節點,並重新計算其F、G和H值。
在搜索過程中,我們不斷重復上述步驟,直到找到終點或確定無法找到路徑。當終點被加入開放列表後,搜索過程完成。此時,我們可以通過追蹤父節點從終點回溯到起點,找到最短路徑。
在實現A*演算法時,關鍵在於如何高效地維護開放列表和關閉列表,以及計算路徑代價(G、H和F值)。為了優化性能,可以採用排序數據結構(如二叉堆)來管理開放列表,以便快速找到具有最小F值的格子。在考慮其他單位、優化速度、地形損耗、維護未探測區域、平滑路徑以及處理非方形搜索區域時,A*演算法的實現細節變得更為豐富和復雜。通過閱讀相關的高級主題和參考資料,如Amit的A*頁面、Smart Moves: Intelligent Path Finding和Terrain Analysis等文章,可以進一步深入理解A*演算法的高級應用和優化策略。