AStar算法优化
A星算法其實并不是最短路徑算法,它找到的路徑并不是最短的,它的目標首先是能以最快的速度找到通往目的地的路
A星算法也有很多弊端,就比如如果目的地不能到達 他還是會遍歷尋路(可以尋路的時候判斷 也可以算的上優化)
其次,如果地圖過大,計算起來會很消耗時間,所以可以在計算上進行優化
下面說一下優化的一些可行的方法
一.距離過長時
距離很大,中間有很多障礙物時,A星的算法就會遇到瓶頸,不斷加入的可行走點使得排序速度越來越慢,最后可能造成CPU阻塞無法動彈。很影響用戶的體驗,所以我們可以設置一些常用的路徑,在離線下算好放在數據文件中,游戲開啟時放在內存里,當需要尋路到那個節點或者那個節點附近時,就可以取出來直接使用,而不再需要計算。可以嘗試做一些導航點,當開始計算尋路時優先找到最近的導航點,之后只需要進行到達導航點的路徑就可以了
二.優化預測值計算方法
如果預測值只關注在于終點距離最近的點上,那么在尋路過程中的選擇點位的順序就會偏向于與終點更近的點。而如果預測值計算公式,關注的是整個距離較近的點位上,那么在尋路過程中在選擇點位上也就會偏向整條路徑短的方向上去靠。
預測值算法有很多種,例如 直來直去,可以斜著走,還有按三角形走等
三.排序算法的優化
每次從OpenList中取出最小值時,可以用排序算法事先將集合排序好,這樣節省了查找的時間,再每次插入的時候有序的插入.
也可以考慮采用二叉樹平衡樹結構進行存
四.CloseList的優化
實際上這個集合我們所用到的地方只有判斷是否走過這一個地方,為了避免頻繁判斷是否包含節點(因為每次判斷都需要遍歷一遍集合),可以給節點添加一個屬性 IsClose ,屬性設置為int 之后尋路系統中聲明一個靜態變量 用于比較是否被CloseSet包含,如果相等證明包含,不包含加到Close中,并將值付給節點,每次尋路將靜態變量++,這樣雖然會多占用寫內存,但是大大的節省了我們計算的時間
總結
- 上一篇: 大数据入门
- 下一篇: 【笔记】Altera - Quartus