AStar算法优化

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

### 回答1: 六边形A*算法是一种基于六边形网格结构的路径规划算法。与常规的A*算法相比,六边形A*算法更适用于六边形地图的路径规划问题。 六边形A*算法的基本原理与常规的A*算法相似,都是通过优先级队列和启发式函数来搜索最短路径。但是,六边形A*算法在计算启发式函数时与常规的A*算法有所不同。 在六边形A*算法中,常规的A*算法中的距离代价函数需要进行修改。因为六边形的相邻关系与常规的网格结构不同,所以计算六边形之间的距离需要考虑六边形的形状和位置关系。 此外,六边形A*算法还需要特殊处理六边形的邻居关系,以确保在路径搜索过程中不会出现越过实际不可通过的区域。 六边形A*算法的主要步骤如下: 1. 初始化起点和终点,并将起点放入优先级队列中。同时将起点标记为已访问。 2. 从优先级队列中取出最低优先级的节点,并将其标记为已访问。 3. 对当前节点的所有邻居进行遍历,如果邻居未被访问过,则计算邻居的总代价,并将邻居放入优先级队列中。 4. 如果终点被访问到,则搜索结束,找到了最短路径。 5. 如果优先级队列为空且没有找到终点,则认为不存在可行路径。 六边形A*算法在路径规划问题中具有一定的优势,特别是在六边形地图中。它能够高效地搜索最短路径,同时避免越过不可通过的区域。然而,六边形A*算法的实现和优化还需要考虑到具体的应用场景和问题特点。 ### 回答2: 六边形 A* 算法是一种在六边形地图上进行路径搜索的算法。该算法是对经典的 A* 算法进行扩展,以适应六边形地图的特殊性。 六边形地图是一种类似蜂窝状结构的地图,每个六边形都有六个邻居。相比于传统的方块地图,六边形地图更加符合实际地理形态。而六边形 A* 算法就是为了应对这种六边形地图的特殊情况而设计的。 六边形 A* 算法的步骤与经典 A* 算法类似,首先需要确定起点和终点。然后,通过估计启发函数(heuristic function)计算每个节点的代价值,并选择代价最小的节点进行扩展。 与传统的 A* 算法不同的是,对于一个六边形节点,它有六个邻居,即六个可能的扩展方向。为了确保路径的连续性,六边形 A* 算法中使用了特殊的邻居选取策略。具体而言,当选择一个节点的邻居进行扩展时,优先考虑相对路径最短的邻居。 为了实现这一策略,可以使用一个特殊的六边形地图数据结构,对每个节点进行编码并记录其邻居关系。在搜索过程中,通过合理选择邻居节点,可以有效地减少搜索空间,提高算法的效率。 总而言之,六边形 A* 算法是一种适用于六边形地图的路径搜索算法。通过合理选择邻居节点并使用特殊的启发函数,该算法能够快速、准确地找到起点到终点的最短路径。 ### 回答3: 六边形 A* 算法是一种寻路算法,常用于处理六边形网格地图中的路径搜索问题。它是基于 A* 算法的扩展,通过改进 A* 算法来适应六边形网格的特殊结构。 六边形网格地图由一系列紧密相连的六边形组成,而不是传统的方形格子。在六边形 A* 算法中,我们需要定义合适的邻居节点关系以及估价函数。 首先,我们定义每个六边形的六个邻居节点,即相邻的六个六边形格子。这样我们可以通过遍历这些邻居节点来探索路径。 其次,估价函数的计算需要根据六边形网格的特点进行调整。传统的 Manhattan 距离或欧几里得距离并不适用于六边形。一种常用的估价函数是六边形的中心点到目标点的距离。 在算法运行过程中,我们使用优先队列来存储待访问的节点,并按照 F 值的大小对节点进行排序。F 值是由 G 值和 H 值相加得到的,其中 G 值表示起始节点到当前节点的实际代价,H 值表示当前节点到目标节点的估计代价。 在每次迭代中,我们从优先队列中弹出 F 值最小的节点,即代价最低的节点。然后计算该节点的邻居节点的 F 值,并将它们加入优先队列中。为了记录路径,我们还需要维护一个父节点指针指向每个节点的前驱节点。 最后,当目标节点被加入优先队列并弹出时,我们就找到了一条最短路径。通过回溯父节点指针,我们可以从目标节点一直追溯到起始节点,得到完整的路径。 六边形 A* 算法通过调整邻居节点关系和估价函数,能够有效地在六边形网格地图中寻找最短路径。它在游戏设计、机器人导航等领域都有广泛的应用。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值