深度限制搜索是解决人工智能相关问题空间的关键算法。但在开始之前,让我们先了解一下深度优先搜索,这是一种通过从根节点开始探索树或图的算法,它在回溯之前会沿着每个分支尽可能深入地探索。它遵循一条从根节点到叶节点的路径,然后回溯以探索其他路径。在处理大型或无限树时,这种方法可能会显得效率低下,因为它可能会探索不包含目标的深层分支,从而导致时间和资源的浪费。
> 要了解更多关于深度优先搜索算法的内容,请参考:图的深度优先搜索或DFS
开始接触深度限制搜索 (DLS)
深度限制搜索是 DFS 的一个改进版本,它对搜索的深度施加了限制。这意味着该算法只会探索到特定深度的节点,从而有效地防止它沿着可能无法到达目标且计算成本过高的路径进行过深探索。通过设置最大深度限制,DLS 旨在提高效率并确保更可控的搜索时间。
!<a href="https://media.geeksforgeeks.org/wp-content/uploads/20250621121913987437/depthlimitedsearch.webp">depthlimitedsearch深度限制搜索示例,其中设置限制 = 第2层
深度限制搜索的工作原理
- 初始化:从根节点开始,并指定一个深度限制。
- 探索:遍历树或图,探索每个节点的子节点。
- 深度检查:如果当前深度超过设定的限制,则停止探索该路径并回溯。
- 目标检查:如果在深度限制内找到了目标节点,则搜索成功。
- 回溯:如果搜索达到了深度限制或到达了叶节点但没有找到目标,则回溯并探索其他分支。
深度限制搜索的伪代码
Python
CODEBLOCK_446d7c07
这里的逻辑如下:
- 该函数接收 INLINECODE26232a5b(节点)、INLINECODEef228a87(目标测试)和
limit(限制)作为输入。 - 如果节点满足目标条件,它将该节点作为解返回。
- 如果深度限制为 0,它会停止并返回 "cutoff"(截止),以表明已达到限制。
- 然后它扩展当前节点以生成子节点。对于每个子节点,它都会递归调用自身,并将限制减 1。
- 如果任何子节点返回 "cutoff",它就会标记发生了截止。
- 如果任何子节点返回有效结果(不是 "failure"),它会立即返回该结果。
- 检查完所有子节点后,如果有任何导致截止的情况,则返回 "cutoff",否则返回 "failure",这意味着在限制内未找到解。
深度限制搜索在人工智能中的应用
- 机器人路径规划:DLS 用于机器人在存在障碍物环境下的非完整运动规划。通过施加深度限制,可以使机器人在探索了特定区域深度后停止,从而限制机器人过度的游荡。
- 网络路由算法:可以实现 DLS 来计算计算机网络中节点之间的路径,限制跳数以防止环路。
- AI 系统中的解谜:它可用于解决诸如 8 数码或数独之类的谜题,通过将可能的移动操作限制固定次数,从而减少搜索中的步数。
- 游戏博弈:在游戏 AI 中,可以使用 DLS 来向前规划几步直到一定的深度级别,以帮助决定在特定决策上投入多少精力。
DFS 可用于各种任务,包括搜索两个节点之间的路径、遍历树或图以访问所有节点,或解决某些类型的谜题。它通常被用作更复杂算法和 AI 应用的构建模块,例如解决迷宫、分析游戏状态,或在搜索算法(如国际象棋或井字棋的极小化极大算法)中探索决策树。
使用深度限制搜索算法寻找机器人路径
问题设置
- 网格环境:一个 5×5 的网格,其中 0 代表空闲单元格,1 代表障碍物。
- 初始位置:机器人的起始位置。
- 目标位置:机器人需要到达的目标位置。
- 移动方式:机器人可以向上、下、左或右移动。
我们将使用深度限制搜索算法,通过以下步骤来解决这个问题: