AStar算法优化

A星算法其实并不是最短路径算法,它找到的路径并不是最短的,它的目标首先是能以最快的速度找到通往目的地的路
A星算法也有很多弊端,就比如如果目的地不能到达 他还是会遍历寻路(可以寻路的时候判断 也可以算的上优化)
其次,如果地图过大,计算起来会很消耗时间,所以可以在计算上进行优化
下面说一下优化的一些可行的方法
一.距离过长时
距离很大,中间有很多障碍物时,A星的算法就会遇到瓶颈,不断加入的可行走点使得排序速度越来越慢,最后可能造成CPU阻塞无法动弹。很影响用户的体验,所以我们可以设置一些常用的路径,在离线下算好放在数据文件中,游戏开启时放在内存里,当需要寻路到那个节点或者那个节点附近时,就可以取出来直接使用,而不再需要计算。可以尝试做一些导航点,当开始计算寻路时优先找到最近的导航点,之后只需要进行到达导航点的路径就可以了
二.优化预测值计算方法
如果预测值只关注在于终点距离最近的点上,那么在寻路过程中的选择点位的顺序就会偏向于与终点更近的点。而如果预测值计算公式,关注的是整个距离较近的点位上,那么在寻路过程中在选择点位上也就会偏向整条路径短的方向上去靠。
预测值算法有很多种,例如 直来直去,可以斜着走,还有按三角形走等
三.排序算法的优化
每次从OpenList中取出最小值时,可以用排序算法事先将集合排序好,这样节省了查找的时间,再每次插入的时候有序的插入.
也可以考虑采用二叉树平衡树结构进行存
四.CloseList的优化
实际上这个集合我们所用到的地方只有判断是否走过这一个地方,为了避免频繁判断是否包含节点(因为每次判断都需要遍历一遍集合),可以给节点添加一个属性 IsClose ,属性设置为int 之后寻路系统中声明一个静态变量 用于比较是否被CloseSet包含,如果相等证明包含,不包含加到Close中,并将值付给节点,每次寻路将静态变量++,这样虽然会多占用写内存,但是大大的节省了我们计算的时间

你可能感兴趣的:(算法,游戏,unity3d,算法)