我正在尝试使用不同的算法来解决问题,而Steepest Ascent Hill Climbing(SAHC)和Best First Search是我需要实现的两种算法。
“在最陡峭的登山攀登中,所有后继者都会进行比较,并选择最接近解决方案......”
“最陡峭的登山攀爬类似于最佳优先搜索,它尝试当前路径的所有可能扩展,而不是只有一个。”
SAHC :比较所有后继者,并选择最接近解决方案。
BestFS :尝试当前路径的所有可能扩展,而不只是一个。
我真的不明白这些是如何不同的。有些人可以帮我这个,最好是用树木做一些解释吗?
答案 0 :(得分:12)
他们非常相似。不同之处在于,最佳优先搜索会考虑从起始节点到结束节点的所有路径,而最陡峭的上坡爬山只会在搜索过程中记住一条路径。
例如,假设我们有一个像
这样的图表start ---- A ---- B ---- end
\ /
------\ /---------
\ /
C
每个边缘具有相同的权重:忽略我糟糕的ASCII艺术技巧:)。 还假设在我们的启发式函数中,A被认为比C更接近末尾。(这可能仍然是admissible heuristic - 它只是低估了A的真实距离。)
然后最陡峭的爬坡将首先选择A(因为它具有最低的启发式值),然后选择B(因为它的启发式值低于起始节点),然后是结束节点。
另一方面,最佳优先搜索
步骤3中B或C的选择完全取决于您使用的最佳优先搜索算法。 A*将评估节点作为到达那里的成本加上到达终点的成本估计,在这种情况下C将获胜(事实上,使用可接受的启发式,A *保证总是得到你是最佳路径)。 “贪婪的最佳优先搜索”将在两个选项之间任意选择。在任何情况下,搜索都会保留一个可能的地点列表,而不是单个列表。
两者现在有何不同之处是否更清楚了?
答案 1 :(得分:3)
SAHC将贪婪地选择一条(可能是非最佳的)路径 - 它只需在每一步获取最佳节点,直到它到达目标。
另一方面,最好先生成一个完整的搜索树。通常(在A *的情况下)它将找到最佳解决方案,这不能保证SAHC。
答案 2 :(得分:0)
Dint知道如何标记如此粘贴它,对不起。所以这就是我得到的不同之处。
差异在于理解在搜索目标状态时更关注。
提出问题我们的目标是什么...... 最终目标状态? 或达到目标状态的最佳途径
最佳优先搜索是一种系统搜索算法,通过在找出问题的基础上迭代地向前移动来实现系统性 每个当前节点的相邻节点的最佳启发式值。
这里评估函数(启发式函数)计算 实现目标状态的最佳途径。所以在这里我们可以看到Best First搜索关注到达目标状态的最佳PATH。
然而,有很多问题,其中" 目标之路" 不是关注,唯一关心的是以任何可能的方式或路径实现最终状态。 (例如: 8-queens问题)。
因此,使用本地搜索算法。
本地搜索算法使用单个当前节点运行,而通常仅移动到该节点的邻居。
Hill Climbing算法是本地搜索算法。 所以在这里我们需要了解到达目标状态的方法,而不是考虑爬山时达到的最佳路径。
(如 AI-A Modern Approach中所述,SR& PN )
基本上,要了解本地搜索,我们需要考虑状态空间格局。
格局同时具有
(i)位置(由州定义)和
(ii)海拔(由启发函数或目标函数的值定义)
我们需要了解两种类型的高程,
(i)如果高程对应 目标函数,则目标是找到最高峰,即全局最大值。< / p>
(因此,这些类型的提升在不考虑成本且仅关注找到最佳即时移动的不同场景中非常有用)
(ii)如果高程对应成本,那么目标是找到最低谷值,即全局最小值。
(这是常见的事情即Steepest(总是加强更好的估计,即没有高原问题或任何其他)登山类似于Best First Search。这里提升功能是启发函数提供最佳最低成本。这里的爬山仅涉及当前节点,通过相邻节点迭代以获得最小值和继续扩展最佳节点,类似于最佳优先搜索)
注意:
Hill Climbing算法不会超越当前状态的直接邻居。它只关注扩展的最佳邻居节点。最佳邻居由上述评估函数决定。
然而,最佳优先搜索算法超越直接邻居以找到目标的最佳路径(使用启发式评估),然后继续使用最佳路径。 因此,区别在于本地搜索和系统搜索算法的方法。
了解方法的不同,您将了解为何两者的名称不同。