【问题标题】:Need some help for understanding search algorithms (A*, IDA*, DFS, BFS, IDDFS, etc. )需要一些帮助来理解搜索算法(A*、IDA*、DFS、BFS、IDDFS 等)
【发布时间】:2011-05-21 21:08:28
【问题描述】:

我在理解 AI(人工智能)中使用的一些搜索算法时遇到了一些麻烦。

  • A*IDA* (Iterative Deeping A Star) 之间的确切区别是什么?仅仅是启发式函数吗?如果是这样,我仍然无法想象 IDA* 是如何工作的……:/
  • IDA*BFS (Breadth-First search)一样吗(当扩展深度只有1级的时候,我的意思是——只是一层一层地“向下”移动,之间有什么区别吗? >IDA*BFS)
  • IDDFS (Iterative-Deeping Depth-First Search)IDA*一样,除了启发式函数(相当于IDDFS中的0)
  • IDDFS 到底是什么 - 向下移动 仅一级,然后使用 DFS (Depth-First Search)?如果是这样,那么通过这种方式计算(扩展)的状态远远多于状态。或者就像这样 - 使用具有特定深度的 DFS,然后存储“叶子”(最后扩展的节点) ,并遍历它们以再次使用 DFS(实际上是 BFS?)
  • 迭代”从何而来?如我所见,IDDFS 根本不是迭代的,它仍然是递归的,只是混合了 BFSDFS?还是我错了?还是这个“iterative”跟递归的反面没有关系?
  • IDA* 的“迭代”是什么?

请您提供一些例子吗?我整天阅读这些算法,我知道它们的优缺点、复杂性等,但我就是找不到任何好的例子(除了 A*;我知道 BFS 和 DFS,其他的困扰我)。我在不同的地方找到了一些 IDA* 的伪代码,但它们完全不同。

示例将是理解算法的最佳方式..但我找不到。即使在TopCoder,我也没有找到任何关于 IDA* 的信息。

我已经阅读了 wiki 文章,并且正在寻找新的东西(:

非常感谢!


编辑: Here some nice articles,但它们太理论化了。没有例子,没有任何具体的东西。但还是很有用的。我会推荐他们(=

【问题讨论】:

  • 您要解决什么样的问题?你问的问题花了我大学 AI 课大约 5 周的时间来回答,所以要回答的有点多。
  • 这个问题与THIS one 有点关系,但只是一点点。我需要先深入了解这些算法。任何讲座或文章都会有所帮助。谢谢(:
  • 这个问题最好不止一个问题。我在下面解释了 IDDFS,在尝试 IDA* 之前您确实需要了解这一点。你在 A* 上怎么样?在尝试学习 IDA* 之前,您应该熟悉 A* 和 IDDFS。
  • @David - 我完全理解 A*。或者,至少,我是这么认为的。
  • 你需要给自己买一本书,坐下来阅读。 Russel & Norvig “AI - 现代方法”可能是合适的。

标签: algorithm search artificial-intelligence belongs-to


【解决方案1】:

让我们从迭代深化深度优先搜索开始。

这个想法是深度优先搜索是有效的,但不一定会很快找到正确的答案。所以,做一个深度为 1 的 DFS。如果你还没有找到答案,那么做深度为 2。重复直到你找到答案,或者决定放弃。这会自动为您提供搜索树上的最短路径,因为如果存在长度为 N 的路径,您永远不会搜索长度为 N + 1 的路径。

您需要做的是更改深度优先搜索,使其深入 N 个节点(即,如果您的深度为 N,则不要生成新节点),并以增加 N 的方式调用它。您除了 N 的值和你为 DFS 做的任何事情之外,不要存储任何东西。

迭代伴随着迭代地增加搜索深度。如果分支因子大于 2,性能可能会非常好,因为在这种情况下,深度有界 DFS 的大部分成本都处于最低水平。

首先学习迭代深化 DFS,然后将其应用于 IDA*。十五年前我读过一篇关于这些搜索的早期 Korf 论文,不记得 IDA* 是如何运作的很好,但您的主要问题是您一开始就不了解迭代深化。

【讨论】:

  • 是的,你说得对,我不明白 IDDFS 与 BFS 有何不同,因为想法看起来一样:?
  • @Kiril:你击中了与 BFS 相同的节点。您不必保留队列并检查节点的唯一性。这个想法是将 DFS 的空间和大部分性能优势与 BFS 的有保证的最短路径查找相结合。
  • 不一样。空间权衡是关键。 wiki 页面很好地解释了好处:en.wikipedia.org/wiki/Iterative_deepening_depth-first_search
猜你喜欢
  • 2012-10-16
  • 2016-02-10
  • 2012-02-17
  • 2012-02-10
  • 1970-01-01
  • 2012-02-02
  • 1970-01-01
  • 2022-09-24
  • 2019-05-01
相关资源
最近更新 更多