【问题标题】:A* algorithm on a directed graph [closed]有向图上的 A* 算法 [关闭]
【发布时间】:2013-11-23 13:12:37
【问题描述】:

您好,谁能帮我理解 A* 算法在此图上的工作原理?

我想找到从 1 到 7 成本最低的路径。

这是我解决问题的方法: 从 1 -> 7:

{1,2}f = 2+7=9
 {1,3}f = 11+0=11
 {1,4}f = 1+11=12

展开 2

{1,3}f = 11+0=11
 {1,4}f = 1+11=12
 {1,2,5}f = (2+3)+5=10

展开 5

{1,3}f = 11+0=11
 {1,4}f = 1+11=12
 {1,2,5,3}f = (2+3+5)+0=10
 {1,2,5,7}f = (2+3+7)+0=12

展开 3

{1,3}f = 11+0=11
 {1,4}f = 1+11=12
 {1,2,5,7}f = (2+3+7)+0=12
 {1,2,5,3,7}f = (2+3+5+1)+0 = 11
 {1,2,5,3,6}f = (2+3+5+1)+1=12

所以正确答案是{1,2,5,3,7}f = (2+3+5+1)+0 = 11。我在写吗?

【问题讨论】:

  • 从技术上讲,由于 {1,3}{1,2,5,3,7} 在最后一步中的成本相同,您应该检查路径 {1,3,6}{1,3,7},因为它们最终的成本可能与 @ 相同987654331@。在某些图表中,您最终可能会得到相同成本的多条路径。
  • 但他们没有:)。如果会有多条成本相同的路径,正在考虑哪一条?
  • But they don't - 但您只知道这一点,因为您扩展了这些路径并发现它们的成本更高。 :) 至于多条路径中选择哪条路径,可以全部取,第一条,最后一条,随机一条,边最少的,边最多的,最北的边缘...换句话说,这完全取决于您要解决的问题和您的偏好。

标签: graph graph-algorithm a-star


【解决方案1】:

我将假设括号中的数字是使用某种启发式方法从给定节点到目标的估计距离(乍一看,它们似乎与可接受的启发式函数一致)。如果是这种情况,那么这就是成本方程中的 h(x)

f(x) = g(x) + h(x)

g(x) 将是从源到节点 x 的路径的实际成本。从节点 1 开始,我们有 3 条出边:2、3 和 4。

f(2) = g(2) + h(2)
f(3) em> = g(3) + h(3)
f(4) = g(4) em> + h(4)

填写我们得到的图表中的数字:

f(2) = 2 + 7 = 9
f(3) = 11 + 0 = 11
f(4) = 1 + 11 = 12

f(2) 是成本最低的,所以我们选择节点 2。下一步不是很有指导意义(因为我们只能去节点 5)除了要注意 g(x)是从源节点x从源节点到达节点的实际成本,即边1->2的成本加上边的成本边缘 2->5:

g(5) = 2 + 3 = 5

从那里 g(3)g(7) 会将它们的边缘成本添加到 g(5)。希望你能看到现在的进展情况,并能完成这条道路。

编辑:

A* Search Algorithm 中的示例存在一些混淆。我将尝试在此处使用的符号和我使用的符号之间进行转换。

以另一个问题中的决策为例,我们选择了从 S 到 A 的路径。我们必须继续到节点 X 或 Y 的路径。它们显示:

{S,A,X} f = (1+4)+5=10
{S,A,Y} f = (1+7)+8=16

在我一直使用的符号中,这相当于:

f(X) = (1+4)+5=10,其中 g(X) = (1+4) 且 h(X ) = 5
f(Y) = (1+7)+8=16,其中g(Y) = (1+7) h(Y) = 8

正如您在这两种情况下所看到的,当您尝试决定下一个选择哪个节点(X 或 Y)时,您必须将到达该节点的实际成本 g(x) 添加到从那个节点到目标,h(x)。

【讨论】:

  • 在 g(5) 上我们不应该添加 5 的估计距离吗?所以g(5) = (2+3)+5 = 10?这就是我在示例中看到的方式,其中增加了所涉及边的成本以及该节点的估计距离。哪一个是正确的?我很困惑...
  • 请告诉我哪种方法是正确的..
  • g(x) 不包括任何估计;它是到达节点 x 的路径的实际 长度。 (h(x) 是从节点 x 到目标的剩余路径的估计值。)例如,g(1) = 0g(7) 将是长度找到的路径作为最终答案。
  • 也许如果你包含了这些信息,你的实际问题是什么,以及上一篇让你感到困惑的帖子,这个帖子就永远不会被关闭。我建议您使用此信息编辑您的问题,看看是否可以重新打开它。至于你的问题,这个例子似乎完全正确。过一会儿我会看一下然后回复你。
猜你喜欢
  • 1970-01-01
  • 2014-08-05
  • 1970-01-01
  • 2021-12-19
  • 2011-01-09
  • 2016-12-20
  • 2010-09-20
相关资源
最近更新 更多