启发式使用A *来查找具有最高增益的路径

时间:2013-06-06 12:47:16

标签: algorithm a-star

假设我想改变A *中的逻辑,试图找到最有用的路径(即增益最高的路径)而不是找到最短路径(即成本最低的路径)。 / p>

在我的情况下,目标不是固定为唯一的结束节点。节点定义为距起点距离B的任何节点。

在vanilla版本中(“找到最短路径”)我不需要高估成本(即找到一个小于或等于实际成本的启发式方法)。

在我的修改版本中(“找到最有用的路径”),边缘用实用程序标记而不是成本,并且我希望最大化最终增益,给定通过最大值的约束B边缘。我是否应高估实用程序(即找到一个大于或等于真实效用的启发式算法)才能使A *工作?

编辑:更正式化,让

f(n) = g(n) + h(n)

是节点的实用程序,由:

组成
  • g(n):从起始节点到n
  • 时获得的结果
  • h(n):启发式,即从n到目标时获得的估算(目标是距离起点的距离为B的节点)

是否应高估h(n)f(n)最大化以确定最佳路径?

请注意B是一个预算,因此可以完全花费,即没有必要找到一个短于B步的路径。

1 个答案:

答案 0 :(得分:1)

您的问题是longest path problem强NP-Hard 。这意味着,不仅(几乎可以肯定)没有快速的精确算法,而且还有(几乎可以肯定)没有好的近似算法。

不幸的是,您不得不蛮力,或采用各种global optimization技术,如退火,遗传编程等。


正如@Charles建议的那样,否定边权重的符号将不起作用,因为A *无法处理负边权重。 可以处理负边缘权重的other algorithms仍然无法处理负循环。