You are on page 1of 19

2022/10/1

人工智能概论 第二章 状态空间表示


与问题求解
刘若辰 刘若辰
慕彩红
人工智能学院
mucaihongxd@foxmail.com

引言
第二章 状态空间表示
与问题求解  人工智能的多个研究领域从求解现实问题的过程来看
,都可抽象为一个“问题求解”过程,问题求解过程
 内容提要: 实际上就是一个搜索过程。
 在搜索过程开始之前,必须先用某种方法或某几种方
• 2.1 问题求解与状态空间表示法
法的混和来表示问题。
• 2.2 图搜索策略  问题求解技术主要涉及两个方面:

• 2.3 盲目式搜索 问题的表示


求解的方法
• 2.4 启发式搜索
 状态空间表示法就是用来表示问题及其搜索过程的一

3
种方法。

 例:迷宫问题  例:八数码问题

S1 S2 S3
1 3 1 2 3
S0 S4 S5 S6
7 2 4 8 4
6 8 5 7 6 5

S7 S8 S9 Sg
初始棋局 目标棋局

 约束:每次只能走一步

1
2022/10/1

 例:传教士野人问题
( Missionaries& Cannibals, MC问题)
调度
有三个传教士M和三个野人C过河,只有一条能装下两个人
的船,在河的一方或者船上,如果野人的人数大于传教士
导航
的人数,那么传教士就会有危险,你能不能提出一种安全 分配
的渡河方法呢? 路径规划
游戏 问题明确了,可如
何进行问题表示,
才能让计算机知道
这些问题呢?

问题的状态空间表示 问题的状态空间表示
 状态空间方法:基于解答空间的问题表
示和求解方法,它是以状态和算符为基  状态(state):为描述某类不同事物间的差别而引入的一
础来表示和求解问题的。 组最少变量 q0 , q1,…,qn的有序集合.
 主要包括:
矢量形式: Q=[q0, q1,…qn]
 状态
式中每个元素qi为集合的分量,称为状态变量。
 算符
 状态空间 给定每个分量的一组值就得到一个具体的状态,

 典型的例子: 下棋、迷宫、各种游戏等。 如 Qk=[q0k, , q1k ,…,qnk ]

1 10
0

问题的状态空间表示 问题的状态空间表示
 迷宫问题的状态:  八数码问题的状态:
1 3 1 2 3
 以每个格子作为一个状态,并用其标识符作为其表示。
7 2 4 8 4
该迷宫的状态可表示为:Sk={Si}
 将棋局 6 8 5 7 6 5
Si可以取值为{S0,S1,S2,S3,…, Sg }
X1 X2 X3
 初始状态:S0
S1 S2 S3 X8 X0 X4
 目标状态:Sg
X7 X6 X5
S0 S4 S5 S6
用向量S=(X0, X1, X2, X3, X4, X5, X6, X7, X8) 表示状态

Xi 为变量,Xi 的值就是方格Xi 内的数字,取值为{0,1,2…8},其


S7 S8 S9 Sg
中0表示空格。于是,向量S就是该问题的状态表达式。

2
2022/10/1

问题的状态空间表示 问题的状态空间表示
 八数码问题的状态:
 算符(Operator): 当对一个问题状态使用某个可用操作时

1 3 1 2 3 ,它将引起该状态中某些分量值的变化,从而使问题从一

7 2 4 8 4 个具体状态变为另一个具体状态。

6 8 5 7 6 5  算符可理解为状态集合上的一个函数,它描述了状态
之间的关系。
 算符可以是某种操作、规则、 行为、变换、函数、算
初始状态:S0=(210345867) 子、过程等。
目标状态:Sg=(012345678)  算符也称为操作,问题的状态也只能经定义在其上的这
种操作而改变。

问题的状态空间表示
S1 S2 S3  八数码难题的算符
 迷宫问题的算符
S0 S4 S5 S6
 以每个格子作为一个状态,并用其
标识符作为其表示。那么,两个标
S7 S8 S9 Sg  制定操作算符集:
识符组成的序对就是一个算符。
 * 直观方法——为每个棋牌制定一套可能的走
于是: 步:左、上、右、下四种移动。这样就需32个
操作算子。
S:S0
 * 简易方法——仅为空格制定这4种走步,因为

 该迷宫的算符 F: F={(S0, S4), (S4, S0), (S4, S1), (S1, S4), 只有紧靠空格的棋牌才能移动。
(S1,S2), (S2, S1), (S2, S3), (S3, S2), (S4, S7),  * 空格移动的唯一约束是不能移出棋盘。
(S7, S4), (S4, S5), (S5, S4), (S5,S2), (S2, S5),
(S5, S6), (S6, S5), (S5, S8), (S8, S5), (S8, S9),
(S9, S8), (S9, Sg)}
 G:Sg 1 16
6

问题的状态空间表示 问题的状态空间表示  103 


 状态空间图  724 




 685 

 问题的状态空间(State space):利用状态变量和
1 3 1 2 3  130 
 123   013 
   724 
 724   704 
算符表示系统或问题的有关知识的符号体系。 7 2 4 8 4  
 685 
 
 
 685 
 
 685 
 

6 8 5 7 6 5
 状态空间常用一个四元组表示:(S,O,S0,G)  123 
 
 123 
 
 123 
 
初始棋局 目标棋局  074 
 
 685 
 784 
 
 605 
 740 
 
 685 
 S:为状态集合;
 O:为状态转换规则集合(操作的集合);  从初始棋局开始,试探由每一合法走步  123 
 784 
 123 
 784 
   
   
 065   650 

 S0:为问题的所有初始状态的集合; 得到的各种新棋局,然后再走一步而得
 123 

 G:为目标状态的集合。 到的下一组棋局。这样继续下去,直至  084 


 
 765 
 

达到目标棋局为止。
 023   123 
   
 184   804 
   
 765   765 

3
2022/10/1

问题的状态空间表示 问题的状态空间表示
 状态空间图
 103   103 
 724   724 
   
 685 
 
 状态图示法  685 
 

1 3 1 2 3  130 
 123   013   130 
 123   013 
 704     704   
 724     724   
   724     724 
7 2 4 8 4  685 
 
 685   
 685   685 
 
 685   
 685 
   
6 8 5 7 6 5
状态空间的图示形式称为状
 123   123   123   123   123   123 
 074   784   740   074   784   740 
初始棋局 目标棋局 



 685 




 605 




 685  态空间图。其中图的节点 



 685 




 605 




 685 

 把初始状态可达到的各状态所组成的空  123 
 784 
 123 
 784 
表示状态, 图的边表示算  123 
 784 
 123 
 784 
       

间设想为一幅由各种状态对应的节点组
 065 
 
 650 
 
符。  065 
 
 650 
 

 123   123 
成的图。这种图称为状态空间图。图中  
 084 
 
 
 084 
 
 765   765 

每个节点是它所代表的棋局。首先把适
 023   123   023   123 
 184   804   184   804 
用的算符用于初始状态,以产生新的状 



 765 




 765 




 765 




 765 

态;算符可以看成状态空间图的边。

传教士野人问题( Missionaries& Cannibals问题)


状态图示法
有向图(directed graph) 状态:问题在某一时刻所处的“位置”,“情况”等
图,由节点(不一定是有限的节点)的集 根据问题所关心的因素,一般用向量形式表示,每一
合构成。有向图,是指图中的一对节点用 位表示一个因素
弧线连接起来,从一个节点指向另一个节 (考虑从左岸向右岸渡河)
点。
 路径 状态可有多种表示方法:
 某个节点序列(ni1,ni2,,…,nik)当j=2,3,…k时,如果
(左岸传教士数, 右岸传教士数, 左岸野人数, 右岸野人数, 船的位置)
对于每一个nij-1都有一个后继节点nij存在,那么就把这

个节点序列叫做从节点ni1至节点nik的路径。 哪些操作能导致
代价 加在各弧线的指定数值,以表示加在相应算符上的代价。 (右岸传教士数, 右岸野人数, 船的位置)
状态变化?
寻找从一种状态变换为另一种状态的某个算符序列问 初始状态:(0, 0, 0) 0:左岸
题就等价于寻求图的某一路径的问题. 目标状态:(3, 3, 1)
1:右岸
21

状态的转换 传教士野人问题状态空间图

• 算符(操作)——使状态发生改变的操作
• MC问题中的算符:将传教士或野人运到河对岸
–Move-1m1c-lr:将一个传教士(m)一个野人(c)
从左岸(l)运到右岸(r)
–所有可能操作
• Move-1m1c-lr Move-1m1c-rl
• Move-2c-lr Move-2c-rl
• Move-2m-lr Move-2m-rl M 传教士

C 野人
• Move-1c-lr Move-1c-rl
• Move-1m-lr Move-1m-rl

4
2022/10/1

二阶梵塔难题 二阶梵塔难题--状态
 问题描述: 设有三根柱子,它们的编号分别是1号、2号  状态: 设SK=(SK0,SK1)表示问题的状态,
A
B
和3号。在初始情况下,1号柱子上穿有A、B两个盘子,  SK0 表示盘片A所在的柱号,取值1, 2, 3
1 2 3
 SK1 表示盘片B所在的柱号,取值1, 2, 3 S0=(1,1)
A比B小,A位于B的上面。
 全部可能的状态,共有以下9种:
 要求把这两个盘子全部移到另一根柱子上,而且规定每次
S0=(1,1), S1=(1,2), S2=(1,3), A
只能移动一个盘子,任何时刻都不能使大的位于小的上面。

B
S3=(2,1), S4=(2,2), S5=(2,3), 1 2 3
如何将A、B移到2号或3号柱子上面?

 S4=(2,2)
 S6=(3,1), S7=(3,2), S8=(3,3).

 问题的初始状态集合S={S0},目标集合为 A
A A A B
B B B G={S4,S8}
1 2 3
1 2 3 1 2 3 1 2 3 S8=(3,3)
S0=(1,1) S4=(2,2) S8=(3,3)

二阶梵塔难题--状态空间图
二阶梵塔难题--算符
状态空间图 A
A A
A B
 算符: A(i,j), B(i,j) B  从初始节点(1, 1)到目标节 B B

1 2 3 1 2 3 1 2 3
1 2 3 点(2, 2)及(3, 3)的任何一条 S0=(1,1) S4=(2,2) S8=(3,3)
 A(i,j): A盘从柱i移到柱j; S0=(1,1)
路径都是问题的一个解。 (1, 1)
 B(i,j): B盘从柱i移到柱j A(1, 3)
 最短的路径长度是3,它
 全部可能的算符,共有12种: A (2, 1) (3, 1)
B 由3个操作组成。
A(1,2), A(1,3), A(2,1), A(2,3), 1 2 3 B(1, 2)
如从(1, 1)开始,通过使用


S4=(2,2)
×
 A(3,1), A(3,2),B(1,2), B(1,3), 操作A(1, 3)、B(1, 2)及A(3, (2, 3) (3, 2)
B(1,3) A(3, 2)
 B(2,1), B(2,3), B(3,1), B(3,2) 2),可到达 (2, 2)。
A
B
(3, 3) (1, 3) (1, 2) (2, 2)
1 2 3
S8=(3,3)
二阶梵塔难题的状态空间图

猴子和香蕉问题 解题过程

 用一个四元表列(W,X,Y,Z)来表示问题状态.
问题描述
在一个房间内有一只  其中:W-猴子的水平位置;X-当猴子在箱子顶上
猴子,一个箱子和一 时取X=1;否则取X=0;Y-箱子的水平位置;Z-当
束香蕉。香蕉挂在天 猴子摘到香蕉时取Z=1;否则取Z=0。
花板下方,但猴子的
高度不足以碰到它。
那么这只猴子怎样才
能摘到香蕉呢?

29 30

5
2022/10/1

 该初始状态变换为目标状态的操作序列为:
操作(算符):  {goto(b),pushbox(c),climbbox, grasp}
表示猴子走到水平位置U 初始状态:
或者用产生式规则表示为:
(W,0,Y,Z)
goto (U)
(U,0,Y,Z) ( a,0,b,0 )
猴子把箱子推到水平位置V,即有:
pushbox(V)
(W,0,W,Z) (V,0,V,Z)
猴子爬上箱顶,即有:
climbbox
(W,0,W,Z) (W,1,W,Z) 目标状态:
猴子摘到香蕉,即有:
grasp
( c,1, c,1 )
(c,1,c,0) (c,1,c,1)
31 32

 推销员旅行问题(旅行商问题)

 一个推销员计划出访推销产品。他从一个城市
(如A)出发,访问每个城市一次,且最多一次,
然后返回城市A。要求寻找最短路线。

33

(A) 初始节点
7 13
6 10
(AB) (AC) (AD) (AE)

5
(ACD)
10 10
6
(ACDE)

10 (ACDEB)
7
图2.3 推销员旅行问题 (ACDEBA) 目标节点
 状态描述:目前为止访问过的城市列表(A…) 推销员旅行问题状态空间图

 初始状态: (A)
 算符:下一步走向的城市(a)(b)(c)(d)(e)
 目标状态: (A……A)  约束:每个城市只能走过一次,A除外

6
2022/10/1

小结 第二章 状态空间表示
与问题求解
状态空间表示 • 2.1 问题求解与状态空间表示法
 初始状态 • 2.2 图搜索策略
 算符 • 2.3 盲目式搜索
 目标状态 • 2.4 启发式搜索

引言 状态图搜索
 走迷宫其实就是从该有向图的初始节点(入口)出发, 寻找通向
 问题表示是问题求解所必须的,从问题表示到问
题的解决,有一个求解过程,也就是搜索过程。 目标节点(出口)的路径的问题。

 状态空间法的求解过程等价于在状态空间图中搜
索一条从初始节点到目标节点的路径问题。 S1 S2 S3
S1 S2 S3
初始状态集
S0 S4 S5 S6 S0 S4 S5 S6
状态空间
搜索空间 S7 S8 S9 Sg
S7 S8 S9 Sg
解路径
9格子迷宫 迷宫的状态空间图
目标状态集

状态图搜索 状态图搜索
由于搜索的目的是为了寻找初始节点到目标节点的
路径,所以在搜索过程中就得随时记录搜索轨迹。 记录考察
记录当前待
 必须记住下一步还可以走哪些点 考察的节点 过的节点
OPEN表(记录待扩展的点) (1)OPEN表与CLOSED表
(2)搜索(状态)图与搜索树
 必须记住哪些点走过了
OPEN CLOSED
CLOSED表(记录已扩展的点)
节点 父节点编号 编号 节点 父节点编号
 必须记住从目标返回的路径
每个表示状态的节点结构中必须有指向父
节点的指针
所谓对一个节点进行“扩展”是指对该节点用某个可用算符进行作用,生成该节
点的一组子节点(后继节点)

7
2022/10/1

开始

把S放入OPEN表 S0 S0 S0


OPEN表为空表? 失败 A B A B A B

图 把第一个节点(n)从OPEN表移至CLOSED表
搜 D C D C D C

索 n为目标节点吗? 成功
修改返回指针示例
流 否
把n的后继节点放入OPEN表,提
进一步说明:
程 (1) 修改返回指针的原因是, 因为这些节点又被第二次生成,
供返回节点n的指针
图 所以它们返回初始节点的路径已有两条, 但这两条路径
修改指针方向 的“长度”可能不同。 那么, 当新路短时自然要走新
路。
重排OPEN表 (2)这里对路径的长短是按路径上的节点数来衡量的, 后面
我们将会看到路径的长短也可以其“代价”(如距离、
费用、时间等)衡量。

图搜索过程 图搜索--例一

 注:这是一个通用的搜索过程, 后面讨论的状态空间各 Open 表 Closed 表


S
种搜索策略都是其特例。 {S} {}

 算法结束后,将生成一个图G,称为搜索图。同时由于
1 2 3
每个节点都有一个指针指向父节点,这些指针指向的
节点构成G的一个支撑树,称为搜索树。

 从目标节点开始,将指针指向的状态回串起来,即找 4 5 6
到一条解路径。

图搜索--例二 图搜索分类
Open 表 Closed 表
 9格子迷宫  对OPEN表中节点排序方式产生了不同的搜索策略,不同的搜
{S0} {}
索搜索策略效率不同。
{S4} {S0}
{S1,S5,S7} {S0,S4}  这种排序可以是任意的即盲目的(属于盲目搜索),也可以用各
{S5,S1,S7} {S0,S4} 种启发思想或其它准则为依据(属于启发式搜索)。
{S1,S7} {S0,S4,S5}
S1 S2 S3
{S1,S7,S8,S6,S2} {S0,S4,S5}  无信息搜索(盲目式搜索)
{S8,S6,S2,S1,S7} {S0,S4,S5}
S0 S4 S5 S6
{S6,S2,S1,S7,S9} {S0,S4,S5,S8}
 宽度优先搜索
{S9,S6,S2,S1,S7} {S0,S4,S5,S8}
 深度优先搜索 图搜索策略
S7 S8 S9 Sg
{S6,S2,S1,S7,Sg} {S0,S4,S5,S8,S9}  等代价搜索
{Sg,S6,S2,S1,S7} {S0,S4,S5,S8,S9}
 有信息搜索(启发式搜索)
{S6,S2,S1,S7} {S0,S4,S5,S8,S9,Sg}
 A算法
S0  S4  S5  S8  S9  Sg  A*算法

8
2022/10/1

第二章 状态空间表示
盲目搜索
与问题求解  概念
◇没有启发信息的一种搜索形式(按预定的控制策略进行
搜索,在搜索过程中获得的中间信息不用来改进控制策
• 2.1 问题求解与状态空间表示法 略)
• 2.2 图搜索策略 ◇一般只适用于求解比较简单的问题
 特点
• 2.3 盲目式搜索 ◇不需重排OPEN表
 种类
• 2.4 启发式搜索 ◇宽度优先
◇深度优先
◇等代价搜索

宽度(广度)优先搜索策略
 宽度优先搜索(breadth-first search)的定义:如果
搜索是以接近起始节点的程度依次扩展节点的,
那么这种搜索就叫做宽度优先搜索(breadth-first
search).
 这种搜索是逐层进行的;在对下一层的任一节
点进行搜索之前,必须搜索完本层的所有节点

宽度优先搜索示意图

宽度优先搜索策略框图 八数码难题
开始

把S放入OPEN表

OPEN表为空 是
失败
表?

把第一个节点(n)从OPEN表移至
CLOSED表

扩展n,把n的后继节点放入OPEN 要求寻找从初始状态到目标状态的路径。
表的末端,提供返回节点n的指针

是否有后继节点 是
成功
为目标节点?


宽度优先算法框图

9
2022/10/1

S。 3 8 16 27
深度优先搜索
_ (depth-first search)

 定义
◇首先扩展最新产生的(即最深的)节点。
◇深度相等的节点可以任意排列。
 特点
◇首先扩展最深的节点的结果使得搜索沿着状态空间
某条单一的路径从起始节点向下进行下去;
◇仅当搜索到达一个没有后裔的状态时,才考虑另一
条替代的路径。

2 8 3
S0 1 4 1
7 6 5
2
2 8 3 2 3 2 8 3 2 8 3
1 4 1 8 4 1 4 1 6 4
7 6 5 7 6 5 7 6 5 7 5
3
2 8 3 2 8 3
1 6 4 1 6 4
7 6 7 5
4
2 8 3
1 6
7 5 4
5
2 8 3 2 8
1 6 1 6 3
7 5 4 7 5 4

2 8
1 6 3
7 5 4
深度优先搜索示意图
...

算法
◇防止搜索过程沿着无益的路径扩展下去,往往给出 算法的具体过程
一个节点扩展最大深度 ——深度界限 。任何节点如
果达到了深度界限,那么都将把它们作为没有后继节 1. 把起始节点 S放到未扩展节点 OPEN表中。如果此节点
点来处理。 为一目标节点,则得到一个解。
定义-节点的深度: 2. 如果 OPEN为一空表,则失败退出。
(1)起始节点的深度为0。 3. 把第一个节点(节点n)从 OPEN表移到CLOSED表。
(2)任何其他节点的深度等于其父辈节点的深度加1。 4. 如果节点 n的深度等于最大深度,则转向(2)
◇与宽度优先搜索算法最根本的不同:将扩展的后继 5. 扩展节点n,产生其全部后裔,并把它们放入OPEN表
节点放在OPEN表的前端。 的前端,如果没有后裔,则转向(2)
6. 如果后继节点中有任一个为目标节点,则求得一个解,
成功退出,否则,转向(2)

10
2022/10/1

深度优先搜索基本思想 深度优先搜索的性质
 一般不能保证找到最优解
 当深度限制不合理时,可能找不到解,可
以将算法改为可变深度限制
 最坏情况时,搜索空间等同于穷举

例:按深度优先搜索生成的八数码难题搜索树, 例:按深度优先搜索生成的八数码难题搜索树,
我们设置深度界限为4 我们设置深度界限为5
2 8 3
2 8 3 1 6 4
7 5
S 1 4 1
0
7 6 5

11 2 2 8 3 2 8 3 2 8 3
1 6 4 1 4 1 6 4
7 5 7 6 5 7 5
2 8 3 2 3 2 8 3 2 8 3
1 4 1 8 4 20 1 4 1 6 4
7 6 5 7 6 5 7 6 5 7 5
2 8 3 2 8 3 2 3 2 8 3
6 4 1 4 1 8 4 1 4
25 21 16 12 7 3 1 7 5 7 6 5 7 6 5 7 6 5

2 3 23 2 8 2 8 3 2 8 3 2 8 3
1 8 4 18 4 1 4 3 1 4 5 1 6 4 1 6 4
7 6 5 76 5 7 6 5 7 6 7 6 7 5 2 8 3 8 3 2 8 3
2 3 2 3
8 3 2 1 4
6 4 7 1 4 1 8 4
2 6 4 1 8 4
7 6 5 6 5
26 22 17 13 8 4 1 7 5 1 7 5 7 6 5 7 6 5

1 2 3 23 4 2 8 2 8 3 2 8 3 2 8 3
8 4 18 1 4 3 1 4 5 6 4 1 6 8 3 2 3 2 8 3 2 8 3 2 8 3
8 3 1 2 3
7 6 5 76 5 7 6 5 7 6 1 7 5 7 5 4 2 6 4 6 8 4 6 4 6 7 4 2 1 4
7 1 4
8 4
1 7 5 1 7 5 1 7 5 1 5 6 5
7 6 5 7 6 5
28 27 24 23 19 18 15 14 10 9 6 5

1 2 3 1 2 3 2 3 4 2 3 4 2 8 2 4 8 2 8 3 2 8 3 8 3 2 8 3 2 8 3 2 8
8 3 8 6 3 2 3 2 3 2 8 2 8 3 2 8 3 2 8 3 8 3 8 1 3 2 8 3 2 8 3 1 2 3 1 2 3
8 4 7 8 4 1 8 1 8 5 1 4 3 1 3 1 4 5 1 5 2 6 4 6 4 1 6 1 6 3 2 6 4 2 4 6 4 5 6 7 4 6 7 4 2 1 4 2 4 7 4
6 8 4 6 8 4 6 4 3 7 1 4 8 4 7 8 4
7 6 5 6 5 7 6 5 7 6 7 6 5 7 6 5 7 6 7 4 6 1 7 5 1 7 5 7 5 4 7 5 6 1 7 5 1 7 5 1 7 5 1 7 5 1 7 5 1 7 1 5 1 5 7 6 5 7 6 5 6 1 5 6 5 7 6 5 6 5

Sg

等代价搜索 等代价搜索算法
 概念
(代价树的广度优先搜索)
◇宽度优先搜索的一种推广。 1. 把初始节点S0放入OPEN表,令g(S0)=0。
◇不是沿着等长度路径断层进行扩展,而是沿着等代价路径 2. 如果OPEN表为空,则问题无解,退出。
断层进行扩展。 3. 把OPEN表的第一个节点(记为节点i )取出放入
◇搜索树中每条连接弧线上的有关代价,表示时间、距离等 CLOSED表。
花费。 4. 考察节点i是否为目标节点。若是,则求得了问题的
 等代价搜索中的几个记号 解,退出。
◇起始节点记为 S; 5. 若节点i不可扩展,则转第2步。
◇从节点i到它的后继节点j的连接弧线代价记为 c(i, j) 6. 扩展节点i ,为每一个子节点都配置指向父节点的指
◇从起始节点S到任一节点i的路径代价记为g(i) 。 针,对于节点i的每个后继节点j,计算 g(j)=g(i)+c(i, j),
并把所有后继节点j放进OPEN表. 按各节点的代价对
◇则对于节点i的每个后继节点j, OPEN表中的全部节点进行排序(按从小到大的顺序),
g(j)=g(i)+c(i, j) 然后转第2步。

11
2022/10/1

代价树搜索举例
代价树的深度优先搜索
 搜索过程:
1. 把初始节点S0放入OPEN表,令g(S0)=0。
2. 如果OPEN表为空,则问题无解,退出。
3. 把OPEN表的第一个节点(记为节点n)取出放入
CLOSED表。
4. 考察节点n是否为目标节点。若是,则求得了问题的
解,退出。
5. 若节点n不可扩展,则转第2步。
6. 扩展节点n,将其子节点按代价从小到大的顺序放到 在代价树的宽度优先搜索中,每次都是从OPEN表的全体节
OPEN表中的前端,并为每一个子节点都配置指向父 点中选择一个代价最小的节点送入CLOSED表进行观察;
节点的指针,然后转第2步。
而代价树的深度优先搜索是从刚扩展出的子节点中选一个代
价最小的节点送入CLOSED表进行观察。

习题1
盲目搜索 请根据下图写出分别利用代价树的宽度优先搜索
 按照事先规定的路线进行搜索 (BFS)和深度优先搜索(DFS)找到的从初始
 广度优先搜索是按“层”进行搜索的,先进
节点S到达目标节点G的路径,并分别列出两种情
入OPEN 表的节点先被考察 况下,Open表和Closed表的变化情况。
 深度优先搜索是沿着纵深方向进行搜索的, S
后进入OPEN表的节点先被考察 5
2
4
 按已经付出的代价决定下一步要搜索的节点 A B C
 代价树的广度优先 9
4 6 2

 代价树的深度优先 D E
6
G 1
F
7 Sg

H
70

第二章 状态空间表示
与问题求解
• 2.1 问题求解与状态空间表示法
• 2.2 图搜索策略
• 2.3 盲目式搜索
• 2.4 启发式搜索

71

12
2022/10/1

启发式搜索
 为什么需要启发式搜索? 盲目式搜索 启发式搜索
 ◇盲目搜索的不足
 效率低,耗费过多的计算空间与时间
S0
S0
 可能带来组合爆炸

 分析前面介绍的宽度优先、深度优先搜索,或等代价搜索算
法, 其主要的差别是OPEN表中待扩展节点的顺序问题。人们 n
n
就试图找到一种方法用于排列待扩展节点的顺序,即选择最有
希望的节点加以扩展,那么,搜索效率将会大为提高. ?

 ◇什么可以做为启发信息?
Sg
Sg
 一般需要某些有关具体问题的领域的特性信息,把此种信息叫
做启发信息。

启发式信息 启发式搜索
 启发性信息是指那种与具体问题求解过程有关的  启发式搜索是利用与问题有关的启发性信息,并
,并可指导搜索过程朝着最有希望方向前进的控 以这些启发性信息指导搜索的问题求解过程。
制信息。
 需定义一个评价函数,对当前的搜索状态进行
 启发式就是要猜测: 评估,找出一个最有希望的节点来扩展。
 从节点n开始,找到最优解的可能性有多大?  重排OPEN表,选择最有希望的节点加以扩展
 从起始节点开始,经过节点n,到达目标节点的
最佳路径的费用是多少?  种类: A算法、A*算法等

A算法 局部择优搜索(瞎子爬山法)
 估价函数 f (n) :估算节点“希望” 程度的量度 搜索过程如下:
S0  (1) 把初始节点S0放入OPEN表,计算f(S0);
f (n) = g (n) + h (n)
 (2) 如果OPEN表为空,则问题无解,退出;
 (3) 把OPEN表的第一个节点(记为节点n)取出,放入CLOSED
从起始状态 表;
到当前状态n 从当前状态到目 n
 (4) 考查节点n是否为目标节点,若是,则求得了问题的解,
的代价 标状态的估计代
退出;
价(启发函数)
 (5) 若节点n不可扩展,则转第(2)步;
局部择优(尼尔逊,1964) Sg  (6) 扩展节点n,用估价函数 f(x) 计算每个子节点的估价值,
A算法 并按估价值从小到大的顺序依次放入OPEN表的首部,并为
有序搜索(拉斐尔,1967) 每一个子节点都配置指向父节点的指针,转第(2)步。

13
2022/10/1

有序搜索算法框图 开始

有序搜索
 概念
把S放入OPEN表,计 有序搜索算法框图
算估价函数f(s)

 ◇有序搜索(ordered search ),也叫全局择优 OPEN表为空 是


失败
表?
搜索或最好优先搜索 (best-first search)。 否
选取OPEN表中f值最小的节点i放入
CLOSED表
 ◇选择OPEN表上具有最小f值的节点作为下一

个要扩展的节点。 i为目标节点吗? 成功

扩展i,得到后继节点j,计算f(j),提供返回
节点i的指针,利用f(j)对OPEN表重新排
序,调整亲子关系及指针

h计算举例
一个算法的例子
2 8 3 1 2 3
1 6 4 2 8 3 1 2 3
8 4 1 6 4 8 4
7 5 7 6 5 7 5 7 6 5

定义评价函数: g(n)=0
f(n) = g(n) + h(n) h(n) =4
g(n)为从初始节点到当前节点的路径长 f(n)=4+0=4
度(深度)
h(n)为当前节点“不在位”的将牌数

2 8 3 s(0+4)
1 6 4 1
7 5

2 8 3 2 8 3 2 2 8 3
A(1+5) 1 6 4 1 4 B(1+3) 1 6 4 C(1+5) 2 8 3 1 2 3
7 5 7 6 5 7 5 1 6 4 8 4
4 1 2 3 7 5 7 6 5
2 8 3 3 2 3 2 8 3
D(2+3) 1 4 1 8 4 E(2+3) 1 4 F(2+4) 8 4
7 6 5 7 6 5 7 6 5
7 6 5
宽度搜索 深度搜索(界为5) 有序搜索
8 3 2 8 3 2 3
5
2 3 扩展节点 26 18 6
2 1 4
7 6 5
7 1 4
6 5
1 8 4 I(3+2)
7 6 5
1 8 4
7 6 5
J(3+4) 生成节点 46 34 13
G(3+3) H(3+4) 6
1 2 3
8 4
7 6 5 K(4+1)

1 2 3 1 2 3
L(5+0) 8 4 7 8 4 M(5+2)
7 6 5 目标 6 5

14
2022/10/1

A*算法 A*算法
 把OPEN表中的节点按估价函数的值从 S0
g*(n)
 1968年,彼得.哈特(PETER E. HART)对A算法进 小到大进行排序
行了很小的修改,并证明了当估价函数满足一定
 f(n) = g(n) + h(n)
的限制条件时,算法一定可以找到最优解。
 g*(n)是从初始节点S0 到任意节点n的
 隶属于A算法,其特点在于对估价函数的定义上
一条最佳路径的代价 n
 h*(n)是从节点n到目标节点的一条最 h*(n)
 A*算法的限制条件
佳路径的代价
f (n) = g (n) + h (n)
 g(n)是对g*(n)的估计,g(n)>= g*(n) Sg
要满足一定条件  h(n) 是 h*(n) 的 下 界 , 即 对 所 有 n 的 ,
h(n)<=h*(n)

A*算法过程
(1) 把S放入OPEN表,记f=h,令CLOSED为空表。
A*算法 (2) 重复下列过程,直至找到目标节点止。若OPEN为空表,则宣告失败。
(3) 选取OPEN表中未设置过的具有最小f值的节点为最佳节点BESTNODE,
并把它放入CLOSED表。
(4) 若BESTNODE为一目标节点,则成功求得一解。
定义1 (5) 若BESTNODE不是目标节点,则扩展之,产生后继节点SUCCSSOR。
(6) 对每个SUCCSSOR进行下列过程:
 在图搜索过程中,如果重排OPEN表是依据f(n)=g(n)+h(n) (a) 建立从SUCCSSOR返回BESTNODE的指针。
进行的,则称该过程为A算法; (b) 计算g(SUC)=g(BES)+k(BES,SUC)。
定义2 (c) 如果SUCCSSOR∈OPEN,则称此节点为OLD,并把它添至
BESTNODE的后继节点表中。
 在A算法中,如果对所有的n存在h(n)≤h*(n) ,则称h(n)为h*(n) (d) 比较新旧路径代价。如果g(SUC)<g(OLD),则重新确定OLD的父辈
的下界,它表示某种偏于保守的估计; 节点为BESTNODE,记下较小代价g(OLD),并修正f(OLD)值。
(e) 若至OLD节点的代价较低或一样,则停止扩展节点。
定义3 􀂄 􀂄 (f) 若SUCCSSOR不在OPEN表中,则看其是否在CLOSED表中。
采用h*(n)的下界h(n)为启发函数的A算法,称为A*算法。 (g) 若SUCCSSOR在CLOSE表中,则转向c。
(h) 若SUCCSSOR既不在OPEN表中,又不在CLOSED表中,则把它放
入OPEN表中,并添入BESTNODE后裔表,然后转向(7)
(7) 计算f值。
(8) GO LOOP

2 8 3 1 2 3

S0 = 1 6 4 Sg = 8 4

例题 7 5 7 6 5

 方案一:
 对于如图所示的八数码问题,给出满足A*算法的启发函
 启发函数的选取如下:g(n)表示节点n在搜索树中
数,并给出相应的搜索图。 的深度, h(n)=ω(n)表示节点n中“不在位”的将
牌数。
 在上面确定h(n)时,尽管并不知道h*(n)具体为多
2 8 3 1 2 3
少,但当采用单位代价时,通过对“不在位”的将
S0 = 1 6 4 Sg = 8 4 牌数的估计,可以得出至少需要移动h(n)步才能够
7 5 7 6 5 到达目标,显然h(n)≤h*(n)。因此它满足A*算法
的要求。

89

15
2022/10/1

2 8 3 s(0+4)
1 6 4 1 2 8 3 1 2 3
7 5 1 6 4 8 4
2 8 3 2 8 3 2 2 8 3
7 5 7 6 5
A(1+5) 1 6 4 1 4 B(1+3) 1 6 4 C(1+5)
7 5 7 6 5 7 5 S g
 方案二:
1 2 3
 定义启发函数h(n)=p(n)为节点n的每一数码与其目
4
2 8 3 3 2 3 2 8 3
D(2+3) 1 4 1 8 4 E(2+3) 1 4 F(2+4) 8 4
7 6 5 7 6 5 7 6 5 标位置之间的距离总和。
7 6 5
1 2 3 将牌 1 1
5
8 3
2 1 4
2 8 3
7 1 4
2 3
1 8 4 I(3+2)
2 3
1 8 4 J(3+4)
2 8 3 不在位 将牌 2 1 ω(S) =4
7 6 5 6 5 7 6 5 7 6 5 8 1 6 4 4 将牌数 p(S) =5
G(3+3) H(3+4) 7 5 5 将牌 6 1
1 2 3 6
8 4 7 6 将牌 8 2
7 6 5 K(4+1)

1 2 3 1 2 3 显然有ω(n)≤p(n)≤h*(n),相应的搜索过程也是
M(5+2)
L(5+0) 8 4
7 6 5 目标
7 8 4
6 5
A*算法。

A*算法
2 8 3
0+5
1 6 4
7 5

2 8 3 2 8 3 2 8 3 下面给出本题的启发函数的比较结果。
1 6 4 1 4 1 6 4
1+6 7 5 1+4 7 5 1+6
7 6 5
启发函数 h(n)=0 h(n)=ω(n) h(n)=p(n)
2 8 3
1 4
2 3
1 8 4
2 8 3
1 4
扩展节点 26 6 5
2+5 7 6 5 2+3 7 6 5 7 6 5 2+5 1 2 3 生成节点 46 13 11
8 4
2 3 2 3
1 8 4 1 8 4 7 6 5
3+2 7 6 5 7 6 5 3+4 ω(n)≤p(n)≤h*(n)
1 2 3
p(n)比ω(n)有更强的启发性信息,由h(n)=p(n)构造
4+1
8 4 的启发式搜索树,比h(n)=ω(n)构造的启发式搜索树
7 6 5
节点数要少。
1 2 3 1 2 3
目标 8 4 7 8 4
7 6 5 6 5

 搜索算法的评价标准: 启发式搜索小结
 启发式策略就是利用与问题有关的启发信息进行搜索
 (1) 完备性 的策略。
 (2) 时间复杂性  利用估价函数来估计待搜索节点的希望程度,并以此
S0
排序。估价函数一般由两部分组成:
 (3) 空间复杂性  f(n)=g(n)+h(n)
 g(n)是从初始节点到节点n已付出的实际代价, h(n)是
 (4) 最优性 问题全状态空间
从节点n到目的节点的最佳路径的估计代价。 h(n)体
现了搜索的启发信息。
搜索空间  在f(n)中,g(n)的比重越大,越倾向于宽度优先搜索,
而h(n)的比重越大,表示启发性越强。
解路径

Sg

16
2022/10/1

启发式搜索小结 启发式搜索小结

 f(n)=g(n)+h(n)  A算法
 在GRAPHSEARCH过程中,如果第8步的重排OPEN表是依
 在f(n)中,g(n)的比重越大,越倾向于宽度优先 据f(n)=g(n)+h(n) 进行的,则称该过程为A算法;
搜索,而h(n)的比重越大,表示启发性越强。  显然,A算法对h(n) 没有明确的限制。
 g(n)的作用一般是不可忽略的,保持g(n)项就保  A*算法
持了搜索的宽度优先成分,这有利于搜索的完备  采用 h*(n)的下界h(n)为启发函数的A算法,称为A*算法。
性,但会影响搜索的效率。  A*算法要求h(n)≤h*(n)。它表示某种偏于保守的估计。
 如果算法有解, A*算法一定能够找到最优的解答。
 一般说来,在满足h(n)≤h*(n)的前提下,h(n)的比重越大越
好, h(n)的比重越大表示启发性越强。

 每个方块左上角的值记为G,表示该点到A的距离
,右上角值为H,H取其到B的距离。F=H+G。

17
2022/10/1

小结

 状态空间法是一种基于解答空间的问题表示和求解
方法,它是以状态和操作符为基础的。在利用状态
空间图表示时,我们从某个初始状态开始,每次加
一个操作符,递增地建立起操作符的试验序列,直
到达到目标状态为止。

108

18
2022/10/1

小结
 对OPEN表中节点排序方式产生了不同的搜索策略,不同的搜 习题2
索搜索策略效率不同。  2: A*算法寻路
 这种排序可以是任意的即盲目的(属于盲目搜索),也可以用各
种启发思想或其它准则为依据(属于启发式搜索)。

 无信息搜索(盲目式搜索)
 宽度优先搜索
 深度优先搜索 图搜索策略
 等代价搜索
 有信息搜索(启发式搜索)
 A算法
 A*算法
 图1 图2

 2: A*算法寻路 2: A*算法寻路
 机器人从图1中的S点出发,利用A*算法寻找一条到达T点 表1
的最短路径,每次只能向与当前位置相邻的上下左右四个 OPEN CLOSED

邻域块移动(移动一次的代价为10),墙壁(标阴影部分 {S} {}

)处不可移动。用G表示S到当前点的路径长度, H表示 {R,U} {S}

当前点到T的曼哈顿距离(两点间的水平距离和垂直距离之
和),F= G+H。如果遇到F值相等,优先考虑H值较小的
点。
 (1)用A*算法搜索,在图2中画出搜索树,如图2所示标
出当前扩展节点的G+H值。
 ( 2 ) 用 A* 算 法 搜 索 , 在 表 1 中列 出 搜 索 中 的 OPEN 、
CLOSED表的内容。要求OPEN表中的点从左至右根据F
值升序排列,F值相同时,根据H值升序排列,F值和H值
都相同时,新生成节点靠左排列。

19

You might also like