在此把这个算法称作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*寻路算法(A* Pathfinding Algorithm)是游戏开发、地图导航、机器人路径规划等领域广泛应用的一种高效路径搜索算法。它结合了Dijkstra算法的全局最优性和BFS(广度优先搜索)的效率,通过引入启发式函数来指导搜索,...
A*(A-star)算法是一种广泛应用的路径搜索算法,它在自动寻路系统中起着核心作用。易语言是一种中国本土开发的、面向对象的编程语言,它以其简单易学的特点受到很多程序员的喜爱。这个“A*走路 自动寻路A*算法 ...
下载本程序仅可演示A*自动寻路算法实现(java),该程序是基于我写的网络版贪吃蛇基础上编写的(网络版贪吃蛇...wasd键控制太阳的方向,鼠标左击目的地,会根据A*自动寻路算法计算出一条最优路线,太阳按最优路线移动。
A*(A-star)寻路算法是一种广泛应用在游戏开发、地图导航、机器人路径规划等领域的高效路径搜索算法。它结合了Dijkstra算法的全局最优性和Greedy最佳优先搜索的效率,通过引入启发式函数来估计从当前节点到目标节点...
B*(B-star)寻路算法是A*(A-star)算法的一个改进版本,由Hart、Pohl和Nilson在1968年提出,旨在解决路径规划问题,特别是在环境变化或者不确定性较大的场景中。B*算法通过引入期望代价来动态调整节点的评估函数,...
A*寻路算法实现,模拟寻路算法,描述了A*寻路算法的具体实现可以在unity运作文件,可以到看到A*寻路算法的原理
A*(A-star)寻路算法是一种广泛应用在游戏开发、地图导航、机器人路径规划等领域的图搜索算法。它结合了Dijkstra算法的最短路径保证和Greedy最佳优先搜索的效率,通过引入启发式函数来指导搜索过程,使得在有限计算...
六边形A*寻路算法源码(As3版本)在六边形战棋类游戏中可以使用
**a*算法详解** a*(A-star)算法是一种在图形搜索中用于寻找从起点到终点最短路径的启发式搜索算法。它结合了Dijkstra算法的最优性和BFS(广度优先搜索)的效率,通过引入启发式函数来指导搜索方向,从而更快地...
用js写的实现的A*寻路算法(包含UI) 用js写的实现的A*寻路算法(包含UI)
5. **AStarPoint.cs**:这个文件可能定义了表示地图上节点的类,包括节点的位置信息、邻居关系、状态(是否被访问过)以及与父节点的关系。 6. **AStarPointBase.cs**:这可能是AStarPoint类的基类,包含了所有节点...
A*算法是自动寻路的理想解决办法 像自动寻找NPC 自动寻找地图出口 我写的这个只是简单的实现了功能 在运算效率上没有做优化 在接下来的版本中我会增加二*堆算法 来提高A*算法的效率 请大家多多关注 包中还有一个我用...
A*(A-Star)寻路算法是一种广泛应用在游戏开发、地图导航、机器人路径规划等领域的高效路径搜索算法。它结合了Dijkstra算法的全局最优性和Greedy Best-First Search算法的局部优先性,通过引入启发式函数来指导搜索...
A*寻路算法是计算机图形学、游戏开发和人工智能领域中的一个重要算法,它用于寻找从起点到终点的最短路径。本节将深入探讨A*算法的原理、工作流程及其在Unity引擎中的应用。 A*算法的核心思想是结合了Dijkstra算法...
总结,A*寻路算法是一种强大的路径搜索工具,它结合了启发式信息与实际成本,有效提高了搜索效率。理解并熟练运用A*算法,对于解决游戏开发中的路径规划问题至关重要。通过学习和实践,我们可以灵活地将其应用于各种...
使用A*算法求解迷宫寻路问题,使用python编程,人工智能导论课后实验
A*寻路算法,提供顶点信息矩阵和移动消耗矩阵,返回最短路径顶点列表