我试图计算A *算法在启发式函数不满足单调性条件时会是什么,其中
h(u)< = e(u,v)+ h(v),对于每个u,v,使得u和v之间存在边缘
是单调性的条件,其中h是启发函数,u和v是搜索图中的顶点,函数e给出u和v之间的边成本(搜索图是无向的)。然而,维基百科(这里)没有给出这个算法,也没有其他来源,如Norvig的人工智能书。
有一个很好的资源来研究这个。伪代码会很棒!
此外,我不希望通过将非单调启发式函数转换为启发式函数来解决此问题。
答案 0 :(得分:2)
假设启发式函数函数仍为admissible - A *算法可以正常工作。
但是,对于非单调启发式函数,您可能需要更新已经“关闭”的节点,并且应该允许此行为。
答案 1 :(得分:1)
在树搜索的情况下,不需要保持一致以达到最佳状态。相反,如果它是图形搜索,只有在启发式是可接受且一致的情况下,A *才是最佳的。
在此图片中,您可以看到一个非一致启发式示例:A *算法找不到正确的路径。
也许你可以像@amit那样修改标准的A *算法,但是在这种情况下你需要考虑一个已经关闭的状态,所以搜索不是最佳的。它可能会找到最佳路径,但它会比具有一致启发式的解决方案扩展更多节点,因此它将是次优的。