【问题标题】:A* Algorithm and use of F and G heuristicsA* 算法和 F 和 G 启发式的使用
【发布时间】:2012-04-26 22:38:23
【问题描述】:

我的 A* 算法在一定程度上发挥了作用。它会跟随玩家在一个空间中四处走动,但它不会绕过一个需要远离目标才能绕过它的物体。当它意识到下一个节点有更高的 F 值(离目标更远)时,它会拒绝去那里,只会继续寻找更低的 F 值(离目标更近的节点)而找不到一个(它卡在一个永无止境的循环)。

我认为我对启发式使用的理解可能是问题所在。

我的 A* 总是移动到具有最低 F 值 (H+G) 的下一个节点。除了将它们添加到 F 之外,我从不考虑 G 或 H 值。

在我读过的教程中,他们谈到使用 G 值,但我认为 F 值是唯一重要的。

请有人总结一下我是如何使用启发式值的。我想我快到了,只是启发式的使用令人困惑。

【问题讨论】:

    标签: algorithm


    【解决方案1】:

    您是否保留了备用路径段的优先级队列?如果你只看成本最低的下一步,你将无法绕过障碍。

    【讨论】:

    • 是的,这听起来像是我的问题。它只是想走成本最低的一步,甚至没有试图摆脱它。有什么方法可以确保它转到其他节点而不是最低成本?
    • 你用什么语言实现它?很有可能,其他人已经这样做了。
    • C#(不是 XNA)。在 C# 中有一个简单的实现吗?我试图下载一个,但它需要付费。
    • 现在你在说话。有很多免费的,包括教程:stackoverflow.com/questions/2138642/…
    • 谢谢优素福。这些例子真的很有帮助。希望我可以使用它们来创建我自己的,而不仅仅是使用他们的代码。感觉自己像个白痴,无法自己解决这个问题。
    【解决方案2】:

    你明白了。 H 告诉您到达该节点实际需要多远; G 是您必须走多远的估计值。如果您只考虑 G,那么您会选择最接近目标的路径,即使到达该节点需要很长时间。这就是你使用 F (=H+G) 的原因,这样当你第一次达到一个目标时,你就知道它是最短路径的那个。

    现在,如果您有无数条路径,那么试图找到最佳路径可能会成为问题。或者您的路径生成算法可能有问题(例如,导致您重新考虑路径)。由于您没有就问题提供更多详细信息,因此我不能说更多可能有用的信息。

    再一次,你可能有一个不好的(或者更糟,不可接受的)启发式函数......

    【讨论】:

    • 我已经通过让地图填充每个坐标的数字来检查我的启发式方法,并且在我计算它们时它们相加。我认为我需要一种方法来选择一个节点,因为它实际上不是较低的 F 值,而是唯一的其他选择(例如进入 U 形,你必须移得更远才能再次靠近)
    • 等待——正如@Yusuf_X 建议的那样,您必须记录所有可能的打开(即未完成)路径。如果不是,你没有正确地做 A*,你在做爬山,这只是你似乎描述的那种局部最小值问题。
    • 开放路径是指与当前节点相邻的节点吗?因为我正在这样做。它检查相邻节点以查看哪个最好(最低 F 值)。我有一个 OpenList 和一个 ClosedList,我将最好的节点添加到 ClosedList 可用的节点中,然后检查这些节点与节点相邻。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-19
    • 1970-01-01
    • 1970-01-01
    • 2013-03-07
    • 2011-08-22
    相关资源
    最近更新 更多