爬山搜索和最佳优先搜索有啥区别?

Posted

技术标签:

【中文标题】爬山搜索和最佳优先搜索有啥区别?【英文标题】:What is the difference between Hill Climbing Search and Best First Search?爬山搜索和最佳优先搜索有什么区别? 【发布时间】:2011-05-27 01:31:35 【问题描述】:

我正在尝试学习一些搜索概念,但在此过程中遇到了困难。谁能向我解释爬山搜索和最佳优先搜索之间的区别是什么?对我来说,它们看起来都像是用最接近目标的启发式值扩展节点。如果有人可以向我解释其中的区别,将不胜感激。谢谢!

【问题讨论】:

你试过维基吗?你发现了什么? 我做到了,但在扩展具有最佳启发式值的节点时我仍然感到困惑。在我看来,这两种算法似乎都以最佳启发式值扩展了节点 另见this post。 【参考方案1】:

您可以将搜索算法视为具有要搜索的剩余节点的队列。 This answer demonstrates this principle.

在深度优先搜索中,您将当前节点的子节点添加到队列(堆栈)的front。在广度优先搜索中,您将当前节点的子节点添加到队列的 back。想一想这如何为这些算法带来正确的行为。

现在,在爬山搜索中,您排序[1] 当前节点的子节点,然后再将它们添加到队列中。在最佳优先搜索中,您将当前节点的子节点以任何旧顺序添加到队列中,然后排序[1] 整个队列。如果您考虑可能对搜索节点的顺序产生的影响,您应该了解实际差异。

我发现这个概念过于复杂,无法从纯粹抽象的术语中理解,但如果你用铅笔完成几个示例,它就会变得简单。

[1]:根据对解决方案节点的某些特定问题的评估进行排序,例如寻路搜索中的“到目的地的距离”。

【讨论】:

【参考方案2】:

晚了一点,但这里开始。

在 BFS 中,它是关于找到目标的。所以这是关于在可能的节点中选择最好的节点(我们希望能带我们达到目标的节点)。我们一直在努力朝着目标前进。

但是在爬山中,它是关于最大化目标函数的。我们选择提供最高上升的节点。 所以和BFS不同的是,父节点的“价值”也被考虑进去了。如果不能再高,就放弃吧。在那种情况下,我们甚至可能达不到目标。我们可能处于局部最大值。

【讨论】:

【参考方案3】:

让我Wiki that for you:

在简单的爬山中,第一个 选择更接近的节点,而在 攀登最陡峭的山坡 继任者进行比较和 选择最接近解决方案。

...

最陡峭的上升 爬山类似于最佳优先 搜索,尝试所有可能的 而是当前路径的扩展 只有一个。

【讨论】:

“尝试当前路径的所有可能扩展”是什么意思?不是只扩展启发式值最好的节点吗? 最佳优先搜索计算所有相邻节点的值,然后迭代最佳节点。简单的爬山会依次计算每个相邻节点的值,并在找到比当前节点更好的节点时立即迭代。【参考方案4】:

区别在于理解在寻找目标状态更关心什么。

提问我们的目标是什么... 最终目标状态? 或达到目标状态的最佳路径

最佳优先搜索是一种系统搜索算法,通过在找出 每个当前节点的相邻节点的最佳启发式值

这里评估函数(启发式函数)计算 实现目标状态的最佳路径。所以在这里我们可以看到 Best First 搜索关注的是达到目标状态的最佳 PATH。

但是有很多问题,“通往目标的道路不是问题,唯一关心的是达到最终状态 strong> 以任何可能的方式或路径。 (例如:8-queens 问题)。

因此使用了本地搜索算法

本地搜索算法使用单个当前节点进行操作,并且通常只移动到该节点的邻居

爬山算法是一种局部搜索算法。 所以在这里我们需要了解到达目标状态的方法,而不是在考虑爬山时达到的最佳路径。

(如 AI-A Modern Approach,SR & PN 中所述)

基本上,要了解本地搜索,我们需要考虑状态空间格局

景观兼具

(i) 位置(由状态定义)和

(ii) 高程(由启发式函数或目标函数的值定义)

我们需要了解两种海拔高度

(i) 如果高程对应于一个目标函数,那么目标是找到最高峰,即全局最大值

(所以这些类型的海拔在不关心成本而只关心寻找最佳即时动作的不同场景中很有用)

(ii) 如果海拔对应于成本,则目标是找到最低谷,即全球最小值

(这是常见的事情,即最陡(总是以更好的估计,即没有高原问题或任何其他问题)爬山类似于最佳优先搜索。这里的高程函数是启发式函数,提供最佳最小成本。这里的爬山只关心当前节点遍历相邻节点以获得最小值继续扩展最佳节点,类似于Best First Search

注意

爬山算法不会超越当前状态的直接邻居。它只关心最佳邻居节点进行扩展。最佳邻居由上述评估函数决定。

,Best First Search 算法先于近邻找到到达目标的最佳路径(使用启发式评估),然后继续寻找最佳路径。 所以区别在于局部搜索和系统搜索算法的方法。

了解方法的区别,你会知道为什么两者的命名不同。

【讨论】:

以上是关于爬山搜索和最佳优先搜索有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

DFS剪枝小猫爬山

DFS剪枝小猫爬山

DFS剪枝小猫爬山

爬山算法

随机爬山与首选登山算法

模拟退火算法和遗传算法