【发布时间】: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