人工智能中的深度限制搜索

2025年4月1日 | 阅读 8 分钟

在人工智能方法的问题领域中,最重要的算法之一是深度受限搜索。

理解深度优先搜索 (DFS)

深度优先搜索算法从树或图的根节点开始,沿着每条分支尽可能深地探索,然后再回溯。它从根节点沿着一条路径到达叶节点,然后掉头去探索其他路径。当处理大型或无限的树时,这种方法可能效率低下,因为它可能会检查不包含目标的深层分支,从而浪费时间和资源。

介绍深度受限搜索 (DLS)

深度受限搜索是 DFS 的一种变体,它对搜索的深度进行了限制。通过限制节点探索到特定深度,有效地阻止了算法沿着不太可能导向目标的过深路径进行搜索。DLS 旨在通过设置最大深度限制来提高效率并提供更可控的搜索时长。

深度受限搜索的操作

  1. 初始化:设置一个深度限制并从根节点开始。
  2. 探索:在树或图中移动时,探索每个节点的子节点。
  3. 深度检查:如果当前深度超过预定限制,则停止探索该路径并回溯。
  4. 目标检查:如果在深度限制内找到目标节点,则搜索被视为成功。
  5. 回溯:如果搜索在达到深度限制或叶节点后未能找到目标,则回溯并探索其他分支。

深度受限搜索在人工智能中的应用

  1. 机器人路径规划:DLS 用于在存在障碍物的情况下规划非完整机器人的运动。通过限制深度,它可以防止机器人走得太远,并迫使它在检查完某个区域的特定深度后停止。
  2. 网络路由算法:在计算机网络中,DLS 可用于计算节点之间的路径,同时限制跳数以避免循环。
  3. 解谜 AI 系统:通过预定次数地改变可能的移动,DLS 可用于解决数独和 8 拼图等谜题,同时减少搜索步骤。
  4. 游戏玩法:在游戏 AI 中,DLS 可用于确定在特定决策上投入多少精力,通过提前计划几步,直至达到指定深度。

这些是 DFS 的一些应用:在两个节点之间找到路径,遍历树或图中的所有节点,以及解决特定的谜题。它通常作为更大算法或应用的一部分在 AI 中应用,例如迷宫求解、游戏状态分析以及在 minimax 算法等搜索算法中探索决策树,例如应用于井字棋或国际象棋的游戏。

使用深度受限搜索算法在机器人领域寻找路径

问题设置

  1. 网格环境:一个 6x6 的网格,其中 1 代表障碍物,0 代表自由空间。
  2. 起始位置:机器人的初始位置。
  3. 目标位置:机器人必须到达的期望点。

将使用以下过程利用深度受限搜索算法解决问题

步骤 1:定义环境网格

我们创建一个代表代理的 6x6 网格环境的二维列表,其中 1 代表障碍物,0 代表自由单元格。

代码

步骤 2:定义起始和目标位置

定义代理在网格上的起始和目标位置。

代码

步骤 3:定义问题结构

SearchProblem 类封装了搜索问题,包括检查代理是否已到达目标以及确定从给定位置开始的可能移动的方法。

代码

步骤 4:定义深度受限搜索 (DLS) 函数

将 limited_depth_search 定义为主函数,将 recursive_dls 定义为辅助函数。

代码

步骤 5:初始化问题实例

使用定义的网格、起始位置和目标位置创建 SearchProblem 类的实例。

代码

步骤 6:执行带有深度限制的深度受限搜索

设置深度限制,并应用 DLS 在该限制内查找从起始点到目标点的路径。相应地显示结果。

代码

步骤 7:可视化网格上的路径

display_path 函数可视化网格并突出显示 DLS 算法找到的路径。

代码

完整的机器人路径查找代码

程序

输出

Depth Limited Search in Artificial Intelligence

说明

此代码通过实现深度受限搜索 (DLS) 技术,为代理在有障碍物的 6x6 网格区域中进行探索找到路径。在网格中,自由单元格用 0 表示,障碍物用 1 表示。代理从位置 (0, 0) 开始,向上、向下、向左或向右移动到相邻的单元格,试图到达目标位置 (5, 5),只要它们在网格边界内且没有障碍物。除了用于验证目标和识别合法相邻单元格的方法外,SearchProblem 类还定义了网格、起始和目标状态。together with the helper recursive_dls,limited_depth_search 函数搜索深度最多为预定深度限制的节点,要么找到路径,要么在深度限制处停止。

搜索完成后,使用 Matplotlib 可视化网格和找到的路径。起始点显示为绿色,目标点显示为红色,路径显示为蓝色。如果未在深度限制内找到解决方案,则会显示相应的消息。

结论

通过设置预定的深度限制,深度受限搜索 (DLS) 作为深度优先搜索 (DFS) 的变体,有助于避免对深层路径的无益探索,并解决棘手的路径查找问题。这种方法可在可容忍的时间内实现可控搜索,这在机器人、网络路由和游戏开发等人工智能应用中非常有用。提供的代码通过使用 DLS 帮助代理在有障碍物的 6x6 网格中找到路径,演示了 DLS 在限制搜索区域方面的有效性。网格可视化还有助于理解该算法如何避开障碍物到达目标。由于这种方法,DLS 可用于需要资源受限环境中资源高效解决方案的应用。