【问题标题】:A* algorithm and heuristic function. Find optimal path on graph.A* 算法和启发式函数。在图上找到最佳路径。
【发布时间】:2014-05-24 20:47:13
【问题描述】:

Wiki 说,启发式函数是在这种情况下估计从当前节点到目标的距离。

但是这段代码中没有函数heuristic_cost_estimate的描述:link to wikiperida

我是对的吗?... 例如,我有 3 个顶点的图。我必须从每个顶点到目标顶点有 3 个启发式方法,并且我设置了设置顶点?

矩阵(权重):

0 5 2
1 0 3
1 2 0

每个顶点的启发式函数(值表示从当前顶点到目标的启发式成本,例如从 2 到目标的成本将为 3):

5 3 4

这是一个奇怪的假设,不是吗?我不知道目标是什么顶点。在这一步如何设置启发式函数?

OR?... 我有 3 个顶点和 9 个启发式。

图形矩阵:

0 5 2
1 0 3
1 2 0

启发式成本:

0 5 10
5 0 10
3 8 0

就是这个意思。如果 3 是目标,则从 1 到目标的启发式成本将为 3。如果 2 是目标,则从 1 到 2(目标)的成本将为 5。

还是我不对?

在我的例子中什么是启发式函数(在图上找到最佳路径)?

【问题讨论】:

  • 您需要清楚地解释您实际尝试使用 A* 解决的问题。 “寻找最优路径”仍然让我们做出不少假设。

标签: algorithm graph language-agnostic heuristics


【解决方案1】:

启发式函数是一个函数h:V->R,其中V 是您的顶点,R 是实数。换句话说 - 启发式函数为每个顶点提供一个值 - 估计它与目标的“接近程度”。

启发式函数不能总是使用,您需要在图表上提供一些信息才能使用它们。

例如,如果您正在解迷宫,则矩阵中的每个单元格(不是墙)都是一个顶点,相邻单元格之间可能的移动代表边。
在此示例中 - 启发式函数可以是 manhattan distances - 也就是说,给定目标单元格 t - 启发式函数是 h(v) = |t.x - v.x| + |t.y - v.y|

如果您不知道自己离目标有多近 - 您不能使用任何启发式函数,您就没有任何信息。 (事实上​​,您可以使用的唯一启发式方法是不提供信息的启发式方法,h(v) = 0 对应每个 v - 但这是没有意义的)。

还请注意,为了使 A* 与您的启发式函数(假设为 h)达到最佳状态,您需要它是可接受的 - 这意味着对于每个顶点 vh(v) <= d(v,target),其中 @ 987654333@ 是从v 到目标的实际距离。
请注意,例如,迷宫的曼哈顿距离启发式是可以接受的。

希望能解决你的困惑。

【讨论】:

  • 所以启发式函数是用顶点设置的,对吧?我创建了顶点 X 并为其设置了启发式成本 Y。Y 是启发式成本,表示从 X 到目标的距离,对吗?但是当我创建顶点时,我不知道目标。如果目标改变了怎么办? X 顶点启发式成本对于另一个顶点也相同吗?我不明白这一刻。 添加 is the real distance — 真正的直线距离还是将其他顶点扔到目标的距离?
  • @SharikovVladislav 如果目标改变,您需要不同的启发式函数。启发式函数是特定于每个目标(或一组目标,确切地说)。如果目标改变了——那么启发式方法很可能也需要改变。 the real distance 是从节点到目标的真正最短路径,通过其他顶点。
  • 哦,好吧。所以我有图表。例如这个:link to image。 4是目标(红色一)。例如,我将目标更改为第三个顶点。我现在必须更新从每个顶点到目标的启发式成本,对吗?
  • @SharikovVladislav 如果您希望它是可接受的和信息丰富的(并且您这样做),那么是的 - 您必须这样做。
  • 启发式成本是假设,对吧?所以我观察图表并做出假设。需要注意什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-26
  • 1970-01-01
  • 2020-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多