小编典典

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

algorithm

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

就我而言,目标并不固定为唯一的结束节点。节点定义为距B起点有距离的任何节点。

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

相反,在我的修改版本中(“找到最有用的路径”),用实用程序而不是用成本来标记边缘,并且由于要经过 最多B个边缘 ,因此我想最大化最终增益。为了使A
*有效,我是否应该高估效用(即找到一个大于或等于实际效用的启发式方法)?

编辑: 更加形式化,让

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

是节点的实用程序,由以下组成:

  • g(n):从起始节点转到 n
  • h(n):试探法,即估算我从n目标获得的收益(目标是距起点为的节点B

应该h(n)高估和f(n)最大化才能确定最佳路径吗?

请注意,这B是预算,因此可以完全花费,即,不必找到比B步骤短的路径。


阅读 251

收藏
2020-07-28

共1个答案

小编典典

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

不幸的是,您将不得不对其进行暴力破解,或者诉诸各种全局优化技术,例如退火,基因编程等。


否定边缘权重的符号(如@Charles所建议的那样)将不起作用,因为A
*无法处理负的边缘权重。和其他算法,其
可以 仍然处理负边缘权重,不能处理负周期。

2020-07-28