【问题标题】:How to determine a Heuristic for an algorithm, say A*, is a good one如何确定算法的启发式,比如 A*,是一个很好的方法
【发布时间】:2013-09-12 06:14:55
【问题描述】:

我最近在学习 A* 算法,我知道在寻找潜在路径时它需要一个启发式值,并且我也了解启发式算法的一致性和可接受性。但我很困惑,什么样的启发式是好的,为什么它是好的?

顺便说一句,启发式是如何工作的?

【问题讨论】:

  • 我认为这完全取决于问题。你有什么具体的问题要解决吗?喜欢 TSP 还是 Number Scramble?
  • 例如,一个吃豆人在网格地图中,有超过 1 个食物托盘可以吃。扩展节点最少的食物托盘怎么吃完?

标签: artificial-intelligence heuristics


【解决方案1】:

在我看来,选择启发式方法主要取决于问题。然而,如果以面向目标的方式理解问题,则选择启发式方法会变得更容易。至少那是我所做的。我遵循的想法是这样的:

启发式在目标状态下计算为零。

那么所有的场景是什么?在目标处产生零的所有函数是什么?

可能的启发式方法

  1. 剩余的食品托盘数量?
  2. 当前托盘到下一个未探索托盘的距离?
  3. 带有食品托盘等的网格中的未探索区域

我会选择最后一个选项,因为它看起来更可靠,尽管所有三个最终都会导致解决方案。

所以,我相信,您可以通过将自己置于目标来选择启发式方法 状态,然后回头看看你在 方式。所以从某种意义上说,启发式算法只不过是一个近似值 需要完成什么(在目标处评估为 0)。

【讨论】:

  • 感谢您的回复。但我还是很困惑,究竟什么是好的启发式?根据 pacman 问题,你能告诉我你想出的可能的启发式方法吗?
  • 我没有 pacman 的工作代码。但是请看这里imbhargav.wordpress.com/2013/01/19/a-starsearch。 A* 中最短路径问题的工作代码。
  • 如果一张地图有多个目标,我们是将每个目标的总启发式作为启发式返回还是每次只返回一个?
  • 通读整个帖子后,我仍然不知道。还是谢谢你
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-11
  • 2011-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-06
  • 1970-01-01
相关资源
最近更新 更多