搜索策略的基本概念
搜索是人工智能中的一个基本问题,是推理不可分割的一部分,它直接关系到智能系统的性能与运行效率,因而尼尔逊把它列为人工智能研究中的四个核心问题之一。在过去40多年中,人工智能界已对搜索技术开展了大量研究,取得了丰硕的成果,目前正在为提高搜索效率以及搜索复杂性理论的研究开展进一步的工作。
一、什么是搜索
(一)定义与核心目标
搜索是人工智能中通过系统地探索问题空间,寻找从初始状态到目标状态的可行路径或解决方案的过程。其核心目标是在有限的计算资源下,高效地找到满足问题约束的最优或可行解。搜索过程可视为在状态空间或与/或树中进行路径探索,通过状态转移和条件判断逐步逼近目标。
(二)分类与应用场景
1.按搜索策略分类
(1)盲目搜索(如 BFS、DFS):不利用启发式信息,按固定顺序扩展节点,适用于小规模问题;
(2)启发式搜索(如 A*、AO*):利用领域知识指导搜索方向,显著减少搜索空间,适用于复杂问题。
显然,启发式搜索优于盲目搜索。但由于启发式搜索需要具有与问题本身特性有关的信息,而这并非对每一类问题都可方便地抽取出来,因此盲目搜索仍不失为一种应用较多的搜索策略。
2.按问题表示分类
(1)状态空间搜索:适用于可表示为状态转移的问题(如八数码、路径规划);
(2)与/或树搜索:适用于可分解为子问题的问题(如数学证明、任务调度)。
二、状态空间表示法
状态空间表示法是用“状态”和“算符”来表示问题的一种方法。其中,“状态”用以描述问题求解过程中不同时刻的状况;“算符”表示对状态的操作,算符的每一次使用就使问题由一种状态变换为另一种状态。当到达目标状态时,由初始状态到目标状态所用算符的序列就是问题的一个解。
(一)基本思想与定义
1. 核心思想
将问题抽象为状态空间图,其中节点表示问题状态,边表示状态转移的操作(算符)。通过搜索图中的路径,找到从初始状态到目标状态的解。
2. 形式化定义
状态空间是一个三元组 (S, F, G),其中:
S:初始状态集合;
F:算符集合,定义状态转移规则;
G:目标状态集合。
(二)表示形式与实现过程
1. 状态(State)
定义:描述问题在某一时刻的完整信息,通常用向量或数据结构表示。当给每一个分量以确定的值时,就得到了一个具体的状态。
示例:八数码问题的状态可表示为 (x_0, x_1, ..., x_8),其中 x_i 为方格内的数字(0表示空格)。
2. 算符(Operator)
引起状态中某些分量发生变化,从而使问题由一个状态变为另一个状态的操作称为算符。在产生式系统中,每一条产生式规则就是一个算符。
定义:将一个状态转换为另一个状态的操作,描述状态间的关系。
示例:八数码问题的算符包括空格的上、下、左、右移动,每个移动生成一个新状态。
3. 状态空间(State Space)
由问题的全部状态及一切可用算符所构成的集合称为问题的状态空间,一般用一个三元组表示:(S,F,G),其中S是问题的所有初始状态构成的集合;F是算符的集合;G是目标状态的集合。
定义:所有可能状态及其转移关系的集合,可用有向图表示。
显式与隐式状态空间:
(1)显式:预先构建所有状态和转移(适用于小规模问题);
(2)隐式:按需动态生成状态(如八数码问题,状态数为 9! = 362880,无法显式存储)。
(三)算法描述
1. 广度优先搜索(BFS)
步骤:
(1)将初始状态加入队列;
(2)取出队列首节点,若为目标状态则返回路径;
(3)生成所有合法后继状态,未访问过的加入队列;
(4)重复直至找到目标或队列为空。
复杂度:时间 O(b^d),空间 O(b^d),其中 b 为分支因子,d 为解的深度。
2. 深度优先搜索(DFS)
步骤:
(1)将初始状态压入栈;
(2)弹出栈顶节点,若为目标状态则返回路径;
(3)生成所有合法后继状态,未访问过的压入栈;
(4)重复直至找到目标或栈为空。
复杂度:时间 O(b^m),空间 O(m),其中 m 为搜索深度。
3. 启发式搜索(A * 算法)
估价函数:f(n) = g(n) + h(n),其中 g(n) 为当前路径代价,h(n) 为启发式估计值(如曼哈顿距离)。
步骤:
(1)将初始状态加入优先队列(按 f(n) 排序);
(2)取出队列首节点,若为目标状态则返回路径;
(3)生成所有合法后继状态,计算 f(n) 并更新队列;
(4)重复直至找到目标或队列为空。
性质:若 h(n) 是可采纳的(不高估实际代价),则 A *算法是最优的210。
(四)具体示例:八数码问题
1. 问题描述
初始状态:
目标状态:
2. 状态空间生成
状态表示:使用9维向量 (2,8,3,1,6,4,7,0,5) 表示初始状态。
算符:空格的4种移动方向,生成新状态。
3. BFS 搜索流程
(1)初始队列:[S_0]
(2)扩展 S_0,生成 4 个后继状态(空格上、下、左、右移动);
(3)检查每个后继是否为 S_g,若否,加入队列;
(4)重复直至找到目标状态,记录路径。
4. A * 算法优化
启发式函数:曼哈顿距离,计算每个数字到目标位置的横向和纵向距离之和。
效率提升:通过优先扩展 f(n) 最小的节点,减少无效搜索。
(五)具体示例:二阶梵塔问题
设有三根钢针,在1号钢针上穿有A,B两个金片,A小于B,A位于B的上面。要求把这两个金片全部移到另一根钢针上,而且规定每次只能移动一片,任何时刻都不能使B位于A的上面。
设用S_k=(S_k0,S_k1)表示问题的状态,S_k0表示金片A所在的钢针号,S_k1表示金片B所在的钢针号,全部可能的状态有九种:
S0 = (1, 1), S1 = (1, 2), S2 = (1,3)
S3 = (2, 1), S4 = (2, 2), S5 = (2,3)
S6 = (3, 1), S7 = (3, 2), S8 = (3,3)
如图1所示。
图1 二阶梵塔的状态
问题的初始状态集合为S={S0},目标状态集合为G={S4, S8}。算符分别用A(i, j)及B(i, j)表示。A(i, j)表示把金片A从第i号针移到第j号针上;B(i, j)表示把金片B从第i号针移到第j号针上。共有12个算符,它们分别是:
A(1,2),A(1,3),A(2,1),A(2,3),A(3,1),A(3,2)
B(1,2),B(1,3),B(2,1),B(2,3),B(3,1),B(3,2)
根据9种可能的状态和12种算符,可构成二阶梵塔问题的状态空间图,如图2所示。
图2 二阶梵塔的状态空间图
在图2所示的状态空间图中,从初始节点(1, 1)到目标节点(2, 2)及(3, 3)的任何一条通路都是问题的一个解,其中最短的路径长度是3,它由3个算符组成,例如A(1,3),B(1,2),A(3,2)。由此例可以看出:
(1)用状态空间方法表示问题时,首先必须定义状态的描述形式,通过使用这种描述形式可把问题的一切状态都表示出来。其次,还要定义一组算符,通过使用算符可把问题由一种状态转变为另一种状态。
(2)问题的求解过程是一个不断把算符作用于状态的过程。如果在使用某个算符后得到的新状态是目标状态,就得到了问题的一个解。这个解是从初始状态到目标状态所用算符构成的序列。
(3)算符的一次使用,就使问题由一种状态转变为另一种状态。可能有多个算符序列都可使问题从初始状态变到目标状态,这就得到了多个解。其中有的使用算符较少,有的较多,我们把使用算符最少的解称为最优解。例如在上例中,使用3个算符的解是最优解。这只是从解中算符的个数来评价解的优劣,今后将会看到评价解的优劣不仅要看使用算符的数量,还要看使用算符时所付出的代价,只有总代价最小的解才是最优解。
(4)对任何一个状态,可使用的算符可能不止一个,这样由一个状态所生成的后继状态就可能有多个。当对这些后继状态使用算符生成更进一步的状态时,首先应对哪一个状态进行操作呢?这取决于搜索策略,不同搜索策略的操作顺序是不相同的,这正是本问要讨论的问题。
三、与/或树表示法
(一)基本思想与定义
1. 核心思想
将复杂问题分解为子问题,通过 “与” 和 “或” 关系构建树结构。“与节点” 表示子问题需全部解决,“或节点” 表示只需解决一个子问题。
2. 形式化定义
与 / 或树是一个超图,包含:
(1)与节点(AND 节点):子问题需全部解决;
(2)或节点(OR 节点):子问题只需解决一个;
(3)根节点:初始问题;
(4)叶节点:无需分解的基本问题。
(二)表示形式与实现过程
1. 分解(AND 关系)
定义:将问题分解为多个子问题,需全部解决。
示例:证明几何定理 P,需同时证明子定理 P_1 和 P_2,则 P 为与节点,P_1、P_2 为其子节点。
把一个复杂问题分解为若干个较为简单的子问题,每个子问题又可继续分解为若干个更为简单的子问题,重复此过程,直到不需要再分解或者不能再分解为止。然后对每个子问题分别进行求解,最后把各子问题的解复合起来就得到了原问题的解。
问题的这一分解过程可用一个图表示出来。例如,把问题P分解为三个子问题P1,P2,P3,可用图3表示。
在图3中,P1,P2,P3是问题P的三个子问题,只有当这三个子问题都可解时,问题P才可解,称P1,P2,P3之间存在“与”关系;称节点P为“与”节点;由P,P1,P2,P3所构成的图称为“与”树。在图中,为了标明某个节点是“与”节点,通常用一条弧把各条边连接起来,如图3所示。
图3 “与”树
2. 等价交换(OR 关系)
定义:将问题转换为多个子问题,只需解决其中一个。
示例:解方程 x^2 = 4,可转换为 x=2 或 x=-2,两个子问题为或节点。
对于一个复杂问题,除了可用“分解”方法进行求解外,还可利用同构或同态的等价变换,把它变换为若干个较容易求解的新问题。若新问题中有一个可求解,则就得到了原问题的解。
问题的等价变换过程,也可用一个图表示出来,称为“或”树。例如,问题P被等价变换为新问题P1,P2,P3,可用图4表示。其中,新问题P1,P2,P3中只要有一个可解,则原问题就可解,称P1,P2,P3之间存在“或”关系;节点P称为“或”节点;由P,P1,P2,P3所构成的图是一个“或”树。
图4 “或”树
上述两种方法也可结合起来使用,此时的图称为“与/或”树。其中既有“与”节点,也有“或”节点,如图5所示。
图5 “与/或”树
(三)算法描述:AO * 算法
1. 核心思想
通过启发式函数评估节点代价,动态选择最优路径,剪去不必要的分支。
2. 步骤
(1)初始化:构建初始节点,设置启发式值 h(n);
(2)扩展节点:选择当前最优路径,扩展节点生成子节点;
(3)更新代价:根据子节点代价重新计算父节点代价;
(4)剪枝:若某路径代价高于当前最优路径,剪去该分支;
(5)重复:直至找到目标节点或无法扩展。
3. 剪枝条件
β 剪枝:MAX节点的当前最优值大于等于先辈节点的 β 值,剪去该分支;
α 剪枝:MIN节点的当前最优值小于等于先辈节点的 α 值,剪去该分支。
(四)具体示例:数学证明问题
1. 问题描述
证明命题 P:“三角形内角和为 180 度”。
2. 与 / 或树构建
根节点:P(或节点);
子节点:
(1)P_1:利用平行线性质证明;
(2)P_2:利用向量法证明;
(3)P_3:利用三角函数证明。
分解:每个子节点为或节点,只需解决其中一个。
3. AO * 算法应用
(1)初始化 h(P) = 10(假设启发式值);
(2)扩展 P,生成 P_1、P_2、P_3,计算 h(P_i);
(3)选择 h(P_1) = 5 作为最优路径,扩展 P_1;
(4)若 P_1 分解为子问题 P_{11}(与节点)和 P_{12},需全部解决;
(5)递归搜索,若 P_{11} 和 P_{12} 均解决,则 P_1 解决,更新 h(P);
(6)剪去其他分支,返回解路径。
四、正确性维持系统(TMS)
(一)基本功能
维护搜索过程中的信念集合,处理矛盾时回溯并修正假设,确保推理的一致性。
(二)核心组件
节点:表示信念,状态为 IN(相信)或 OUT(不相信);
理由:支持信念的依据,分为支持列表(SL)和条件证明(CP);
冲突检测:发现矛盾时触发回溯,调整假设。
(三)与搜索策略的结合
1. 冲突处理流程
(1)证据输入:将观测结果作为节点状态(如 “路径可行” 为 IN);
(2)理由检查:递归验证节点的支持理由,若冲突则标记为 OUT;
(3)回溯修正:撤销冲突节点的假设,尝试其他路径。
2. 示例:迷宫搜索
(1)初始信念:路径 A 可行(IN),路径 B 不可行(OUT);
(2)新证据:路径 A 遇到障碍物,标记为 OUT;
(3)TMS 触发:回溯到父节点,将路径 B 标记为 IN,继续搜索。
五、核心挑战与前沿方向
(一)挑战
(1)状态空间爆炸:复杂问题的状态数呈指数级增长(如围棋状态数约 10^{170});
(2)启发式函数设计:需领域知识支持,且需满足可采纳性(如 A * 算法的 h(n));
(3)动态环境适应:实时更新状态空间,处理不确定性(如机器人路径规划)。
(二)前沿方向
(1)神经启发式搜索:结合神经网络自动学习启发式函数(如AlphaGo的蒙特卡洛树搜索);
(2)分布式搜索:利用并行计算加速大规模问题求解(如 MapReduce 框架);
(3)可解释性增强:通过可视化路径和理由链,解释 AI 决策逻辑(如医疗诊断系统)。
六、总结与实践指南
(一)核心价值
搜索策略是人工智能问题求解的基础,其核心价值在于:
(1)问题建模:通过状态空间或与 / 或树将现实问题抽象为可计算形式;
(2)效率优化:启发式搜索和剪枝策略显著减少计算资源消耗;
(3)通用性:适用于逻辑推理、规划、学习等多种任务。
(二)实施步骤
1.问题分析:确定问题类型(状态空间 / 与/或树)、约束条件和目标;
2.表示选择:
(1)状态空间:适合状态转移明确的问题(如八数码);
(2)与 / 或树:适合可分解的问题(如数学证明)。
3.算法选择:
(1)盲目搜索:BFS 用于最短路径,DFS 用于内存受限场景;
(2)启发式搜索:A用于最优解,AO用于问题分解。
4.优化与验证:
(1)调整启发式函数提升效率;
(2)通过案例测试验证正确性(如八数码问题的可解性检查)。
(三)典型应用
(1)路径规划:机器人导航中使用 A * 算法搜索最短路径;
(2)游戏 AI:AlphaGo 结合蒙特卡洛树搜索和深度神经网络;
(3)自动定理证明:通过与 / 或树分解数学问题,应用 AO * 算法搜索证明路径。
通过状态空间表示法、与 / 或树搜索和正确性维持系统的协同,搜索策略构建了一套完整的问题求解体系。尽管面临状态空间爆炸和启发式设计的挑战,其在知识表示与推理中的核心地位不可替代。未来,随着与机器学习和分布式计算的深度融合,搜索策略将在通用人工智能中发挥更关键的作用。