【问题标题】:Why isn't my heuristic for the A* algorithm admissible?为什么我对 A* 算法的启发式不可接受?
【发布时间】:2013-12-13 06:49:27
【问题描述】:

我正在通过 edx.org 向公众提供 CS 188。现在我必须为 A* 搜索开发一个启发式算法来吃掉所有的颗粒,如下所示:

我确信会起作用的启发式方法(既可接受又一致)是这样的:

  • 将名为 h 的启发式累加器初始化为 0
  • 初始化 pos 为 pacman 的当前位置
  • 当没有吃掉颗粒时:
    • 使用 astar 搜索从 pos 获取最近的弹丸(曼哈顿距离作为启发式)
    • 将距离添加到 h
    • 从颗粒中取出颗粒
    • 设置 pos 为小球的位置

我还缓存了之前计算的距离,因此如果之前在另一个状态计算中已经完成了寻找最近颗粒的 astar 搜索,则不会完成。它能够非常快速地解决问题,并且结果是最优的。

当我在自动评分器中使用此算法时,它无法通过可接受性测试。

别担心,我不是要求解决问题,只是为什么我目前的解决方案不可接受?当我在脑海中浏览图片中的示例时,启发式永远不会高估成本。

因此,如果有人能够理解这一点,并且有任何想法,我们将不胜感激!

【问题讨论】:

  • 只是确保 - 您的距离函数是否正确考虑了墙壁?
  • 整个事情难道不是要进行 A-star 搜索,而不仅仅是为了找到最近的颗粒吗?
  • @Dukeling 整个搜索怎么可能是 A*?搜索没有单一的goal。 @Zach:您可以发布或链接到问题或问题的确切描述吗?曼哈顿距离绝对应该是可以接受的;也许您的代码中有一个错误,所以当没有障碍物时,启发式比实际成本大一?
  • @tobias_k 吃掉所有的颗粒似乎是一个非常合理的目标。
  • @Dukeling 你说得对;我在寻路方面想的太多了……

标签: algorithm search artificial-intelligence a-star heuristics


【解决方案1】:

A* 的启发式需要提供一个不超过最佳可能成本的数字。您的启发式方法是一个看似合理的贪婪解决方案,但不能保证这一点。假设有一行小球,而吃豆人在这条线上稍微偏离了中心。最便宜的解决方案是找出线的哪一端最近,吃掉该线末端的所有颗粒,然后朝另一个方向移动以吃掉所有其他颗粒,而不必在线的较长一半处倒车。

你的贪婪启发式首先移动到离吃豆人最近的那个可能不是距离最短的一侧,所以在这种情况下,它可能不会返回不大于最佳成本的成本 - 它会返回成本可能的解决方案可能不是最优的。

【讨论】:

  • 谢谢你。我使用的示例并没有帮助我理解它是不可接受的。这很有道理!
【解决方案2】:

这是设置启发式方法的方法,该方法适用于您的问题。首先,如果您的目标是在最短距离内吃掉所有颗粒,那么您的解决方案过于贪婪,无法实现可行的解决方案。这是重新设计启发式的方法:-

目标:以最短路径长度吃掉所有颗粒。

启发式估计:

1.> 使用 A* 独立计算从当前位置到颗粒的所有最短路径。

2.> 成本函数:(所有未访问的颗粒与当前最短路径的总和)*2 + 与起始状态的总距离。

成本函数是上限。

注意:可以有更有效的方法来计算每个状态下未吃颗粒的最短路径。需要一些研究。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    • 2013-01-12
    • 2013-05-09
    • 1970-01-01
    • 2016-04-27
    • 2017-01-24
    相关资源
    最近更新 更多