状态空间搜索
把问题表示成状态和动作,在可能路径中寻找通往目标的方案。
前置知识
通俗直觉
在迷宫中找出口时,困难不只是知道当前位置,还要决定先试哪条路,并避免在环路里反复绕圈。状态空间搜索把问题变成初始状态、合法动作、后继状态和目标测试,再系统地探索可能路径。
状态必须足以区分后续可行行动。例如带钥匙的迷宫不能只记录位置;同一位置“有钥匙”和“无钥匙”是不同状态,否则去重可能错误地丢掉能够开门的路径。
核心原理
搜索树中的节点代表一条探索路径到达的状态,状态图则可以有环,也可能有多条路径到同一状态。维护已访问集合能够减少重复扩展,但去重依据必须与问题状态定义一致。
广度优先搜索使用先进先出队列。起点先扩展,再扩展离起点一步的状态,然后是两步的状态;在每条边代价相同的条件下,第一次找到目标时的路径具有最少步数。
深度优先搜索沿一条分支深入,通常不保证最短路径;边代价不同时,需要考虑统一代价搜索等方法,而不能把 BFS 的最少边数误称为最低总成本。若用启发式引导搜索,还要讨论它对最优性的影响。
树状空间的节点数可能随深度指数增长。下方复杂度表达式描述固定分支因子、按层展开树的近似规模,不能代替有限图上按顶点和边数分析开销;保存整条路径也比只保存父节点占用更多内存。
推荐学习资料
CS50’s Introduction to Artificial Intelligence with Python
通过搜索、知识表示、概率、优化、机器学习与语言项目学习 AI 基础。
Brian Yu / David J. Malan · Harvard CS50
资料笔记
Artificial Intelligence: A Modern Approach
以统一框架组织搜索、知识、推理、规划、学习、智能体和机器人等主题。
Stuart Russell / Peter Norvig · AIMA
资料笔记
UC Berkeley CS188 Introduction to AI
覆盖智能体、搜索、博弈、概率推理、MDP、强化学习和机器学习。
UC Berkeley EECS · UC Berkeley