引言:人工智能为什么需要搜索?
因为人们发现通过搜索可以找到问题的最佳解法。拿人来举例,你去一个新城市旅游,如果时间有限,那么需要找到你去各景点的最佳路线,而不是在偌大的城市里乱窜。
概述
搜索很容易理解,就是不断寻路以得到最优解。这个概念也被运用到人工智能领域。
早期搜索技术,如图搜索、盲目搜索、启发式搜索
高级搜索技术,如规则演绎系统、产生式系统
早期的 AI 程序与搜索技术联系紧密:几乎所有的 (智力难题、棋类游戏、简单数学定理证明) 都以搜索为基础。
图搜索方法
定义:基于实际问题,不断根据已有经验,构造出一条代价较小的推理路线,然后解决问题的过程。
用图搜索解决问题包括两个方面:
找到从初始事实到问题最终答案的一条推理路径
找到的这条路径在时间和空间上复杂度最小
搜索方法好的标准, 一般认为有两个:搜索空间小、解最佳。
图的搜索
指一种在图中寻找路径的方法。图中每个节点对应一个状态,每条连线对应一个操作符。
分类:
无信息搜索 (盲目搜索) :宽度优先搜索,深度优先搜索,等代价搜索
有信息搜索 (启发式搜索) :A 算法、A* 算法
状态图搜索
搜索是为了找到初始节点到目标节点的路径,在搜索过程中需要随时记录搜索轨迹。
OPEN 表:用来记录下一步还可以走的节点
CLOSED 表:用来记录已经走过的节点
还需记录从目标返回的路径。每个表示状态的节点结构中必须有指向父节点的指针。
所谓对一个节点进行 “扩展” 是指对该节点用某个可用操作进行作用,生成该节点的一组子节点(后续节点)。
图的一般搜索策略
说明:
(1) 第 7 步修改返回指针的原因是,因为这些节点又被第二次生成,所以它们返回初始节点的路径已有两条,但这两条路径的 “长度” 可能不同。那么,当新路径短时自然要走新路。
(2) 这里对路径的长短是按照路径上的节点数来衡量的,后面我们将会看到路径的长短也可以其 “代价” (如距离、费用、时间等) 衡量。
如果搜索中某一节点出现了两个或者两个以上的父节点,那么就需要进行修改指针操作;需要比较从初始节点到这个节点的几条路径的代价,选择最优路径。该节点的指针只指向最优路径的父节点,其他父节点的指针要删掉。
注:这只是一个通用的搜索过程。
各种搜索策略的主要区别在于:
步骤 “重排 OPEN 表” 对 OPEN 表上的节点进行排序的准则,以便选出一个 “最好” 的节点作为步骤 ④ (如图) 扩展使用。
搜索图和搜索树
算法结束后,将生成一个图 G,称为搜索图。
由图 G 中所有节点及反向指针 (每个节点都有一个指针指向父节点) 构成 G 的一个支撑树,称为搜索树。
从目标节点开始,将指针指向的状态回串起来,即找到一条解路径。
图搜索分类
对 OPEN 表中节点排序方式产生了不同的搜索策略, 不同的搜索搜索策略效率不同。
盲目搜索:排序是任意的,即盲目的
启发式搜索:排序用启发信息为依据
·
开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 1 天,点击查看活动详情