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