基于 alpha-beta 剪枝搜索算法的 五子棋游戏_基于栅格地图的在线图形剪枝寻路算法...

Online Graph Pruning for Pathfinding on Grid Maps

基于栅格地图的在线图形剪枝寻路算法

摘要:统一代价栅格地图下的路径寻优是移动机器人和电子游戏等领域下的一个常见问题。最新的层次寻路算法速度快,内存开销小,但通常返回次优路径。本文提出了一种具体到栅格、快速且不需要太高内存开销的新的搜索算法。我们的算法可以描述为一个大步运算符,它选择性地计算栅格地图中的某些节点,我们称之为跳转点。连接两个跳转点的路径上的中间节点不参与计算。我们证明了这种方法总是能得到最优解,并进行了深入的实证分析,并与文献中的参考算法进行了比较。我们发现,使用跳转点搜索可以将A-star的速度提高一个数量级甚至更多,并且相比目前的技术水平有显著的改进。

Abstract: Pathfinding in uniform-cost grid environments is a problem commonly found in application areas such as robotics and video games. The state-of-the-art is dominated by hierarchical pathfinding algorithms which are fast and have small memory overheads but usually return suboptimal paths. In this paper we present a novel search strategy, specific to grids, which is fast, optimal and requires no memory overhead. Our algorithm can be described as a macro operator which identifies and selectively expands only certain nodes in a grid map which we call jump points. Intermediate nodes on a path connecting two jump points are never expanded. We prove that this approach always computes optimal solutions and then undertake a thorough empirical analysis, comparing our method with related works from the literature. We find that searching with jump points can speed up A* by an order of magnitude and more and report significant improvement over the current state of the art.

1 引言

广泛应用于机器人技术(Lee和Yu,2009年)、人工智能(Wang和Botea,2009年)和视频游戏(Davis 2000年;Sturtevant,2007年)等领域,无处不在的无向均匀代价网格地图是一种非常流行的表示寻路环境的方法。在自然界中,这个域通常具有高度的路径对称性(Harabor and Botea 2010;Pochter et al.2010)。在这种情况下,对称性表现为路径(或路径段),这些路径共享相同的起点和终点,具有相同的长度,并且除了移动发生的顺序之外,其他路径都是相同的。除非处理得当,对称性可能会迫使搜索算法评估许多等效状态,并阻止朝着目标的真正进展。

在本文中,我们通过发展一个宏操作符来处理这种路径对称性,这个宏操作符只从网格中有选择地扩展某些节点,我们称之为跳跃点。从一个跳转点移动到下一个跳转点需要沿着固定的方向移动,同时重复应用一组简单的邻域修剪规则,直到到达一个死胡同或一个跳转点。因为我们不在跳转点之间扩展任何中间节点,所以我们的策略可以对搜索性能产生显著的积极影响。此外,计算的解保证是最优的。跳转点修剪是快速的,不需要预处理和介绍没有内存开销。它在很大程度上与许多现有的适用于栅格地图的加速技术正交。

我们做了以下贡献:(i)对跳跃点算法的详细描述;(ii)一个理论结果表明使用跳跃点搜索可以保持最优性;(iii)一个将我们的方法与两个最新的搜索空间缩减算法进行比较的实证分析。我们在文献中的一系列合成和真实基准上进行了实验,发现跳转点将标准A-star的搜索时间性能提高了一个数量级甚至更多。我们还报告了对沼泽(Pochter et al.2010)的显著改进,这是一种最新的保持最优的修剪技术,其性能与HPA*(Botea、Muller和Schaeffer 2004)相竞争,在许多情况下占主导地位;这是一种众所周知的次优寻径算法。

2 相关工作

识别和消除搜索空间对称性的方法已在规划(Fox和Long 1999)、约束规划(Gent和Smith 2000)和组合优化(Fukunaga 2008)等领域提出。然而,很少有工作明确地识别和处理诸如栅格地图之类的寻路域中的对称性。

空矩形房间(Harabor和Botea 2010)是一种离线对称打破技术,试图纠正这种疏忽。它将栅格地图分解为一系列无障碍的矩形,并用一组宏边替换每个矩形内部的所有节点,以便于优化行程。具体到4连通映射,这种方法比跳点剪枝更通用。它还需要离线预处理,而我们的方法是在线的。

死胡同启发式(Bjornson and Halld-orsson 2006)和沼泽(Pochter et al.2010)是与我们的工作相关的两种类似的修剪技术。两者都将栅格地图分解为一系列相邻区域。稍后,此分解用于确定与优化求解特定寻径实例无关的区域。这个目标与我们的工作相似,但又是正交的,我们的工作的目的是减少探索搜索空间中任何给定区域所需的努力。

修剪搜索空间的另一种方法是识别死细胞和冗余细胞(Sturtevant、Bulitko和Bjornsson 2010)。该方法是在基于学习的启发式搜索的背景下发展起来的,它只在执行迭代深化算法的多次迭代之后才加速搜索。此外,冗余单元的识别需要额外的内存开销,而跳转点没有这些开销。

快速扩展(Sun等人,2009)是另一个加速最优A*搜索的相关工作。它避免了不必要的打开列表操作,当它找到一个与打开列表中的最佳节点一样好(或更好)的后续节点时。跳转点是一个相似但根本不同的想法:它们允许我们识别通常会扩展但可以完全跳过的大型节点集。

在不需要优化的情况下,分层寻路方法是普遍存在的。它们通过将搜索空间(通常离线)分解为更小的近似值来提高性能。这类算法,如HPA*(Botea、Muller和Schaeffer 2004),速度快,内存效率高,但也不太理想。

3 符号术语

我们使用无向一致代价网格图。每个节点有≤8个邻节点,可以遍历也可以不遍历。从一个可遍历的节点到它的一个邻居的每一个直线(即水平或垂直)移动的代价是1;对角线移动的代价是15543ec87af95b1a18df8c7bfcce9ea9.png。不允许涉及障碍物节点的移动。符号26573ee2fad3700fa27bafb125e524f8.png表示八个允许的移动方向之一(上、下、左、右、斜)。我们用010fd162fa3df1edaf67d0bc823265fb.png表示可以通过节点7c14c4c83aae4db5140c7244c2af0460.png26573ee2fad3700fa27bafb125e524f8.png方向移动d1f7ec09ca474a7f955396fe9a7b1aae.png个单位到达节点e96c1097ed7d573f1b31f60560fb9e16.png。当26573ee2fad3700fa27bafb125e524f8.png是对角线移动时,我们将与26573ee2fad3700fa27bafb125e524f8.png成45度角的两个直线移动表示为00629c2da843f16dfa862273a62b7f6c.png8636232c4f508cae9771bdbcf2177282.png

路径6380cb6ad9eded25226c2cba21697fc2.png表示从节点89b722ee37cdb8d1f2b7ec54da42f11a.png开始到节点8bd5530a7574281239a091a0a0b9cafc.png结束的无周期有序步行。有时我们会在路径的上下文中使用设定负运算符:例如aa2a9c42b1a6207af0a82eb18f23921a.png。这意味着被减去的节点7c14c4c83aae4db5140c7244c2af0460.png不会出现在路径54c807ab5ea64ebcd6fbaf379bd492bc.png上。我们还将使用函数9cae0cfd6aca16787375985a1cd21fa4.png指代路径的长度(或成本),并使用函数2ee101d3371c11495a59d017a5a23e67.png指代网格上两个节点之间的距离。比如b2ee21e49c293eb571321ea3d33f0d34.png0e1dcdaa540ac40db3d6b7afa6c05ed8.png

4 跳转点

在本节中,我们介绍一种搜索策略,该方法通过有选择地仅扩展我们称为跳转点的网格图上的某些节点来加速最佳搜索。我们给出图1(a)中基本思想的示例。

这里的搜索是扩展一个节点7c14c4c83aae4db5140c7244c2af0460.png,它的父节点44dc2abfc10c8f37f5052c3e49eaed3c.png;从44dc2abfc10c8f37f5052c3e49eaed3c.png7c14c4c83aae4db5140c7244c2af0460.png的行进方向是向右直线移动。当扩展节点7c14c4c83aae4db5140c7244c2af0460.png时,我们可能会注意到,计算任何用灰色突出显示的邻接点没有什么意义,因为这种移动所引起的路径始终由(即不如)提及44dc2abfc10c8f37f5052c3e49eaed3c.png但不包括7c14c4c83aae4db5140c7244c2af0460.png的替代路径主导。在下一节中,我们将让这个想法更加准确,但是现在足以观察到7c14c4c83aae4db5140c7244c2af0460.png的唯一非主导邻接点e96c1097ed7d573f1b31f60560fb9e16.png就在右边。不将该邻接点添加到OpenList中来计算,相比传统的A-star算法那样,我们建议直接向右移动并继续沿该方向移动,直到遇到诸如e96c1097ed7d573f1b31f60560fb9e16.png的节点为止。具有至少一个其他非主导邻接点(在此为节点9ca3ca46a849fbd0b95d475f5293102f.png)。如果找到诸如e96c1097ed7d573f1b31f60560fb9e16.png(跳变点)之类的节点,则将其生成为7c14c4c83aae4db5140c7244c2af0460.png的后继节点,并为其分配7ffeafb85c1a6ca0888b9eeb66529b25.png值(或估价成本)84a5c6b205f76798fd03ee7910dd0d46.png。另外,我们可以得出结论,如果我们遇到障碍,朝这个方向进行进一步的搜索是徒劳的,什么也不会产生。

在本节的其余部分中,我们将开发一个“大步运算符”,通过在直线和对角线移动的情况下识别跳跃点后继来加速节点的扩展。首先,必须定义一系列修剪规则,以确定是否应生成或跳过节点。这将使我们能够精确地定义跳转点的概念,并对跳转点算法进行详细说明。然后,我们证明“跳跃”节点的过程(例如图1(a)中的x)对搜索的最优性没有影响。

基于 alpha-beta 剪枝搜索算法的 五子棋游戏_基于栅格地图的在线图形剪枝寻路算法..._第1张图片

图1 直线(a)和对角线(b)跳跃点的示例。虚线表示达到死角的一系列临时节点评估。粗线表示最终的后继节点。

基于 alpha-beta 剪枝搜索算法的 五子棋游戏_基于栅格地图的在线图形剪枝寻路算法..._第2张图片

图2 我们展示了几种情况,其中节点x通过直线或对角线移动从其父p(x)到达。当x展开时,我们可以从标记为灰色的所有节点中删除。

5 邻接点修剪规则

在本节中,我们开发了一些规则,用于修剪网格中与某个节点x紧邻的节点集。目的是从每组这样的邻居,即邻居(x)中识别出不需要被评估以达到最佳目标的任何节点n。我们通过比较两条路径的长度来实现这一点:以节点44dc2abfc10c8f37f5052c3e49eaed3c.png开头的π到达x并以n结尾,以及以节点44dc2abfc10c8f37f5052c3e49eaed3c.png开头并且以n结束但未提及x的另一条路径17036972f650b4ae638744a425cfc8d8.png。另外,由π或17036972f650b4ae638744a425cfc8d8.png提及的每个节点必须属于bb1a6c13a0e986679ebbdcc6f461cbb6.png

有两种情况需要考虑,具体取决于从其父级44dc2abfc10c8f37f5052c3e49eaed3c.png向x的过渡是直线移动还是对角线移动。请注意,如果x是起始节点,则44dc2abfc10c8f37f5052c3e49eaed3c.png为null,并且不修剪任何内容。

(1) 直线移动:我们修剪所有满足f74e368a3a102b5778731324e231f97e.png与下面的优势约束的节点:

48f52bb9f38f19c99c136325d8395d7b.png                    (1)

图2的(a)显示了一个示例,这里的54e926d9197feb455f6b3ceded386d49.png,我们修剪掉除了24514b4a26fea36660817988a80e978e.png之外的所有邻接节点。

(2) 折线移动:这种情况类似于我们专为直线移动开发的修剪规则。唯一的区别是排除x的路径必须严格占主导地位:

6df9375026f666dab661c9ec7ce40451.png                    (2)

图2的(c)展示了一个示例,这里的8d5e48b86c21be4d2911aa18f09ec295.png,我们修剪掉除了n=2,n=3,n=5之外的所有邻接点。

假设bb1a6c13a0e986679ebbdcc6f461cbb6.png不包含任何障碍,我们将在应用了直线或对角线修剪(适当时)后保留的节点称为x的自然邻居。这些对应于图2(a)和2(c)中的非灰色节点。但是当bb1a6c13a0e986679ebbdcc6f461cbb6.png包含障碍物时,我们可能无法修剪所有非自然邻居。如果发生这种情况,我们就说每个这样的邻居都是被强制计算的(不能修剪的)。

定义1. 一个属于f74e368a3a102b5778731324e231f97e.png的节点如果满足下面的条件,将被强制计算:

1. n不是x的自然邻居;

2.2c894927f0404a04a86818ac3e545cc3.png

在图2(b)中,我们显示了直线移动的示例,其中强制执行n = 3的计算;图2(d)示出了涉及对角线移动的类似示例,在这里,n = 1的求值是强制计算的。

算法描述:

我们首先要精确地定义一个跳跃点的概念:

定义2. 如果e96c1097ed7d573f1b31f60560fb9e16.png将值d1f7ec09ca474a7f955396fe9a7b1aae.png最小化,使得010fd162fa3df1edaf67d0bc823265fb.png,并且满足以下条件之一,则称节点e96c1097ed7d573f1b31f60560fb9e16.png为从节点7c14c4c83aae4db5140c7244c2af0460.png朝向26573ee2fad3700fa27bafb125e524f8.png的一个跳转点:

1.节点e96c1097ed7d573f1b31f60560fb9e16.png是目标节点;

2.节点e96c1097ed7d573f1b31f60560fb9e16.png至少有一个邻居节点,该邻居通过定义1进行强制计算;

3.26573ee2fad3700fa27bafb125e524f8.png是一个对角线运动,并且存在一个节点5373759fe0513acf0d6a7a1c8ce0c78c.png,该节点位于55a88ebbbb5501ff00657fc4e5898df5.png方向的a2a1ef0b9930863da65b019f0d2fa12e.png步,使得节点9ca3ca46a849fbd0b95d475f5293102f.png是节点e96c1097ed7d573f1b31f60560fb9e16.png在条件1或者条件2下的一个跳转点。

图1(b)显示了一个通过条件3识别的跳跃点的示例。这里我们从节点7c14c4c83aae4db5140c7244c2af0460.png开始,沿对角线行驶,直到遇到节点y。从节点y可通过07ca18da15899aba190ff4fed5d755f9.png水平移动到达节点z。因此节点9ca3ca46a849fbd0b95d475f5293102f.png是节点e96c1097ed7d573f1b31f60560fb9e16.png在条件2下的一个跳跃点后继,这又将e96c1097ed7d573f1b31f60560fb9e16.png标识为7c14c4c83aae4db5140c7244c2af0460.png的跳跃点后继。

在算法1中给出了识别各个后继跳转点的步骤。我们从与当前节点x紧邻的修剪的邻居集合开始(第2行)。然后,我们没有将每个邻居节点n添加到x的后继集合中,而是尝试“跳转”到更远的节点,但该节点的方向与x对于n的方向相同(第3-5行)。例如,如果边1bae0c75b860080986e6b972ff3cbe04.png构成了从x处开始的直线移动,我们将在x右边的节点之间寻找跳点。如果找到这样的节点,则将其添加到后继集合中。如果找不到跳点,则不添加任何内容。该过程将继续进行,直到遍历完所有邻居节点,然后返回x的后继集合。

基于 alpha-beta 剪枝搜索算法的 五子棋游戏_基于栅格地图的在线图形剪枝寻路算法..._第3张图片

为了识别各个后继跳跃点,我们将应用算法2。它需要一个初始节点7c14c4c83aae4db5140c7244c2af0460.png,一个行进方向26573ee2fad3700fa27bafb125e524f8.png以及起始节点s和目标节点g作为输入。在粗略的概述中,该算法尝试通过沿26573ee2fad3700fa27bafb125e524f8.png方向(第1行)并测试该位置的节点n是否满足定义2来确定x是否具有任何跳转点后继的特征。在这种情况下,将n指定为a 跳点并返回(第5、7、11行)。当n不是跳转点时,算法将递归执行并再次朝26573ee2fad3700fa27bafb125e524f8.png方向移动,但这一次n是新的初始节点(第12行)。当遇到障碍并且无法采取进一步措施时,递归终止(第3行)。注意,在每个对角线步骤之前,算法必须首先保证无法检测到任何直线跳转点(第9-11行)。该检查对应于定义2的第三个条件,对于保持最优性至关重要。

基于 alpha-beta 剪枝搜索算法的 五子棋游戏_基于栅格地图的在线图形剪枝寻路算法..._第4张图片

6 最优性

在本节中,我们将证明对于栅格地图中的每个最佳长度路径,都存在一条等效的长度路径,可以通过在搜索过程中仅计算跳转节点来找到(定理1)。我们的结果是通过为每个最佳路径确定一个对称替代方案而得出的,我们将该对称替代方案划分为连续的段。然后,我们证明该路径上的每个转折点也是一个跳跃点。

定义3. 转折点定义为沿着从前一节点0ae97a31ef2e7316276456db97570188.pngdf865b84a6bb5472388db623f78bde0d.png的行进方向与从df865b84a6bb5472388db623f78bde0d.png到后一节点bfa695e18280b1558c6876252fe4dc87.png的行进方向不同的路径上的任何节点df865b84a6bb5472388db623f78bde0d.png

图3描绘了我们在最佳路径上可能遇到的三种可能的转折点。节点8bd5530a7574281239a091a0a0b9cafc.png(图3(a))上的对角线到对角线拐点包括从其父级acd7fd4c2cde16556b0b65fbd344bdfd.png到对角线的路径,然后是第二个对角线路径,这次是从8bd5530a7574281239a091a0a0b9cafc.png到其后继379a4eee5d380c342636830749662826.png的不同方向;类似地,直线到对角(或对角到直线)的转折点涉及从acd7fd4c2cde16556b0b65fbd344bdfd.png8bd5530a7574281239a091a0a0b9cafc.png的直线(对角)步,然后是对角线(直线)到达其后继379a4eee5d380c342636830749662826.png的路径(图3(b)和图3(c))。其他类型的转折点,例如笔直转笔直的在此不予考虑。

基于 alpha-beta 剪枝搜索算法的 五子棋游戏_基于栅格地图的在线图形剪枝寻路算法..._第5张图片

 (a)对角线到对角线 (b)直角线到对角线 (c)对角线到直线。

图3 最优转折点的类型

现在我们准备在沿着某些最佳长度对称路径出现的跳跃点和转折点之间建立等价关系,我们称之为对角线优先。

定义4. 如果路径54c807ab5ea64ebcd6fbaf379bd492bc.png不包含直线到对角的转折点be2a0bc5a6bc2edbdb6e175e9715cc90.png,则它是对角线优先。并且路径54c807ab5ea64ebcd6fbaf379bd492bc.png可以用对角到直线的转折点7cbe2e0e26eed692fd77bb714d8df1f0.png代替,同时该路径的长度保持不变。

给定任意的最佳长度路径54c807ab5ea64ebcd6fbaf379bd492bc.png,我们始终可以通过将算法3应用于54c807ab5ea64ebcd6fbaf379bd492bc.png来得出对称的对角线优先路径17036972f650b4ae638744a425cfc8d8.png。注意,这仅仅是作为概念上的装备。

引理1. 沿着最佳对角优先路径17036972f650b4ae638744a425cfc8d8.png的每个转折点也是一个跳跃点。

证明:令8bd5530a7574281239a091a0a0b9cafc.png为沿17036972f650b4ae638744a425cfc8d8.png的任意转折节点。我们将考虑三种情况,每种情况对应于图3所示的三种转折点之一。

(1) 对角到对角:由于17036972f650b4ae638744a425cfc8d8.png是最优路径,因此必须在8bd5530a7574281239a091a0a0b9cafc.png379a4eee5d380c342636830749662826.png附近都存在一个阻碍绕行的障碍物。我们知道这是因为如果没有障碍,我们将得到9c2741848879029d76837f317da9b002.png,这与17036972f650b4ae638744a425cfc8d8.png是最优路径的事实相矛盾。我们得出的结论是379a4eee5d380c342636830749662826.png8bd5530a7574281239a091a0a0b9cafc.png的强制邻居。这足以满足定义1的第二个条件,从而使8bd5530a7574281239a091a0a0b9cafc.png为跳转点。

(2) 直线到对角:在这种情况下,必须在8bd5530a7574281239a091a0a0b9cafc.png附近有一个障碍物。如果不是这样,则可以将8bd5530a7574281239a091a0a0b9cafc.png替换为对角到直线的转折点,这与17036972f650b4ae638744a425cfc8d8.png是对角线优先的事实相矛盾。由于保证17036972f650b4ae638744a425cfc8d8.png为对角线优先,因此我们得出以下事实:379a4eee5d380c342636830749662826.png8bd5530a7574281239a091a0a0b9cafc.png的强制邻居。这满足定义1的第二个条件,从而使8bd5530a7574281239a091a0a0b9cafc.png为跳转点。

(3) 对角到直线:在这种情况下,有两种可能性,这取决于是否可以从8bd5530a7574281239a091a0a0b9cafc.png开始一系列直线步长来到达目标,或者17036972f650b4ae638744a425cfc8d8.png是否具有其他转折点。如果可以通过直线步长达到目标,则8bd5530a7574281239a091a0a0b9cafc.png具有满足定义1的第三个条件的后继跳跃点,因此我们得出8bd5530a7574281239a091a0a0b9cafc.png也是一个跳跃点。如果8bd5530a7574281239a091a0a0b9cafc.png之后是另一个转折点a02f8954973d6e9caefbb0cdd060165d.png,则该转折点必须为直线到对角,并且根据该情况的论点,还必须为跳跃点。我们再次得出结论,8bd5530a7574281239a091a0a0b9cafc.png具有满足定义1的第三个条件的后继跳转点。因此,8bd5530a7574281239a091a0a0b9cafc.png也是跳转点。

定理1. 使用跳转点进行搜索始终会返回最优路径。

证明:设π是网格上两个节点之间任意选择的最佳路径,而17036972f650b4ae638744a425cfc8d8.png是通过将算法3应用于π得出的对角线优先对称等价物。我们将显示,在用跳点修剪进行搜索时,由17036972f650b4ae638744a425cfc8d8.png提及的每个转折点均能得到最佳计算。我们认为如下:

17036972f650b4ae638744a425cfc8d8.png分成一系列相邻的段3ddcc4b8915ae0a7f7581264784bafae.png。每个a38a33f448e241f0036b0f1949df9dd7.png是一条子路径,所有移动都沿着该子路径沿同一方向行进(例如,仅“上”或“下”等)。请注意,除了起点和目标之外,每个子路径的起点和终点也是一个转折点。

由于每个5158c3626a16d0414d47ff5c483e188a.png仅由沿单个方向(直线或对角线)的移动组成,我们可以使用算法2从每个段开头的节点54e6e9eb5e2148a5b5d55a8ff460a1cf.png跳到段结尾的节点91d08ab0641c76d40148098d0a3f4168.png。且不必停止计算之间的每个节点,因为可能会发生中间计算,但可以保证我们从89b722ee37cdb8d1f2b7ec54da42f11a.png最佳到达8bd5530a7574281239a091a0a0b9cafc.png的事实。对于引理1,沿着17036972f650b4ae638744a425cfc8d8.png的每个转折点也是一个跳跃点,因此在搜索过程中必须计算每个转折节点。只剩下开始和目标。根据定义,起始节点必须在每次搜索开始时进行计算,而目标节点也是一个跳转点。因此,两个节点都被计算了。

基于 alpha-beta 剪枝搜索算法的 五子棋游戏_基于栅格地图的在线图形剪枝寻路算法..._第6张图片

7 实验验证

我们从免费的寻路库“分层开放图”(HOG,http://www.googlecode.com/p/hog2)得出的四个基准上,评估了本文提出的跳转点修剪算法的性能:

自适应深度是12张大小为100×100的地图集合,其中每张地图的大约13个被分成大小不同的矩形房间和大的开放区域,其中散布着较大的随机放置的障碍物。对此基准,我们在每个地图上随机生成了100个有效问题,总共1200个实例;

Baldur's Gate是由BioWare受欢迎的角色扮演游戏《鲍德之门II:安姆的影子》(120)拍摄的120张地图。它在文献中经常作为标准基准出现(Bjornsson和Halld-orsson 2006;Harabor和Botea 2010;Pochter等人2010)。我们使用由于Nathan Sturtevant而产生的变化率,其中所有地图都已缩放为512×512大小,以更准确地表示现代寻路环境。地图和所有实例都可以从http://movingai.com获得;

龙腾世纪是另一个现实的基准。这次取材自BioWare最近的角色扮演游戏《龙腾世纪:起源》。它由156张地图组成,大小从30×21到1104×1260不等。对于本基准测试,由于Nathan Sturtevant的缘故,我们使用了大量随机生成的实例,可从http://movingai.com获得;

房间是一组300张大小为256×256的地图,这些地图分为对称的小矩形区域行(7×7),各行通过随机放置的入口相连。该基准以前已出现在(Pochter等人2010)中。对于此基准,我们每个地图随机生成了100个有效问题,总共30000个实例。

我们的测试机器是2.93GHz Intel Core 2双核处理器,4GB RAM,运行OSX 10.6.4系统。

8 实验结果

为了评估跳转点,我们使用A-star的传统方法,我们对其进行了改进,以方便进行在线邻居修剪和跳转点识别。我们从速度方面讨论算法的性能:即在对网格进行修剪或不进行修剪的情况下进行搜索时,相对于解决给定问题所需时间的相对改进以及节点数量的扩展。使用此度量,搜索时间加速为2.0的两倍,而节点扩展加速为2.0表示节点数量扩展了一半。在每种情况下,越高越好。图4显示了我们四个基准中每个基准的平均搜索时间加速。表1显示了平均节点计算速度;每列的最佳结果以粗体显示。

基于 alpha-beta 剪枝搜索算法的 五子棋游戏_基于栅格地图的在线图形剪枝寻路算法..._第7张图片

5971b611741505869ab0e67b03866261.png

与Swamps算法的比较:我们首先将跳跃点与Swamps进行比较(Swamps:Pochter等人,2010年,一种最优的保留修剪技术,可加快寻路的速度)。我们使用了作者的源代码及其A-star的实现,并使用其推荐的运行参数进行了所有实验:Swamps半径为6,“无变化限制”为2。

如图4所示,跳转点修剪显示出在所有基准测试中平均搜索时间的令人信服的改进。最大的差异是在博德之门和龙腾世纪观察到的,用跳点搜索可以更快地达到目标25-30倍,而使用Swamps搜索只能达到3-5倍的加速。查看表1可以观察到类似的趋势,其中对扩展的节点总数的改进甚至更加明显。

根据这些结果,我们得出结论,尽管Swamps可以有效地识别地图上与目标节点无关的区域,但仍然存在的那些区域仍需要大量的搜索工作。跳转点使用更强的正交策略来证明可以忽略许多由Swamps扩展的节点。由于这两种想法看起来是互补的,因此我们认为它们可以组合优化:首先,对与当前搜索无关的区域进行基于Swamps的修剪。然后,使用跳转点搜索地图的其余部分。

与HPA *的比较:接下来,我们将本文的跳转点修剪算法与HPA*算法进行比较(Botea,Muller和Schaeffer 2004)。尽管不是最佳选择,但是HPA*还是非常快速且广泛应用于视频游戏。为了评估HPA*,我们测量了插入和分层搜索的总成本。我们没有完善任何抽象路径,而是假设有一个预先计算的集群内路径数据库。这样的配置代表了HPA*最快的通用实现,但是需要额外的内存开销。在搜索时,我们使用了单层抽象层次结构,固定集群大小为10。原始作者建议使用这些设置,他们注意到,较大的集群和更多的级别通常无济于事。

如图4所示,修剪点修剪相比HPA*具有很高的竞争力。在“自适应深度”,“博德之门”和“房间”上,跳跃点具有明显的优势-在某些情况下,HPA*搜索时间缩短了几个因素。在龙腾世纪基准测试中,跳变点对于长度小于500的问题具有较小的优势,但对于较长的实例,两种算法之间的差异很小。表1提供了进一步的见解:尽管与HPA*相比,使用跳变点进行搜索可以大大减少节点数量,但是每次操作都需要更长的时间。

我们得出的结论是,跳跃点修剪是HPA*的有竞争力的替代品,并且对于各种各样的问题,可以帮助更快地找到解决方案。HPA*仍然是有利的,特别是在内存开销可接受且优化不重要的情况下,但前提是将开始节点和目标节点插入抽象图中的成本(如果路径数据库不可用,可能会进行细化),可以在找到抽象路径所需的时间内充分摊销。进一步工作的一个方向可能是使用跳点修剪来加快HPA*:例如在插入和优化过程中。

9 结论

我们引入了一种新的在线节点修剪策略,以加快在无向统一成本栅格地图上的寻路。我们的算法识别并选择性地扩展了我们称为跳点的栅格地图中的某些节点。在跳跃点之间移动仅涉及沿固定方向(直线或对角线)行驶。我们证明了两个跳转点之间的节点永远不需要扩展计算,并且在它们上面“跳转”不会影响搜索的最优性。

我们的方法在寻路文献中是独特的,因为它有很少的缺点:简单且高效。它保持最佳状态,但不需要额外的内存;它非常快,但不需要预处理。此外,它在很大程度上与文献中的竞争性加速技术正交,并且很容易与之相结合。我们不知道具有所有这些功能的任何其他算法。

新算法与文献中的相关工作极具竞争力。与最近最先进的保持最优修剪技术Swamps(Pochter等人,2010年)相比,我们发现跳跃点的速度提高了一个数量级。我们还显示,跳点修剪与HPA*具有竞争性,并且在许多情况下明显快于HPA*。一种流行但次优的寻路技术,通常在对性能敏感的应用程序(如视频游戏)中使用。

进一步工作的一个有趣方向是将跳转点扩展到其他类型的网格,例如六边形或纹理(Yap 2002)。我们建议通过开发一系列类似于正方形网格的修剪规则来实现这一目标。由于这些域上的分支因子低于正方形网格,因此我们认为跳转点可能比当前论文中观察到的更为有效。另一个有趣的方向是将跳跃点与其他加速技术相结合:Swamps或HPA*。

你可能感兴趣的:(基于,alpha-beta,剪枝搜索算法的,五子棋游戏)