Hill Climbing 是一种启发式搜索,用于人工智能领域的数学优化问题。
给定大量输入和良好的启发式函数,它会尝试为问题找到足够好的解决方案。该解决方案可能不是全局最优最大值。
- 在上面的定义中,数学优化问题意味着爬山解决了我们需要通过从给定输入中选择值来最大化或最小化给定实函数的问题。示例 – 旅行推销员问题,我们需要最小化推销员旅行的距离。
- “启发式搜索”意味着该搜索算法可能无法找到问题的最佳解决方案。但是,它将在合理的时间内给出一个很好的解决方案。
- 启发式函数是一种函数,它将根据可用信息对搜索算法中任何分支步骤中的所有可能备选方案进行排名。它有助于算法从可能的路线中选择最佳路线。
爬山的特点
1. 生成和测试算法的变体:它是生成和测试算法的变体。生成和测试算法如下:
1. Generate possible solutions.
2. Test to see if this is the expected solution.
3. If the solution has been found quit else go to step 1.
因此,我们称爬山为生成和测试算法的一种变体,因为它从测试过程中获取反馈。然后生成器利用此反馈来决定搜索空间中的下一步移动。
2. 使用贪心方法:在状态空间中的任何一点,搜索只向那个方向移动,这会优化函数的成本,并希望最终找到最佳解决方案。
爬山的类型
- 简单爬山:逐个检查相邻节点,选择第一个优化当前成本的相邻节点作为下一个节点。
简单爬山算法:
Step 1 : Evaluate the initial state. If it is a goal state then stop and return success. Otherwise, make initial state as current state.
Step 2 : Loop until the solution state is found or there are no new operators present which can be applied to the current state.
a) Select a state that has not been yet applied to the current state and apply it to produce a new state.
b) Perform these to evaluate new state
i. If the current state is a goal state, then stop and return success.
ii. If it is better than the current state, then make it current state and proceed further.
iii. If it is not better than the current state, then continue in the loop until a solution is found.
Step 3 : Exit.
2.最陡峭的爬山:首先检查所有相邻节点,然后选择最接近下一个节点的解状态的节点。简单爬山算法:
Step 1 : Evaluate the initial state. If it is a goal state then stop and return success. Otherwise, make initial state as current state.
Step 2 : Repeat these steps until a solution is found or current state does not change
a) Select a state that has not been yet applied to the current state.
b) Initialize a new ‘best state’ equal to current state and apply it to produce a new state.
c) Perform these to evaluate new state i. If the current state is a goal state, then stop and return success. ii. If it is better then best state, then make it best state else continue loop with another new state.
d) Make best state as current state and go to Step 2: b) part.
Step 3 : Exit
3.随机爬山:在决定选择哪个节点之前,它不会检查所有相邻节点。它只是随机选择一个相邻节点并决定(基于该邻居的改进量)是移动到该邻居还是移动到该邻居检查另一个。
第 1 步:评估初始状态。如果是目标状态,则停止并返回成功。否则,将初始状态设为当前状态。
步骤 2:重复这些步骤,直到找到解决方案或当前状态不变。
a) 选择一个尚未应用到当前状态的状态。
b) 将后继函数应用于当前状态并生成所有邻居状态。
c) 在生成的比当前状态更好的邻居状态中随机选择一个状态(或基于某个概率函数)。
d) 如果选择的状态是目标状态,则返回成功,否则将其设为当前状态并重复步骤 2:b) 部分。
第三步:退出。
爬山的状态空间图
状态空间图是我们的搜索算法可以达到的一组状态与我们的目标函数(我们希望最大化的函数)的值的图形表示。
X 轴:表示状态空间,即我们的算法可能达到的状态或配置。
Y轴:表示特定状态对应的目标函数值。
最好的解决方案是目标函数具有最大值(全局最大值)的状态空间。
状态空间图中的不同区域:
- 局部最大值:它是一个比它的相邻状态更好的状态,但是存在一个比它更好的状态(全局最大值)。这种状态更好,因为这里目标函数的值高于它的邻居。
- 全局最大值:它是状态空间图中可能的最佳状态。这是因为在这种状态下,目标函数具有最高值。
- 高原/平坦局部最大值:它是状态空间的平坦区域,其中相邻状态具有相同的值。
- Ridge :它是比其邻居高但本身有坡度的区域。它是一种特殊的局部最大值。
- 当前状态:我们在搜索过程中当前所在的状态空间图区域。
- 肩部:这是一个有上坡边缘的高原。
爬山不同地区的问题
如果爬山进入以下任何区域,则无法达到最佳/最佳状态(全局最大值):
- 局部最大值:在局部最大值处,所有相邻状态的值都比当前状态差。由于爬山使用贪婪的方法,它不会移动到更坏的状态并终止自己。即使可能存在更好的解决方案,该过程也会结束。
克服局部最大值问题:利用回溯技术。维护访问状态列表。如果搜索达到不希望的状态,它可以回溯到之前的配置并探索新的路径。 - 高原:在高原上,所有邻居都具有相同的值。因此,不可能选择最佳方向。
克服高原:大跃进。随机选择一个远离当前状态的状态。我们很有可能会降落在一个非高原地区。
- 山脊:山脊上的任何一点都可能看起来像峰值,因为所有可能方向的运动都是向下的。因此,算法在达到此状态时停止。
克服岭:在这种障碍中,在测试之前使用两个或更多规则。它意味着同时向多个方向移动。