Search *搜索是否多次扩展同一节点?

Search *搜索是否多次扩展同一节点?,search,path-finding,a-star,tree-search,Search,Path Finding,A Star,Tree Search,A*搜索似乎在重新计算Arad、Sibiu和其他重复状态的f值,但不应该这样做,因为这些节点已经展开并处于关闭状态。那么我在这里错过了什么?(来自罗素和诺维格的图片-人工智能 图片: 在这种情况下,这些节点不会展开,因为它们的f值大于最佳路径,如果不是这样会怎样?即,如果最近的f值返回到前一个节点会怎样?A*会这样做吗?大多数A*算法都会回溯,这意味着一个节点只能访问一次。否则,回溯指针链是无效的断开,路径无法恢复。但是,如果对角移动比方形移动更昂贵,您可能会出现这样一种情况,即优先级队列中较低

A*搜索似乎在重新计算Arad、Sibiu和其他重复状态的f值,但不应该这样做,因为这些节点已经展开并处于关闭状态。那么我在这里错过了什么?(来自罗素和诺维格的图片-人工智能

图片:


在这种情况下,这些节点不会展开,因为它们的f值大于最佳路径,如果不是这样会怎样?即,如果最近的f值返回到前一个节点会怎样?A*会这样做吗?

大多数A*算法都会回溯,这意味着一个节点只能访问一次。否则,回溯指针链是无效的断开,路径无法恢复。但是,如果对角移动比方形移动更昂贵,您可能会出现这样一种情况,即优先级队列中较低的节点可以以较低的成本访问访问的节点。通常,您会忽略这一点,并将访问的节点视为不可访问的节点,除非您使用的是奇怪且奇妙的方法启发式或非常奇怪的图,几乎不会对路径长度产生影响。

只有当节点与其前一个节点之间的距离为负时,才会发生这种情况。但正如您从图中看到的,这不是真的。教科书似乎盲目地将所有连接的节点添加到树中,而不管它们是否已连接是否看到。这很好(虽然有点浪费),因为重复节点的路径永远不会是最短路径(假设非负距离)。它将不断被检查,但它永远不会是最短的。Arad的启发式没有从最初的更改。但f值已经更改。