一種高效的尋路演算法 - B*尋路演算法
轉自:http://qinysong.iteye.com/blog/678941
在此把這個演算法稱作B* 尋路演算法(Branch Star 分支尋路演算法,且與A*對應),本演算法適用於遊戲中怪物的自動尋路,其效率遠遠超過A*演算法,經過測試,效率是普通A*演算法的幾十上百倍。
通過引入該演算法,一定程度上解決了遊戲伺服器端無法進行常規尋路的效率問題,除非伺服器端有獨立的AI處理執行緒,否則在伺服器端無法允許可能消耗大量時間的尋路搜尋,即使是業界普遍公認的最佳的A*,所以普遍的折中做法是伺服器端只做近距離的尋路,或通過導航站點縮短A*的範圍。
演算法原理
本演算法啟發於自然界中真實動物的尋路過程,並加以改善以解決各種阻擋問題。
前置定義:
1、探索節點:
為了敘述方便,我們定義在尋路過程中向前探索的節點(地圖格子)稱為探索節點,起始探索節點即為原點。(探索節點可以對應為A*中的開放節點)
2、自由的探索節點:
探索節點朝著目標前進,如果前方不是阻擋,探索節點可以繼續向前進入下一個地圖格子,這種探索節點我們稱為自由探索節點;
3、繞爬的探索節點:
探索節點朝著目標前進,如果前方是阻擋,探索節點將試圖繞過阻擋,繞行中的探索節點我們成為繞爬的探索節點;
演算法過程
1、起始,探索節點為自由節點,從原點出發,向目標前進;
2、自由節點前進過程中判斷前面是否為障礙,
a、不是障礙,向目標前進一步,仍為自由節點;
b、是障礙,以前方障礙為界,分出左右兩個分支,分別試圖繞過障礙,這兩個分支節點即成為兩個繞爬的探索節點;
3、繞爬的探索節點繞過障礙後,又成為自由節點,回到2);
4、探索節點前進後,判斷當前地圖格子是否為目標格子,如果是則尋路成功,根據尋路過程構造完整路徑;
5、尋路過程中,如果探索節點沒有了,則尋路結束,表明沒有目標格子不可達;
演示如下:
B*與A*演算法的效能比較
尋路次數比較(5秒鐘尋路次數)
B*與A*效能比較例項
1、 無障礙情況
此種情況,根據以上測試資料,B*演算法效率是普通A*的44倍(左為A*,右為B*)
2、線形障礙
此種情況,根據以上測試資料,B*演算法效率是普通A*的28倍(左為A*,右為B*)
3、環形障礙
此種情況,根據以上測試資料,B*演算法效率是普通A*的132倍(左為A*,右為B*)
4、封閉障礙(目標不可達)
此種情況,根據以上測試資料,B*演算法效率是普通A*的581倍(左為A*,右為B*)
衍生演算法
通過以上封閉障礙,可以看出,這個方法在判斷地圖上的兩個點是否可達上,也是非常高效的,在不可達情況下,時間複雜度與封閉障礙的周長相當,而不是整個地圖的面積。
相關文章
- 尋路之 A* 搜尋演算法演算法
- 關於尋路演算法的一些思考(11):尋路演算法的其他應用演算法
- 演算法修養--A*尋路演算法演算法
- 關於尋路演算法的一些思考(9):尋路者的移動成本演算法
- 尋路演算法之A*演算法詳解演算法
- 遊戲尋路中 A* 演算法的改進遊戲演算法
- kmp字串匹配,A星尋路演算法KMP字串匹配演算法
- A*尋路演算法詳細解讀演算法
- 地鐵圖快速尋路演算法演算法
- 尋路演算法-貪婪最佳優先演算法演算法
- 關於尋路演算法的一些思考(1):A*演算法介紹演算法
- JPS/JPS+ 尋路演算法演算法
- 關於尋路演算法的一些思考(4):A* 演算法的變體演算法
- 關於尋路演算法的一些思考(3):A*演算法的實現演算法
- 演算法:塔防遊戲中的路徑尋找演算法遊戲
- Unity實現A*尋路演算法學習2.0Unity演算法
- A星(A*)尋路演算法在iOS開發的運用演算法iOS
- 關於尋路演算法的一些思考(2):Heuristics 函式演算法函式
- 關於尋路演算法的一些思考(12):AI 技術演算法AI
- 關於尋路演算法的一些思考(7):地圖表示演算法地圖
- A*尋路
- 遊戲AI尋路——八叉樹+A*尋路遊戲AI
- A*尋路演算法 - 躲避障礙物 - 找到最短路徑演算法
- 一句話總結 7 種搜尋演算法演算法
- 基於RL(Q-Learning)的迷宮尋路演算法演算法
- 關於尋路演算法的一些思考(6):預先計算好的路徑的所用空間演算法
- 基於深度強化學習(DQN)的迷宮尋路演算法強化學習演算法
- elasticsearch演算法之搜尋模型(一)Elasticsearch演算法模型
- 蜂巢型六邊形A星尋路演算法unity完整流程演算法Unity
- A*搜尋演算法概述演算法
- 遊戲中的自動尋路-A*演算法(走斜線篇——帶DEBUG)遊戲演算法
- 關於尋路演算法的一些思考(10):最短路徑的使用者體驗演算法
- 圖論系列之「基於深度優先遍歷的尋路演算法 (Path) 」圖論演算法
- 基於Unity的A星尋路演算法(絕對簡單完整版本)Unity演算法
- A*演算法之在U3d下實現簡單的自動尋路演算法3D
- 基於禁忌搜尋演算法的TSP路徑規劃matlab模擬演算法Matlab
- A*搜尋演算法(python)演算法Python
- 演算法總結--搜尋演算法