在此把这个算法称作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*)
衍生算法
通过以上封闭障碍,可以看出,这个方法在判断地图上的两个点是否可达上,也是非常高效的,在不可达情况下,时间复杂度与封闭障碍的周长相当,而不是整个地图的面积。
- 浏览: 153203 次
相关推荐
**B* 寻路算法详解** B*(B-star)寻路算法是A*(A-star)算法的一个改进版本,由Hart、Pohl和Nilson在1968年提出,旨在解决路径规划问题,特别是在环境变化或者不确定性较大的场景中。B*算法通过引入期望代价来...
B*寻路算法是A*算法的一个优化版本,它在效率和精度上都有显著提升。本文将深入探讨B*算法,并结合C#语言来讲解其实现细节。 B*算法由Stephen L. Gaver在1993年提出,旨在解决实时路径搜索的问题。与A*算法相比,B*...
### A*寻路算法详解 #### 一、引言 A*寻路算法是一种广泛应用于游戏开发、机器人路径规划等领域的重要算法。它结合了最佳优先搜索策略与启发式搜索技术,能够有效地找到从起点到终点的最短路径。尽管A*算法在初次...
Erlang B星寻路算法源代码 B*寻路算法源代码, 由C++改写而来。效率是A星算法的几十倍到上百倍。做为服务端怪物寻路的最佳选择。
A*寻路算法是一种在图形或网格环境中寻找最短路径的有效算法,广泛应用于游戏开发、地图导航和机器人路径规划等领域。算法的核心思想是利用启发式信息(H值)和实际代价(G值)来评估每个可能的路径,并优先考虑代价...
c++ 寻路 最小距离c++
用XNA4.0平台上写得A*和B*算法,其中B*算法有BUG的!由于时间关系没修复,但解决一般简单的路径是没问题的。只提供参考了解B*算法用。具体思路解释看代码注释。(ctrl + a进行A星算法,ctrl + b进行B星算法)
在这个"three.js算法寻路示例"中,我们将探讨如何结合three.js、Vue框架以及几种路径寻找算法来解决3D环境中的寻路问题。 首先,让我们了解`three.js`。Three.js是一个开源的JavaScript库,它为WebGL提供了一个高级...
**B星算法(B*)**,全称为Bandwidth Optimized A*,是A*寻路算法的一个变种,主要用于解决路径规划问题。在游戏开发、地图导航等领域中,B*算法因其高效性和准确性而被广泛应用。A*算法是基于启发式搜索的一种经典...
A星(AStar)和B星(BStar)寻路算法是计算机科学中用于解决最短路径问题的两种高效算法,尤其在游戏开发、图形界面、网络路由等领域广泛应用。这两种算法都是基于图的启发式搜索方法,旨在找到从起点到终点的最优路径。...
B*(B-Star)算法是一种用于路径搜索和寻路问题的图遍历算法,尤其适用于在带有不确定性和动态变化环境的场景中。它是由Hart、Pohl和N Nilsson在1972年提出的,是对早期A*算法的一种改进。B*算法在A*的基础上增加了...
A*寻路算法是路径搜索算法中的一种高效方法,尤其适用于带有障碍物的地图环境。本实例将详细介绍A*寻路算法,并提供完整的JS代码示例,以帮助开发者更好地理解和应用。 A*寻路算法的核心思想是结合了Dijkstra算法的...
本文实例讲述了js A*寻路算法原理与具体实现过程。分享给大家供大家参考,具体如下: 这两天研究了下 A* 寻路算法, 主要学习了这篇文章, 但这篇翻译得不是很好, 我花了很久才看明白文章中的各种指代. 特写此篇博客...
Java中A *寻路算法的实现。 在GUI应用程序中显示。 程序显示从点A到点B的最短路径,绕过任何不可遍历的(黑色)空间。 还显示通过算法观察到的在网格上任何空间到B点的启发式距离。 用法 ###编译并运行: 编译...
### 深入理解JS A\*寻路算法原理与具体实现过程 #### 一、A\*寻路算法概述 A\*寻路算法是一种广泛应用于游戏开发、机器人导航等领域的路径寻找算法。该算法结合了Dijkstra算法(一种经典的最短路径算法)和启发式...
A*寻路算法原理新手入门 A*寻路算法是计算机科学中的一种常用算法,用于寻找从起点到终点的最短路径。该算法广泛应用于游戏开发、机器人导航、交通网络优化等领域。本文将详细讲解A*寻路算法的原理,对新手入门有较...