产生负值的启发式函数是否不可接受?

时间:2015-05-06 04:53:54

标签: a-star heuristics state-space

据我所知,启发式的可接受性是在距离实际成本的范围内。对于给定的,已评估的节点。我必须为状态空间上的A *解搜索设计一些启发式方法,并且使用有时会返回负值的启发式方法获得了很多正效率,因此使得某些节点更紧密地关联形成'目标国家在边境地区有更高的位置。

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

1 个答案:

答案 0 :(得分:3)

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

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

如果你所有的边缘都有正成本,负启发式值只能低估。理论上,低估应该只比更精确的估计更糟糕,因为它严格提供关于路径潜在成本的信息较少,并且可能导致更多节点被扩展。然而,它不会被接受。

然而,这里有一个例子,证明理论上负启发式值可能会破坏A *的保证最优性: An example graph, illustrating a situation where negative heuristic values would break A*

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

当然,所有这些都表明,你不能自由地使用能够在不担心后果的情况下返回负值的启发式方法。完全可能的是,给定问题的给定启发式算法即使是否定的,也会很好地解决。对于你的特殊问题,不太可能发生这样的事情(我发现它非常有趣,它对你的问题非常有效,并且仍然想更多地思考为什么会这样)。