第2章 搜索技术
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本方走第一步,考虑敌方应战后的所有局势(深度为2的搜索树)
1
x
-1
x
x
1
-2
xo
x
o x
o
x
o
x o
o
x
o x
ox
o
x
x o
x o
x o
6-5=1 5-5=0 4-5=-1 6-5=1 5-5=0 5-4=1 6-4=2 5-6=-1 6-6=0 4-6=-2 5-6=-1 6-6=0
博弈搜索-α-β剪枝法
状态空间搜索法
搜索的一般过程: 搜索的一般过程:
① 把初始节点S0放入Open表,建立一个只含起始节点的搜索图。 ② 检查Open表是否为空,若空,则无解,退出。 ③ 把Open表中的第一个节点取出,记为节点n,并放入Closed表。 ④ 考察节点n 是否为目标节点,若是,则得到问题的解,退出。 ⑤ 若节点n不可扩展,则转到② ⑥ 对节点n 进行扩展,生成一组子节点,把既不在Open表中,又
1 2 3 S g = 8 0 4 7 6 5
算符:空格左移、空格右移、空格下移、 算符:空格左移、空格右移、空格下移、空格上移
状态空间搜索法
九宫问题
①
sij=0和相邻元素进行交换 和相邻元素进行交换
空格左移 空格右移
S0
j ≠ 1, sij = si ( j −1) , si ( j −1) = 0
定义估计函数:f *(x)=g*(x)+h*(x) g*(x)是初始节点到节点x的最小代价; h*(x)是节点x 到目标节点的最小代价。 作出如下限制: g(x)是对 g* (x)的估计(显然有: g(x)≥ g*(x)),且 g*(x)>0; h(x)是 h*(x)的下界,即对于任意节点x均有: h(x)≤h*(x)。 满足上述条件情况下的有序搜索算法称为A*算法 A*算法是可纳的。 当两个算法都是A*算法,则h(x)的值越大越好。
节点进出Open表的规律是先进先出,具有队列性质。 缺点:盲目性较大,当目标节点远离初始节点时,会产 生很多无用节点,效率低。 优点:只要有解,则总可以得到解,且路径是最短的/最 优的,是完备搜索。
深度优先搜索-以九宫问题为例
2 8 3 1 4 7 6 5
S0 S3
2 8 3 1 4 7 6 5
基本思想:P13
…
…
…
宽度优先搜索-以九宫问题为例
首
O
S0
C
O
S1 S2 S3 S4
C
S0
O
S2 S3 S4 S5 S6
C
S0 S1
O
S3 S4 S5 S6 S7 S8
C
S0 S1 S2
O
S4 S5 S6 S7 S8 S9 S10
C
S0 S1 S2 S3
尾
Open和Closed表的变化过程 图2 Open和Closed表的变化过程
对于“或”节点选其中一个最大的得分作为它们父节点的得分; 对于“与”节点选其中一个最小的得分作为它们父节点的得分。
博弈搜索-极小极大分析法
一字棋游戏:
本方放的棋标记为X ,敌方放的棋标记为O。 估计函数f(t)的定义:
端节点的局势为本方胜时, f(t)=∞; 端节点的局势为敌方胜时, f(t)=﹣∞; 端节点的局势为胜负未分时, f(t)=p-q,p空格全部填本方棋时成一线 的数目,q空格全部填敌方棋时成一线的数目。
博弈的初始格局是初始节点; 博弈树中“或”节点和“与”节点是逐层交替出现; 整个博弈过程始终站在某一方的立场上(本方),所有使本方 获胜的终局是本原问题,相应的节点是可解节点;所有使敌方 方获胜的终局都认为是不可解节点。
博弈搜索-极小极大分析法
为了找到最优的行动方案,需要对当前可采取的各个可 能的行动方案进行评估; 一种可行的方法是对正在考察的节点生产一棵部分博弈 树(扩展到一定深度),计算其估价函数(值越大越有 利),采用倒推的方法从部分博弈树的叶节点一直推算 到考察节点。 倒推方法:
宽度优先搜索-以九宫问题为例
基本思想:P12 对同层上的节点全部考察并扩展后,才能对下层节点进 行考察和扩展。既搜索是从上到下逐层搜索的。
2 8 3 1 4 7 6 5
S0
S1
2 8 3 1 4 7 6 5
S2
2 8 3 1 4 7 6 5
S3
2 3 1 8 4 7 6 5
S4
2 8 3 1 6 4 7 5
2 3 1 8 4 7 6 5 4 S9 1 2 3 8 4 7 6 5
定义估价函数:f(x)=g(x)+h(x)
g(x)是节点深度,即移动次数; h(x)错放的纸牌张数; 显然f(x)=是非减函数。
4 S10 1 2 3 8 4 7 6 5
6 S11 1 2 3 7 8 4 6 5
启发式搜索-A*算法
S4
2 8 3 1 6 4 7 5
S1
2 8 3 1 4 7 6 5
S2
2 3 1 8 4 7 6 5
S5
2 8 3 1 6 4 7 5
S6
2 8 3 1 6 4 7 5
S7
2 8 3 1 6 7 5 4
存在搜索和回溯交替 出现的现象。搜索一 旦进入某个分支,就 将一直沿该分支向下 搜索,直到分支(节 点)不能扩展,然后 再回溯到可以扩展的 其或最近祖先的兄弟 节点。
22
26Fra Baidu bibliotek
28
0
5
-3 3
3
-3 0
2
2
-3 0
-2 3
5
4
1
-3 0
6
8
9
-3
博弈搜索-α-β剪枝法
应用α-β剪枝法时应注意问题
极小节点和极大节点之间的比较 仅当节点的倒推值确定以后,该数值才可以向父节点传 递(尽可能一直向上传递)。 对本方扩展节点(极大/“与”节点)的分枝进行剪枝称 /“ 为α剪枝,对敌方扩展节点(极小/“或”节点)的分枝 进行剪枝称为β剪枝; 在实际搜索时,并不是先生成指定深度的搜索图,再在 搜索图上进行剪枝的,如果这样就失去了α-β剪枝方法 的意义。
启发性信息主要体现在h(x)中,要根据实际问题的特性来确定; 重排九宫问题中可以定义为错放的纸牌张数。
启发式搜索-A算法
有序搜索算法(A算法)
① 把初始节点S0放入Open表。 ② 检查Open表是否为空,若空,则无解,退出。 ③ 把Open表中的第一个节点取出,记为节点n,并放入Closed表。 ④ 考察节点n 是否为目标节点,若是,则得到问题的解,退出。 ⑤ 若节点n不可扩展,则转到② ⑥ 对节点n 进行扩展,生成一组子节点,把既不在Open表中,又
状态空间搜索法
九宫问题
2 8 3 1 4 7 6 5
初始状态S0
?
1 2 3 8 4 7 6 5
目标状态Sg
s11 S = s21 s31
s12 s22 s32
s13 s23 s33
2 8 3 S 0 = 1 0 4 7 6 5
第2章 搜索技术
状态空间搜索法
基本概念
状态:是描述问题求解过程中任一时刻状况的数据 结构。 S=(s1,s2,…, sn) Sk=(s1k,s2k,…, snk) 算符:由一个状态变为另一个状态的操作。 状态空间:表示问题的全部可能状态及其相互关系 的有向图。节点表示状态,弧表示由一个状态变为 另一个状态的操作。 状态空间法: (S0, F, Sg)
不在Closed表中的子节点添加到Open表中,并计算其估价函数 值。 ⑦ ,对Open表中的各节点按其估价函数值从小到大进行排序 ⑧ 转到②
启发式搜索-A算法求解九宫重排问题
3 4 2 8 1 7 6 S5 8 3 2 1 4 7 6 5 5 S1 3 4 5 6 S6 2 8 3 7 1 4 6 5 4 4 S2 2 3 1 8 4 7 6 5 S7 6 S8 2 3 1 8 4 7 6 5 2 8 3 1 4 7 6 5 S0 S4 5 2 8 3 1 6 4 7 5 5 S3 2 8 3 1 4 7 6 5
C
S0 S4 S6 S7
尾
Open和Closed表的变化过程 图2 Open和Closed表的变化过程
节点进出Open表的规律是后进先出,具有栈的性质。 缺点:若目标节点不在搜索的分支上,而该分支又是一 个无穷分支,就不可能得到解,是不完备搜索。 优点:若目标节点恰好在搜索的分支上,则可较快地得 到解。
迭代加深搜索
目的:克服深度优先搜索陷入无穷分支死循环的问题。 基本思想:预先设定搜索深度界限d,当搜索深度达到 深度界限d而尚未出现目标节点时就换一个分支搜索。 d的设置:当问题有解,且解的路径长度小于等于d时, 则搜索过程一定能找到解,但不能保证最优的,搜索过 程是完备而非最优的。若d取的太小,解的路径大于d, 则搜索过程找不到解,此时搜索过程是不完备的。 迭代加深搜索:先任意给定一个较小的d,如果找到, 则结束;否则增大深度d,继续搜索。
启发式搜索
盲目搜索效率低。 既可以指导搜索过程又与具体问题求解有关的控制信息 称为启发性信息。 在启发性信息引导下的搜索过程称为启发式搜索。 启发式搜索充分利用与问题求解有关的特性信息来估计 节点的重要性,指导搜索朝最有希望的方向进行,既选 择最有希望的节点加以扩展。 估计函数 f(x)=g(x)+h(x)
博弈搜索-概述
两人博弈(博弈双方利益对立,双方轮流采取行动)的 结果:本方胜;敌方胜;平局。 分硬币游戏: 在博弈过程中,任何一方都希望自己获胜,总是挑选对 自己最为有利而对敌方最为不利的那个行动方案。 对某一方来说,可供本方选择的哪些方案之间是“或” 的关系,可供对方选择的哪些方案之间是“与”的关系。 整个博弈过程始终站在某一方的立场上(本方),把博 弈过程用图表示出来,则可以得到一棵与/或树:
不在Closed表中的子节点添加到Open表中。在这些子节点之间 互称为兄弟节点,节点n 为父节点。 ⑦ 按某种搜索策略对Open表中的节点进行排序, ⑧ 转到②
通过搜索得到的图称为搜索图
盲目搜索法
从当前的状态到目标状态需要走多远或者每条路 径的花费未知,所能做的工作只是可以区分出 那个是目标状态。 按预定的搜索策略进行,没有考虑问题本身的特 性 常用的盲目搜索有广度优先搜索 深度优先搜索 广度优先搜索和深度优先搜索 广度优先搜索 两种
2 8 3 1 4 7 6 5
③ ④ ⑤
②
j ≠ 3, sij = si ( j +1) , si ( j +1) = 0
空格上移 i ≠ 1, sij = s(i −1) j , s(i −1) j = 0 空格下移 i ≠ 3, sij = s(i +1) j , s(i +1) j = 0
2 8 3 1 4 7 6 5
S9
… … … …
…
…
… … … … S8
2 8 3 1 6 7 5 4
2 8 1 6 3 7 5 4
… … … …
… … … …
深度优先搜索-以九宫问题为例
首
O
S0
C
O
S4 S3 S2 S1
C
S0
O
S6 S5 S3 S2 S1
C
S0 S4
O
S7 S5 S3 S2 S1
C
S0 S4 S6
O
S9 S8 S5 S3 S2 S1
生成搜索树和倒推计算同时进行,以提高效率 α-β剪枝规则如下: 如果本方扩展节点(极大/“与”节点)的值小于其先辈 节点(敌方扩展节点)的值,则对此节点停止搜索。这 种情况称为α剪枝 如果敌方扩展节点(极小/“或”节点)的值大于其先辈 节点(本方扩展节点)的值,则对此节点停止搜索。这 种情况称为β剪枝 采用有界深度优先搜索策略(节点的生成次序从上到下, 从左到右)
博弈搜索-α-β剪枝法
α-β剪枝搜索过程的博弈树
14 ≥0 32 =1
9 ≤0
13 =0
25 ≤1
31 =1
5 ≥0
8 =0
12 ≥3
21 ≥1
24 =1
30 ≥6
20 =1 7 ≤-3 2 ≤0 4 =0 11 =3 18 ≤4 16 ≤5 23 ≤-3 29 =6 27 ≤6
1
3
6
10
15
17 19
S5
8 3 2 1 4 7 6 5
S6
2 8 3 7 1 4 6 5
S7
2 8 1 4 3 7 6 5
S8
2 8 3 1 4 5 7 6
S9
2 3 1 8 4 7 6 5
S10
2 3 1 8 4 7 6 5
S11
2 8 3 1 6 4 7 5
S12
2 8 3 1 6 4 7 5
… …
… …
… …
…
…
2 3 1 8 4 7 6 5
2 8 3 1 4 7 6 5
2 8 3 1 6 4 7 5
九宫问题的一次移动操作
状态空间搜索法
搜索的基本思路: 搜索的基本思路:
把问题的初始状态作为当前状态,选择适当的算符对 其进行操作,生成一组子状态。然后,检查目标状态 是否在其中,若出现,则搜索成功,找到解;若不出 现,则按某种搜索策略从已生成的状态中再选出一个 状态作为当前状态。重复上述过程,直到目标状态出 现或不再有可供操作的状态为止。 建立两个数据结构表:Open和Closed, Open用于存 放刚(新)生成的节点, Closed用于存放已扩展的节 点。 所谓扩展是指用合适的算符对该节点进行操作,生成 的一组子节点(要求未曾出现过的,即不能把先辈节 点作为当前扩展节点的子节点)