【问题标题】:Heuristic for using A* to find the path with the highest gain使用 A* 寻找增益最高的路径的启发式方法
【发布时间】:2013-06-02 11:40:39
【问题描述】:

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

在我的例子中,目标并不固定为唯一的结束节点。节点定义为距起点有B 距离的任何节点。

在普通版本(“寻找最短路径”)中,我需要不要高估成本(即,找到小于或等于实际成本的启发式算法)。

在我的修改版本中(“寻找最有用的路径”),边被标记为效用而不是成本,并且我想最大化最终增益,给定通过 最大值的约束B 边。我是否应该高估效用(即,找到大于或等于实际效用的启发式算法)以使 A* 发挥作用?

编辑:更正式,让

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

是一个节点的效用,由:

  • g(n):从起始节点到n 的收获
  • h(n):启发式,即从n 到目标(其中目标是与起点的距离为B 的节点)所获得的估计值

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

注意B 是一个预算,因此它可以完全用完,也就是说,没有必要找到比B 步数短的路径。

【问题讨论】:

  • 你能否定所有的实用程序并使用现有的逻辑吗?
  • 我想我可以这样做,但是反过来对我来说应该更有价值。我想知道在这种情况下是否有一些测试。
  • 大致足以确保您以最大(而不是最小)顺序从边界出列节点。也就是说,在选择下一个要扩展的节点时,选择具有最高值(效用)的那个。您是在使用库还是编写了自己的解决方案?
  • 不,我要定制解决方案。

标签: algorithm a-star


【解决方案1】:

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

不幸的是,您要么不得不暴力破解它,要么求助于各种global optimization 技术,如退火、基因编程等。


正如@Charles 所建议的那样,否定边缘权重的符号是行不通的,因为 A* 无法处理负边缘权重。而other algorithms 可以处理负边权重仍然不能处理负循环。

【讨论】:

  • @Elanore:“最长路径”不是指节点最多的路径,而是指总权重最高的路径;所以您在编辑中定义的问题实际上正是最长路径问题。这应该足以让您相信(几乎可以肯定)没有任何 A* 变体或任何其他算法可以有效解决您的问题,无论您使用什么启发式算法。
  • 是的,你是对的。那么,这是否意味着一般 A* 无法解决最大化问题?还是仅适用于我的问题?
  • @Eleanore:A* 只解决最短路径问题。如果您有一些最大化问题(这是一个非常非常广泛的术语),您可以将其表述为图上最短路径问题,那么 A* (或至少Djikstra 的) 会起作用。否则,它不会。 A* 不能用于解决最长路径问题。
  • 好的,知道了。最后一个问题:那么,如果按照我建议的方式应用,它会带来一个不是最优的解决方案(它只是一条不是最短的路径),对吧?
  • @Elanore:我不知道如何描述路径,但它成为最优的概率非常低。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-20
  • 2014-05-24
相关资源
最近更新 更多