假设我想改变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
步的路径。
答案 0 :(得分:1)
您的问题是longest path problem,强NP-Hard 。这意味着,不仅(几乎可以肯定)没有快速的精确算法,而且还有(几乎可以肯定)没有好的近似算法。
不幸的是,您不得不蛮力,或采用各种global optimization技术,如退火,遗传编程等。
正如@Charles建议的那样,否定边权重的符号将不起作用,因为A *无法处理负边权重。 可以处理负边缘权重的other algorithms仍然无法处理负循环。