我试图弄清楚如果启发式函数不满足单调性条件,A* 算法会是什么,其中
h(u) <= e(u,v) + h(v),对于每个 u,v 使得 u 和 v 之间有一条边
是单调性的条件,其中 h 是启发式函数,u 和 v 是搜索图中的顶点,函数 e 给出了 u 和 v 之间的边成本(搜索图是无向的)。然而,维基百科(此处)没有给出算法,Norvig 关于人工智能的书等其他来源也没有。
有没有很好的资源来研究这个。伪代码会很棒!
此外,我不希望通过将非单调启发式函数转换为启发式函数来解决此问题。
最佳答案
假设启发式函数function仍然是admissible - A* 算法可以正常工作。
但是,对于非单调启发式函数,您可能需要更新已经“关闭”的节点,并且您应该允许这种行为。
关于c++ - 如果启发式函数 H 不是单调的,A* 算法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21550220/