了解AStar算法

时间:2011-07-21 11:07:43

标签: algorithm a-star

从此链接:http://www.policyalmanac.org/games/aStarTutorial.htm

  

如果相邻的方格已经在打开的列表中,请检查是否   通往该广场的路径是更好的。换句话说,检查一下   如果我们使用当前的平方,如果该方格的 G得分较低   到那儿。如果没有,请不要做任何事情。

示例:

父母(已经遍历):O
分支:A,B,C

父母(工作):A
分支机构:B,D

打开列表包含A,B,C和现在的D。

现在,上面引用的粗体陈述是比较路径A到B的路径? 比较 A到B && O到B 要么 比较 A到B && A到D

请澄清。

2 个答案:

答案 0 :(得分:3)

基本A *是:

While we're not close enough to the / a destination
    Take the point that we have now, with the lowest expected total cost (so known cost up to this point plus estimated remaining cost).
    Calculate cost for all surrounding locations & add them back to the priority queue with their expected total cost.

return route that we followed to the closest point

在官方A *术语中,G-score是到达那里的成本。 H-score是从那里到你想去的地方的估计。

如果你的H分数总是过高估计,那么极端情况就是如此;新得分(估计+新成本)将始终低于之前的平方估计+成本,因此您将直接达到目标。如果你的H分数总是低估(或者是0或者其他什么)你总是更喜欢离你的出发点更近的方格,因为到目前为止他们的成本会更低,所以你基本上会从那个位置进行填充。 / p>

您可以从理论的角度或从实际的角度使用A *。从理论上讲,您可能永远不会高估任何链接的成本。这意味着您将始终找到最有效的路线,但需要更长时间才能找到它,因为您将扩展更多节点。

从实际角度来看,使用它可以实现略微不可接受的启发式(可能会略微高估)。您找到的路线很可能略微不理想,但对于游戏使用来说不应该太糟糕。然而,计算变得更快,因为您不再扩展所有内容。我做过的一个(慢)实现在1k * 1k地图上花费了6分钟,具有常规触发距离启发式,但只有几秒钟的增强时间3.路线没有太大差异。制定启发式时间5使路线基本上成为直线和直线。还是要快得多,但不可能如此。

写下您的直接问题: 这是你评估的第二个方块。您有从O到A,B,C的道路规划(每条路线的成本为G)。现在,假设有一条从O到A到B的高速公路,而不是从O到B的泥路。这意味着通过A的速度更快。当展开A时,它会查看所有周围的正方形,并将成本+启发式添加到打开的列表中(如果它已经不在那里)。如果它在那里,它会看到新路线是否更快(较低的G到达那个方格)并且只有这样,它是否会取代它。

因此,在您的示例中,它将O-> A-> D添加到列表中,然后检查O-> A-> B是否比O-> B更快。

- 附录

打开清单:2 / A(通过O),5 / B(通过O),7 / C(通过O)

封闭清单:0 / O(原产地/没有任何东西)

拿A,因为它是迄今为止最低的成本。然后,对于A的每个邻居计算到达那里的成本。

  • 如果已有条目并且成本低于我们目前所知的成本,请替换该条目。
  • 如果没有当前条目,请添加它。

在A上工作,道路成本为2到B,3到达D.通过A到达B的成本为4,当前条目为5.所以我们更换它。 D不在那里,所以我们添加它。

公开名单:4 / B(通过A),5 / D(通过A),7 / C(通过O)

封闭清单:0 / O(原产地/通货无),2 / A(通过O)

因此,我们将A与B对比O与B进行比较。

答案 1 :(得分:1)

好吧,如果我们正在研究节点A,我们正在考虑它的邻居。假设我们现在正在考虑B节点(在openList中)。

给出的定义告诉我们比较B的G值(先前在工作节点为O时首次添加到打开列表时计算)和从开始(O)到达A的成本之和从A到达B的费用。