当前位置:文档之家› 3搜索问题-盲目搜索

3搜索问题-盲目搜索


◦ 以上问题等价于在图中寻找从根节点到某个(或某些)
目标节点的一条(或一组)路径。

1 问题状态空间的构成
状态空间表示法是以“状态空间”的形式对问题 进行表示。 1)状态:是描述问题求解过程中不同时刻状况的 数据结构。一般用一组变量的有序集合表示:Q=(q1, q2,…,qn) 其中每个元素qi为集合的分量,称为状态 变量,当给每个分量以确定的值时,就得到了一个具体的 状态。
2
3 1 3
2 1
3
2 1 3 1 1
2 3 2 3
2
1
初始棋局
17
目标棋局

产生式系统(production system)
◦ 一个总数据库:它含有与具体任务有关的信息。随着应 用情况的不同,这些数据库可能简单,或许复杂。 ◦ 一套规则:它对数据库进行操作运算。每条规则由左部
鉴别规则的适用性或先决条件以及右部描述规则应用时所 完成的动作。 ◦ 一个控制策略:它确定应该采用哪一条适用规则,而且 当数据库的终止条件满足时,就停止计算。
Q () Q Q
((1,1))
((1,1) (2,3))
((1,1) (2,4))
((1,1) (2,4) (3,2))
Q () Q
((1,1))
((1,1) (2,3))
((1,1) (2,4))
((1,1) (2,4) (3,2))
Q ()
((1,1))
((1,1) (2,3))
((1,1) (2,4))
◦ 系统状态的描述 四个皇后 ((i1,j1), (i2,j2), (i3,j3), (i4,j4))
()
Q ()
((1,1))
Q ()
Q
((1,1))
((1,1) (2,3))
Q ()
((1,1))
((1,1) (2,3))
Q ()
Q
((1,1))
((1,1) (2,3))
((1,1) (2,4))


盲目搜索 只是可以区分出哪个 是目标状态。 一般是按预定的搜索 策略进行搜索。 没有考虑到问题本身 的特性,这种搜索具 有很大的盲目性,效 率不高,不便于复杂 问题的求解。

启发式搜索 是在搜索过程中加入 了与问题有关的启发 式信息,用于指导搜 索朝着最有希望的方 向前进,加速问题的 求解并找到最优解。

可以看出,这种求解过程呈现出递归过程的性质。求解过程在每
个节点上的检查遵循着递归方式。

递归法是回溯策略的一种最直接的实现方法。

例:四皇后问题
◦ 在4×4方格的棋盘内, 放置四个皇后
◦ 使任意两个皇后不在同一 行、同一列、同一对角线 (斜线)上 ◦ 要求:找出所有的摆法

状态描述:
◦ 单个皇后位置的描述: 用(i,j)表示皇后在第i行j 列
内容: 状态空间的搜索问题。 搜索方式:
◦ 盲目搜索 ◦ 启发式搜索

关键问题: 如何利用知识,尽可能有效地找到问题的解(最 佳解)。

2.1.1 图的概念
◦ 图是节点及连接节点的弧的集合。 ◦ 由方向性的弧连接的图是有向图。 ◦ 节点深度的表示:根节点深度为0,其他节点深度dn+1=dn+1。 ◦ 路径:N个有序节点组成的序列中,若每对相邻节点都表示一条弧,则称该 序列为图中长度为N-1的一条路径。 ◦ 路径耗散值:令 C( ni,nj)为节点 ni到节点nj这段路径(或弧线)的耗散 值,一条路径的耗散值等于这条路径上所有弧线耗散值的总和。路径耗散 值可按如下递归公式计算:C(ni,t)=C(ni,nj)+C(nj,t) ◦ 节点的扩展:操作符(规则)作用到节点(对应于某一状态描述)上,生 成其所有后继节点(新状态),并给出弧线的耗散值(相当于使用规则的 代价),这个过程叫做扩展一个节点。
直接返回一个结果。所有递归程序都必须至少拥有一个基线条件,而且必须确保它 们最终会达到某个基线条件;否则,程序永远运行,直到缺少内存或者栈空间。
int ListLenght(LIST *pList) { if (pList == NULL) return 0; else return ListLength(pList->next)+1; }
((1,2))
((1,1) (2,3))
((1,1) (2,4))
((1,2) (2,4))
((1,1) (2,4) (3,2))
Q () Q Q
((1,1))
((1,2))
((1,1) (2,3))
((1,1) (2,4))
((1,2) (2,4))
((1,2) (2,4) (3,1))
((1,1) (2,4) (3,2))



搜索法的主要任务:确定以何种方式选择规则? 求任一解路的搜索策略: backtracking、 Hill Climbing、 Breadth-first、 Depth-first、Beam Search、 Best-first (A). 求最佳解路的搜索策略:Branch and Bound、 Dynamic Programming、Optimal search (A*). 求与或图解图的搜索策略: AO*、 Minimax、Alpha-beta Pruning、 Heuristic Pruning.
Q () Q Q
((1,1))
((1,2))
Q
((1,1) (2,3))
((1,1) (2,4))
((1,2) (2,4))
((1,2) (2,4) (3,1))
((1,1) (2,4) (3,2))
((1,2) (2,4) (3,1) (4,3))
从前有座山……
从前有座山……
从前有座山……
当前状态
18

例: 二阶Hanoi塔问题 已知三个柱子1,2,3和两个盘子A,B(A比B 小)。初始状态下,A和B依次放在1柱上。目标状 态是A和B依次放在3柱上。条件是每次可移动一个 盘子,盘子上方是空项方可移动,而且任何时候都 不允许大盘在小盘之上。
解: 1)定义问题状态的描述形式 设用SK=(SKA,SKB)表示问题的状态,SKA表示盘子 A所在的柱号,SKB表示盘子B所在的柱号。 2)用所定义的状态描述形式把问题的所有可能的状态 都表示出来,并确定出问题的初始状态集合描述和目标 状态集合描述。本问题所有可能的状态共有9种,如下 所示: 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)
至此,该问题的状态空间(S,F,G)构造完成。
1 ,1
2 ,1
3 ,1
2 ,3
3 ,2
3 ,3
1 ,3
1 ,2
2 ,2
为提供对问题的形式描述,需要:
1.
定义状态空间,包含问题相关对象的各种可能排列。对空间 的定义不必枚举所有状态。 规定一个或多个属于该空间的初始状态。该状态用以描述问 题求解过程开始时的状态。 规定一个或多个属于该空间的目标状态。该状态用以判断是 否得到了问题的解。 规定一组规则。描述可使用的操作或算子。 将待求解问题转换成状态空间描述后,使用控制策略对 规则进行选择性的应用,在问题状态空间内进行搜索,直到

二阶Hanoi塔问题的状态
3)定义一组算符F 定义算符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)
((1,1) (2,4) (3,2))
()
((1,1))
((1,1) (2,3))
((1,1) (2,4))((1,1) (2,来自) (3,2))Q ()
((1,1))
((1,2))
((1,1) (2,3))
((1,1) (2,4))
((1,1) (2,4) (3,2))
Q () Q
((1,1))
图是最直观的描述问题状态空间的工具,属于显
式描述。 图中的节点表示问题的状态,图中的弧表示状 态之间的关系。 初始状态对应待求解问题的已知信息,是图的
根节点。

状态空间法将一个待定问题的求解过程定义为若干
算子与搜索的有机结合体。
◦ 算子定义了对状态的操作,求解的目的在于找出从初始 状态转换为某个(或某些)目标状态的一个(或一组) 操作算子序列。
目标状态g
int factorial (int n) { if (n == 1) { return 1; } else { return n * factorial (n - 1); }
}
只要初始值大于零,factorial函数就能够终止。停止的位置称为基线条件
(base case)。基线条件是递归程序的最底层位置,此位置没有必要再进行操作,


回溯策略是一种尝试状态空间中各种不同路径的技术。
回溯搜索从初始状态出发,不停地、试探地寻找路径直到找到目
标节点或“不可解节点”—“死胡同”。
◦ 找到目标节点,退出搜索,返回解路径。 ◦ 遇到不可解节点时,回溯到路径中最近的父节点上,查看该节点是否还有 其他子节点未被扩展,如有则沿这些子节点继续搜索。
2)算符:引起状态中某些分量发生变化, 从而使问题由一个状态变为另一个状态的操作称为 算符。 3)状态空间:由表示一个问题的全部状态 及一切可用算符构成的集合称为该问题的状态空间。 用三元组表示:(S,F,G),其中S表示问题所 有可能的初始状态的集合、F表示算符集合、G表 示目标状态的集合;状态空间的图示形式称为状态 空间图,其中节点表示状态,有向边表示算符。
相关主题