第二章 搜索问题
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
A B D H I J E K L A B D H I J E K L
A B D H I J E K L F M N C G O
H D I J B E
A
C F M N G O
A
B D H I J E K L
A
C F M N G O
H D I
B E J K L A F M
C G N O
C F M N G O
1 2 3 4 5 6 7 8 9
(3, 3, 1) (3, 2, 0) (3, 1, 0) (3, 2, 1) (3, 0, 0) (3, 1, 1) (1, 1, 0) (2, 2, 1) (0, 2, 0) 1 1 3 4 5 6 7 8 9 10 11 12
10 (0, 3, 1) 11 (0, 1, 0) 12 (0, 2, 1) 13 (0, 0, 0)
常用方法有广度优先搜索和深度优先搜索以及这 两种搜索方法的改良方法。
宽度优先搜索
最简便的图的搜索算法之一,属于一种盲目搜 寻法。 目的是系统地展开并检查图中的所有节点,以 找寻结果。 基本思想是首先搜索和初始节点距离为1的所 有顶点,然后再去搜索和出始节点距离为2的 其他顶点,依次类推 它并不考虑结果的可能位置,彻底地搜索整张 图,直到找到结果为止。
7 8 9 10 11 12 13 13
13 14
根据CLOSED表确定解树
S22 S13 S5 S1 S0
S0 S1 S5 S13 S22
宽度优先搜索
优点
完备性:如果问题有解, 广度优先搜索总能够在有 限步内找到目标节点 最优性:在不考虑路径耗 散的前提下,广度优先搜 索总能够找到最浅的目标 节点 遍历各个节点,搜索效率 差,消耗大量内存和时间
6
5
2 3
目标状态Sg
2 8 3 1 4 7 6 5 S0
2 8 3 1 4 7 6 5 S1 8 3 2 1 4 7 6 5 S5 8 3 2 1 4 7 6 5 2 8 3 7 1 4 6 5 S6 2 8 3 7 1 4 6 5 S13 S14 8 1 3 2 4 7 6 5 S22
2 3 1 8 4 7 6 5 S2 2 3 1 8 4 7 6 5 S7 1 2 3 8 4 7 6 5 S15
5
6
5
初始状态S0
目标状态Sg
宽度优先搜索
2 8 3 4 6 5 S0
空格移动顺序:左-上-右-下
1 7
2
8 1
3 4 5 S1
2 1 7 8 6
3 4 5 S2
2 1 7
8 4 6
3
2 1
8 6
3 4 5 S4
OPEN表
节点 父节点编号
7
6
5
S3
7
S0 S1 S2 S3 S4 0 0 0 0
编号
深度优先搜索算法:
步1 把初始节点S0放入OPEN表中。 步2 若OPEN表为空, 则搜索失败, 退出。 步3 取OPEN表中前面第一个节点N放入CLOSED表中,并冠以 顺序编号n。 步4 若目标节点Sg=N, 则搜索成功,结束。 步5 若N不可扩展, 则转步2。 步6 扩展N, 将其所有子节点配上指向N的返回指针依次放入 OPEN表的首部, 转步2。
用open表和closed表保存搜索经过的各个节点
open表和closed表的一般结构
OPEN表
节点 父节点编号 f(n) 编号
CLOSED表
节点 父节点编号 f(n)
无信息搜索
又称盲目搜索/穷举式搜索,只能按照预先规定的 搜索控制策略进行搜索,没有任何中间信息来改 变这些控制策略。
具有盲目性,效率不高,不便于复杂问题的求解。
A B D E F C G D B E
A C F G
A B D E F C G
D B E
A C F G
宽度优先搜索
例: 8数码问题
九宫格中有8个数码,其中只有一个空格 规则是一次只能把一个数码移动到空的格子中 要求从一个初始状态移动到一个目标状态
2 1 7
8
3 4
8 2 7
1
3 4
6
S0 S1 S2 S3 S4 S5 S6 S7 S8 S9 S10 S11 S12 S13 S14 0 0 0 0 1 1 2 2 3 3 4 4 5 6
S15 S16 S17 S18 S19 S20 S21 S22 S23 S24 S25 S26 S27 S28 S29
7 8 9 10 11 12 13 13 14 14 15 15 16 16 17
深度优先搜索
OPEN表
节点 父节点 编号 编号
CLOSED表
节点 父节点 编号
(3, 3, 1)
(3, 3, 1) (3, 2, 0) 1 1 3 1 4
1 2 3 4 5
(3, 3, 1) (3, 2, 0) (3, 1, 0) (3, 2, 1) (3, 0, 0) 1 1 3 4
(3, 2, 0)
2 8 3 7 1 4 6 5 S24
2 8 1 4 3 7 6 5 S9 2 8 1 4 3 7 6 5 S17
2 8 3 1 4 5 7 6 S10 2 8 3 1 4 5 7 6 S18
8 3 2 1 4 7 6 5 S21
……
OPEN表
节点 父节点编号 节点 父节点编号
编号
CLOSED表
节点 父节点编号 编号 节点 父节点编号
S2 S3 S4
S5 S6 S7 S8
8 3 2 1 4 7 6 5 S5
2 8 3 2 8 3 7 1 4 1 4 7 6 5 S6 6 5
2 3 1 8 4 7 6 5 S7
2 3 1 8 4 7 6 5 S8
8 2 7
1
3 4
CLOSED表
编号 节点 父节点编号
0 1
S0 S1
S2 S3
0
0 0
深度优先搜索
1
优点:
2 6 3 4 7 9 5 8 10 11 12 13
对内存需求比较少,如果 一个节点的全部后代都被 完全探索过,那么这个节 点和它的全部后继都可以 从内存(open表和closed 表)中删掉了
缺点:
不完备,也不最优
· · · ·
回溯搜索策略
回溯策略属于深度优先 搜索的一种变形 与深度优先搜索的区别: 扩展一个节点时,每次 只产生一个后继节点, 3 而不是全部后继 回溯策略只保存单一的 解路径,占用内存空间 很少,只需要一张表即 可完成搜索
2 8 3 7 4 6 1 5 S23
2 8 3 1 4 7 6 5 S3
2 8 3 1 6 4 7 5 S4 2 8 3 1 6 4 7 5 S11 2 8 3 6 4 1 7 5 S19 2 8 3 1 6 4 7 5 S12 2 8 3 1 6 7 5 4 S20
2 3 1 8 4 7 6 5 S8 2 3 4 1 8 7 6 5 S16
9
S0 5
缺点:
Sg
S1 3
宽度优先搜索的拓展 —代价树宽度搜索
代价树宽度搜索(代价 一致搜索)对于任意单 步路径耗散都是最优的 搜索策略 其基本思想是优先扩展 路径耗散最小的节点 对于任意节点n,用f(n) 来表示n到初始节点的 路径耗散,即代价
1 B 2 D 1 E
A
2 C 3 F 2 G
0 1 2 3 4 5 6 7 8 9 10 11 12
S0 S1 S2 S3 S4 S5 S6 S7 S8 S9 S10 S11 S12 S13 S14 0 0 0 0 1 1 2 2 3 3 4 4 5 6
15 16 17 18 19 20 21 22
S15 S16 S17 S18 S19 S20 S21 S22
f(B)=1 f(D)=3 f(F)=5
f(C)=2 f(E)=2 f(G)=4
代价树宽度搜索
例: 旅行商问题
设A、B、C、D、E五 个城市,旅行者从A出 发,到达城市E,旅行 费用如图所示,走怎样 的路线费用最小? 要求画出代价树、 OPEN表和CLOSED表
A 4 B 2 E 2 1 4
1 C 1 D
2 E1
1 D1 1 E2
由CLOSED表倒推:E1—C1—A,因此最优 旅行路径为:A—C—E,代价为3
深度优先搜索
深度优先搜索总是先扩 展搜索树的当前边缘中 最深的节点
1 2 6 3 4 7 9 5 8 10 11 12 13
一种最原始的仿生学算 法,来源于爬虫在树枝 的搜索过程
深度优先搜索
CLOSED表
节点 父节点编号
8 2 7
1
3 4
0 1
S0 S1 0
6
5
目标状态Sg
OPEN表
2 8 3 1 4 7 6 5 S0
节点 父节点编号
S0 S1 0 0 0 0
1 1 2 2
2 8 3 1 4 7 6 5 S1
2 3 1 8 4 7 6 5 S2
2 8 3 1 4 7 6 5 S3
2 8 3 1 6 4 7 5 S4
人工智能
第二章 搜索问题
本章的内容与目标
搜索与搜索问题 搜索问题的求解步骤 无信息(盲目)搜索 有信息(启发式)搜索
搜索与搜索问题
源自文库
人类的实际搜索行为 人工智能所要解决的问题大部分不具备明确的 解题步骤,而只能是利用已有的知识一步一步 地摸索前进。 根据问题的实际情况不断寻找可利用的知识, 从而构造一条代价较少的推理路线,使问题得 到圆满解决的过程称之为搜索 。
深度优先搜索
分析:
由于传教士与野人的总数目是一常数, 所以只要表 示出河的某一岸上的情况就可以了 另外还需要表示出船的位置 因此用一个三元组(M, C, B), 来表示系统状态
M表示河左岸传教士的人数 C表示河左岸野人的人数 B表示船的位置,1表示船在左岸,0表示船在右岸
于是,初始状态为 (3,3,1) 目标状态为 (0, 0, 0)
宽度优先搜索
广度优先搜索算法:
步1 把初始节点S0放入OPEN表中。 步2 若OPEN表为空, 则搜索失败,退出。 步3 取OPEN表中前面第一个节点N放在CLOSED表中, 并冠以 顺序编号n。 步4 若目标节点Sg= N,则搜索成功, 结束。 步5 若N不可扩展, 则转步2。 步6 扩展N, 将其所有子节点配上指向N的指针依次放入OPEN 表尾部, 转步2。
OPEN表
节点 父节点 编号 编号
CLOSED表
节点 父节点 编号
(3, 3, 1) (3, 2, 0) (3, 1, 0) (3, 2, 1) (3, 0, 0) (3, 1, 1) (1, 1, 0) (2, 2, 1) (0, 2, 0) (0, 3, 1) (0, 1, 0) (0, 2, 1) (0, 0, 0) (1, 1, 1) (2, 2, 0) 1 1 3 4 5 6 7 8 9 10 11 12 11 1
H D I
B E J K L
A
C F M N G O
B D H I J E K L A F M
C G N O
C F K L M N G O
B D H I J E K L F M
C G N O
深度优先搜索
例:传教士和野人问题
有3个传教士和3个野人 过河 只有一条能装下两个人的 船 在河的任何一方或者船上, 如果野人的人数大于传教 士的人数,那么传教士就 会有危险. 要求安全渡河
(3, 3, 1)
(3, 1, 0)
(2, 2, 0)
(2, 3, 0)
(3, 1, 0) (3, 1) (2, 2, 0) (3, 0, 0)
(3, 2, 1) (3, 0, 0)
(3, 3, 1) (3, 2, 0) (3, 1, 0) (3, 2, 1) (3, 0, 0) (3, 1, 1) (1, 1, 0) (2, 2, 1) (0, 2, 0) (0, 3, 1) (0, 1, 0) (0, 2, 1) (0, 0, 0) (1, 1, 1) (2, 2, 0)
A 4 B 2 E
A
1 C 2 1
1 C1
OPEN表
节点 父节点 编号 代价 f(n)
编号
CLOSED表
节点 父节点 编号 代价 f(n)
4
A
1 1 1 2 2 2 3 4 1 5 2 3 3 2 3 4
A C1 D1 E1 1 2 2 1 2 3
1 D
B1 C1 B2 D1
4 B1
E1 E2
4 B2
搜索方法的经典应用
8数码问题 传教士和野人问题 旅行商问题 4皇后问题 迷宫问题 博弈问题 …………
搜索方法的一般步骤
1、定义状态描述形式 2、定义算符—是把问题从一种状态变换到另一种 状态的方法代号,即状态演变规则 3、确定初始状态(初始节点)和目标状态(目标 节点) 4、状态更新——根据算符更新当前状态 5、目标测试——判断更新后的状态是否为目标状 态,若不是则转到4,否则转到6 6、搜索成功,记录搜索路径