📜  DAA-爬山算法

📅  最后修改于: 2021-01-12 03:43:12             🧑  作者: Mango


前几章讨论的算法是系统运行的。为了实现该目标,需要存储一条或多条先前探索的解决方案路径,以找到最佳解决方案。

对于许多问题,实现目标的路径是无关紧要的。例如,在N-皇后问题中,我们不需要关心皇后的最终配置以及皇后添加的顺序。

爬山

爬山是一种解决某些优化问题的技术。在此技术中,我们从次优解决方案开始,并反复改进解决方案,直到某些条件最大化。

爬山

比较从以次优解决方案开始的想法与从山的底部开始的想法,将解决方案的改进与在山上行走相比,最后将最大化某个条件的情况与到达山顶进行了比较。

因此,可以将爬山技术视为以下几个阶段-

  • 遵循问题的约束构造次优解决方案
  • 逐步改进解决方案
  • 改进解决方案,直到无法再进行改进

爬山技术主要用于解决计算难题。它仅查看当前状态和近期状态。因此,由于该技术不维护搜索树,因此具有存储效率。

Algorithm: Hill Climbing 
Evaluate the initial state. 
Loop until a solution is found or there are no new operators left to be applied: 
   - Select and apply a new operator 
   - Evaluate the new state: 
      goal -→ quit 
      better than current state -→ new current state 

迭代改进

在迭代改进方法中,通过在每次迭代中朝着最优解的方向发展来获得最优解。但是,此技术可能会遇到局部最大值。在这种情况下,没有附近的州可以提供更好的解决方案。

可以通过不同的方法来避免此问题。这些方法之一是模拟退火。

随机重启

这是解决局部最优问题的另一种方法。该技术进行一系列搜索。每次,它从随机生成的初始状态开始。因此,通过比较搜索结果,可以获得最佳或接近最佳的解。

爬山技术的问题

本地千里马

如果启发式方法不是凸的,那么“爬山”可能会收敛到局部最大值,而不是全局最大值。

里奇斯和胡同

如果目标函数创建了狭窄的山脊,则登山者只能通过曲折攀登山脊或下巷。在这种情况下,登山者需要采取非常小的步骤,需要更多的时间才能达到目标。

高原

当搜索空间平坦或足够平坦以至于目标函数返回的值与附近区域返回的值无法区分时,由于机器使用精度来表示其值,因此会遇到平稳状态。

爬山技术的复杂性

该技术仅考虑当前状态,因此不会遇到与空间有关的问题。以前浏览的路径不会存储。

对于随机重启爬山技术中的大多数问题,可以在多项式时间内获得最佳解决方案。但是,对于NP-完全问题,计算时间可以基于局部最大值的数量成指数增长。

爬山技术的应用

爬山技术可用于解决许多问题,其中当前状态允许提供准确的评估函数,例如网络流,旅行商问题,8皇后问题,集成电路设计等。

爬山也用于归纳学习方法。该技术在机器人技术中用于团队中多个机器人之间的协调。使用此技术还有许多其他问题。

该技术可用于解决旅行商问题。首先,确定一个最初的解决方案,该解决方案只对所有城市进行一次访问。因此,这种初始解决方案在大多数情况下不是最佳的。即使这种解决方案也可能非常差。爬山算法从这种初始解决方案开始,然后以迭代方式对其进行改进。最终,可能会获得更短的路线。