搜索策略
--盲目搜索
-----*广度优先搜索
-----*深度优先搜索
-----*有界优先搜索
-----*代价树的广度优先搜索
-----*代价树的深度优先搜索
--启发式搜索
-----*局部择优搜索
-----*全部择优搜索
盲目搜索适用:
--搜索按规定路径进行,无启发信息
--状态空间图为树状结构
 
1 状态空间的一般搜索过程
(1)基本思想
<1>初始状态作为当前状态
<2>选择适用的算符对其进行操作,生成一组子状态
<3>检查目标状态是否在其中出现,若出现,搜索成功,找到问题的解,若不出现,按某种搜索策略从已生成的状态中再选一个状态作为当前状态
<4>重复<1>-<3>,直到目标状态出现,或无可用的算符为止

(2)搜索过程
OPEN表:用于存放刚生成的节点
CLOSE表:用于存放将要扩展或已扩展的节点
<1>把初始节点S0放入OPEN表,并建立只含S0的图,记为G
OPEN:=S0, G:=G0(G0=S0)
<2>检查OPEN表是否为空,若为空则问题无解,退出
LOOP: IF(OPEN)=( )THEN EXIT(FAIL)
<3>把OPEN表的第一个节点取出放入CLOSE表,记该节点为节点n
n:=FIRST(OPEN),REMOVE(n,OPEN), ADD(n,CLOSE)
<4> 观察节点n是否为目标节点,若是,则求得问题的解,退出
IF GOAL(n) THEN EXIT(SUCCESS)
<5> 扩展节点n,生成一组子节点。把其中不是节点n先辈的那些子节点记作集合M,并把这些节点作为节点n的子节点加入G中。 EXPAND(n)->M(mi),G:=ADD(mi,G)
<6>针对M中子节点的不同情况,分别进行如下处理
对于那些未曾在G中出现过的M成员设置一个指向父节点(n)的指针,并把它放入OPEN表
对于那些先前已在G中出现过的M成员,确定是否要修改指向父节点的指针
对于那些先前已在G中出现,并且已经扩展了的M成员,确定是否需要修改其后继结点指向父节点的指针 <7>按某种搜索策略对OPEN表中的节点进行排序
<8>转第<2>步 GO LOOP

点击看大图及详解