这个观点看起来是正确的,但我在互联网上找不到任何人说它是正确的,所以我想确保一下。如果您同意,请告诉我原因,最好附上一篇论文链接;如果您不同意,请提供反例。
假设有一个带有负边的有向图G
,我们想在G
上运行A*算法。
首先,如果从源节点到目标节点存在可达的负环,则不存在合适的启发式函数,因为无法低估到达目标节点的代价,因为它是-∞
。
然而,如果没有这样的环,可能存在一些合适的启发式函数。特别地,所有负边的和将始终低估到达目标节点的代价。
我认为在这种情况下,A*算法可能会正常工作。
P.S. 我可以在图上运行Bellman-Ford算法,检测负环,并且如果没有负环,重新赋权值以消除负边。但是,如果我知道没有负环,我可以跳过这一步直接运行A*算法。
这是显然错误的。一个顶点的代价是启发式函数和到目前为止所经过的路径的总和...虽然启发式函数低估了到达目标节点的代价,但启发式函数和到目前为止所经过的路径的总和可能不会低估。我犯了大错。
看起来,如果使用一个低估到达目标节点代价的函数对开放集进行排序,并在通过给定顶点时使用该函数,那么这个算法可能会工作...如果将<图中所有负边的和>
作为这样的函数,它看起来会退化成一个图遍历算法。