c++ - 如果启发式函数 H 不是单调的,A* 算法是什么?

标签 c++ algorithm a-star heuristics

我试图弄清楚如果启发式函数不满足单调性条件,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/

相关文章:

C++ 4 字节对齐数据

python - 将 "Stamps"分成四分之一、十位、五位、二位和个位

algorithm - A* 用于寻找最短路径并避免线条成为障碍

python - 如何计算每个节点的障碍物高度并影响A星算法公式的寻路?

c++ - 子对象初始化的顺序是什么?

c++ - Vector 算法中的字符串排序不起作用

c++ - 万事俱备用 C++ 将数据输出到磁盘的最快方法是什么?

algorithm - 检查一棵树是否是镜像?

algorithm - 为什么答案不是 O(n^2)?

javascript - 在协调无向图上计算 A*(A-star) 算法中的 f 成本