产生负值的启发式函数是不允许的吗?

Are heuristic functions that produce negative values inadmissible?

据我了解,对于给定的已评估节点,启发式算法的可接受性保持在 'actual cost to distance' 的范围内。我不得不为状态空间上的 A* 解决方案搜索设计一些启发式方法,并且使用有时可能 returns 负值的启发式方法获得了很多积极的效率,因此使某些节点更多 'closely formed' 到目标状态有更高的前沿位置。

但是,我担心这是不可接受的,但在网上找不到足够的信息来验证这一点。 I did find this one paper from the University of Texas 这似乎在后来的一个证明中提到“......因为启发式函数是非负的”。谁能证实这一点?我认为这是因为返回负值作为您的启发式函数会使您的 g-cost 变为负值(因此会干扰 A* 的 'default' dijkstra 式行为)。

结论:产生负值的启发式函数并非不可接受,本身,但有可能破坏 A* 的保证。

有趣的问题。从根本上说,可接受性的唯一要求是启发式永远不会高估到目标的距离。这很重要,因为在错误的地方高估可能会人为地使最佳路径看起来更糟而不是另一条路径,并阻止它被探索。因此,可以提供高估的启发式算法失去了最优性的任何保证。 低估不会带来相同的成本。如果您低估了朝某个方向前进的成本,最终边缘权重加起来会大于朝不同方向前进的成本,所以你也会探索那个方向。唯一的问题是效率下降。

如果你的所有边都有正成本,负启发值只能是低估。理论上,低估应该永远比更精确的估计更糟糕,因为它提供的关于路径潜在成本的信息严格来说较少,并且可能导致更多节点被扩展。尽管如此,它也不会被拒绝。

但是,这里有一个示例可以证明 负启发式值在理论上有可能打破 A* 的保证最优性:

在这个图中,通过节点 A 和 B 显然更好。这将有三个成本,而不是六个,这是通过节点 C 和 D 的成本。但是,负面的C 和 D 的启发式值将导致 A* 在探索节点 A 和 B 之前通过它们到达终点。本质上,启发式函数一直认为这条路径会变得更好,直到为时已晚。在大多数 A* 实现中,这将是 return 错误答案,尽管您可以通过继续探索其他节点直到 f(n) 的最大值大于您找到的路径的成本来纠正此问题.请注意,此启发式没有任何不可接受或不一致的地方。我真的很惊讶非负性并没有被更频繁地作为 A* 启发式的规则提及。

当然,这表明您不能随意使用 return 负值的试探法而不用担心后果。完全有可能针对给定问题的给定启发式尽管是负面的,但碰巧会很好地解决问题。对于您的特定问题,不太可能发生这样的事情(我发现它对您的问题非常有效,并且仍然想更多地考虑为什么会这样)。