从这个链接: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
请澄清。
最佳答案
基本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分数是从那里到你想去的地方的估计值。
极端的情况是如果你的H分数总是高估,那么新的分数(估计值+新成本)总是低于前一个平方的估计值+成本,所以你会直线到目标。如果你的H分数总是低估(或是0,或是别的什么),你会更喜欢离出发点更近的正方形,因为到目前为止,它们的成本更低,所以你基本上会从那个位置被填满。
你可以从理论的角度或者从实践的角度来使用。从理论上讲,你可能永远不会高估任何链接的成本。这意味着您将始终找到最有效的路由,但将花费更长的时间来找到它,因为您将扩展更多的节点。
从实际的角度使用它允许有点不可接受的试探法(可以稍微高估)。你找到的路线很可能有点不理想,但不应该太坏,游戏使用。不过,计算速度要快得多,因为你不再扩展所有内容了。我做的一个(缓慢的)实现花了6分钟通过一个1k*1k的地图和一个常规的trig-distance启发式算法,但只有几秒钟的时间增加了3倍。路线没有太大的不同启发式乘以5使路线基本上是直线的,速度更快,但不寻常。
直截了当地问:
这是你评估的第二个正方形。你已经规划了从O到A,B,C的道路(每一条路线的成本都是G)现在,假设有一条从o到a到b的公路,而不是从o到b的土路,这意味着通过a更快。在展开A时,它会查看所有周围的正方形,并将cost+heuristic添加到打开的列表中(如果它不在其中的话)如果它在那里,它会看到新的路线是否更快(到那个广场的G更低),只有这样,它才会取代它。
所以在您的示例中,它将o->a->d添加到列表中,然后检查o->a->b是否比o->b快。
--附录
打开列表:2/A(到O)、5/B(到O)、7/C(到O)
关闭列表:0/O(原点/未通过)
以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。