160 likes | 411 Views
知识表示方法. 状态空间法 问题归约法 谓词逻辑法 语义网络法 框架表示法 剧本表示法 过程表示法 面向对象表示法. 问题的状态图(搜索问题). 将问题用向量 A=(x 0 ,x 1 ,x 2 … ..x 8 ) 表示; X i 为变量, X i 的值就是方格内的数字。那么: 初始状态: S o =(0,2,8,3,4,5,6,7,1) 目标状态: S g =(0,1,2,3,4,5,6,7,8) 移动规则变成状态规则(操作)即:
E N D
知识表示方法 • 状态空间法 • 问题归约法 • 谓词逻辑法 • 语义网络法 • 框架表示法 • 剧本表示法 • 过程表示法 • 面向对象表示法
问题的状态图(搜索问题) • 将问题用向量 A=(x0,x1,x2…..x8) 表示;Xi为变量, Xi的值就是方格内的数字。那么: 初始状态:So=(0,2,8,3,4,5,6,7,1) 目标状态:Sg=(0,1,2,3,4,5,6,7,8) 移动规则变成状态规则(操作)即: r1(x0=0)۸(x2=n)→x0=n۸ x2=0: …… 问题:能否用矩阵表示。
1. 广度优先搜索 广度优先搜索也称为宽度优先搜索,它是一种先生成的节点先扩展的策略。这种搜索策略的搜索过程是:从初始节点开始逐层向下扩展,在第n层节点还没有全部搜索完之前,不进入第n+l层节点的搜索。Open表中的节点总是按进入的先后排序,先进入Open表的节点排在前面,后进入 Open表的节点排在后面。广度优先搜索算法如下:(l)把初始节点S0放入Open表中;(2)如果Open表为空,则问题无解,失败退出;(3)把 Open表的第一个节点取出放入Closed表,并记该节点为n;(4)考察节点n是否为目标节点。若是,则得到问题的解,成功退出;(5)若节点n不可扩展,则转第(2)步;(6)扩展节点 n,将其子节点放入Open表的尾部(队列),并为每一个子节点设置指向父节点的指针,然后转第(2)步。
例:八数码难题。在 3*3 的方格棋盘上,分别放置了标有数字1、2、3、4、5、6、7、8的八张牌,初始状态S0,目标状态Sg,如下图 所示。可以使用的操作有: 空格左移,空格上移,空相右移,空格下移即只允许把位于空格左、上、右、下方的牌移入空格。要求应用广 度优先搜索策略寻找从初始状态到目标状态的解路径。 S0 Sg • 2 8 3 • 4 • 7 6 5 1 2 3 8 4 7 6 5 八数码难题
解:应用广度优先搜索策略,可以在第四级得到解,其搜索树如下图所示。解:应用广度优先搜索策略,可以在第四级得到解,其搜索树如下图所示。 S0 • 2 8 3 • 4 • 7 6 5 1 2 8 3 1 4 7 6 5 • 2 3 • 8 4 • 7 6 5 2 3 4 • 2 8 3 • 4 • 7 6 5 5 • 2 8 3 • 6 4 • 7 5 11 12 13 8 9 10 8 3 2 1 4 7 6 5 2 8 3 7 1 4 6 5 • 2 3 • 8 4 • 7 6 5 • 2 3 • 8 4 • 7 6 5 • 2 8 • 4 3 • 7 6 5 • 2 8 3 • 4 5 • 7 6 • 2 8 3 • 6 4 • 7 5 • 2 8 3 • 6 4 • 7 5 6 7 21 8 3 2 1 4 7 6 5 2 8 3 7 1 4 6 5 1 2 3 8 4 7 6 5 • 2 3 4 • 8 • 7 6 5 • 2 8 • 4 3 • 7 6 5 • 2 8 3 • 4 5 • 7 6 2 8 3 6 4 1 7 5 • 2 8 3 • 6 • 7 5 4 14 15 8 3 2 1 4 7 6 5 8 1 3 2 4 7 6 5 2 8 3 7 4 6 1 5 2 8 3 7 1 4 6 5 1 2 3 8 4 7 6 5 1 2 3 7 8 4 6 5 22 23 24 25 26 27 Sg 八数码难题的广度优先搜索 由图可以看出,解的路径是S0 →3 → 8 → 16 → 26(Sg)
OPEN CLOSED S L O M F2 P Q N F3 F4 F1 广度优先搜索 1. S 2. S 示例: 3. LO S 4. O SL 5. OMF2 SL 6. MF2 SLO 7. MF2PQ SLO 8. F2PQ SLOM 9. F2PQN SLOM 10. PQN SLOMF2 11. QN SLOMF2P Sg 12. QNF3 SLOMF2P 13. NF3 SLOMF2PQ 14. NF3F4 SLOMF2PQ 15. F3F4 SLOMF2PQN Sg 16.F3F4F1 SLOMF2PQN
优点: • 广度优先搜索是一种完备策略,即只要问题 • 有解,它就一定可以找到解。 • 广度优先搜索找到的解,一定是路径最短的解。 • 缺点: • 盲目性较大,尤其是当目标节点距初始节点较远 • 时,将产生许多无用的节点,因此其搜索效率较 • 低。
2.深度优先搜索 深度优先搜索是一种后生成的节点先扩展的策略。这种搜索策略的搜索过程是:从初始节点开始,在其子节点中选择一个最新生成的节点进行考察,如果该子节点不是目标节点且可以扩展,则扩展该子节点,然后再在此子节点的子节点中选择一个最新生成的节点进行考察,依此向下搜索,直到某个子节点既不是目标节点,又不能继续扩展时,才选择其兄弟节点进行考察。在深度优先搜索中,Open表是一种栈结构,最先进入的节点排在最后面,最后进入的节点排在最前面。
深度优先搜索算法如下:(l)把初始节点S0放人Open表中;(2)如果 Open表为空,则问题无解,失败退出;(3)把 Open表的第一个节点取出放入 Closed表,并记该节点为 n;(4)考察节点n是否为目标节点。若是,则得到问题的解,成功退出;(5)若节点n不可扩展,则转第(2)步;(6)扩展节点n,将其子节点放入Open表的首部,并为每一个子节点设置指向父节点的指针,然后转第(2)步。 从以上过程可以看出,深度优先搜索和广度优先搜索的唯一区别是节点在Open表中的排列顺序不同。广度优先搜索是把最新生成的节点放在OPen表的尾部,而深度优先搜索则是把最新生成的节点放在OPen表的首部。
2 8 3 • 4 • 7 6 5 S0 1 2 2 8 3 1 4 7 6 5 • 3 • 1 8 4 • 7 6 5 2 8 3 1 4 7 6 5 2 8 3 1 6 4 7 5 3 2 8 3 1 6 4 7 5 2 8 3 1 6 4 7 5 2 8 3 1 6 7 5 4 4 • 2 8 3 • 6 • 7 5 4 2 8 1 6 3 7 5 4 5 • 8 • 1 6 3 • 7 5 4 6 例:八数码难题。要求用深度优先搜索策略寻找从初始状态到目标状态的解路径。 解:应用深度优先搜索策略,其部分搜索树如右图所示。在右图中,由于问题的目标尚未达到,因此搜索还需要继续进行下去。 从深度优先搜索的算法可以看出,搜索一旦进入某个分支,就将沿着这个分支一直进行下去,如果目标恰好在这个分支上,则它可以很快找到解。但是,如果目标不在这个分支上,且该分支是一个无穷分支,则搜索过程就不可能找到解。因此,深度优先搜索是一种不完备策略,即使问题有解,它也不一定能够找到解。此外,即使在能找到解的情况下,按深度优先找到的解也不一定是路径最短的解。 八数码难题的深度优先搜索
3.有界深度优先搜索 为了弥补上述两种策略的缺点,一种较好的折衷办法是在深度优先策略中引入深度限制, 即采用有界深度优先搜索。有界深度优先搜索过程总体上按深度优先策略进行,但对搜索深度需要给出一个深度限制dm,当搜索深度达到了dm,但还没有找到目标时,就停止该分支的搜索,换到另外一个分支进行搜索。 当给定的深度限制为dm时,有界深度优先搜索算法如下:(1)把初始节点 S0放入 Open表中,置 S0的深度 d(S0)= 0;(2)如果Open表为空,则问题无解,失败退出;(3)把Open表的第一个节点取出放入Closed表,并记该节点为n;(4)考察节点n是否为目标节点。若是,则得到问题的解,成功退出;(5)如果节点n的深度d(n)=dm,则转第(2)步;(6)若节点n不可扩展,则转第(2)步;(7)扩展节点 n,将其子节点放入 Open表的首部,并为每一个子节点设置指向父节点的指针,然后转第(2)步。
例:八数码难题。设深度限制成dm=4,要求用有界深度优先搜索策略寻找从初始状态到目标状态的解路径。 解:其搜索树如下图所示,解路径为: So:l→11 → 12 →13 → 14:Sg S0 • 2 8 3 • 4 • 7 6 5 1 2 8 3 1 4 7 6 5 • 2 3 • 8 4 • 7 6 5 2 11 • 2 8 3 • 4 • 7 6 5 • 2 8 3 • 6 4 • 7 5 12 8 3 2 1 4 7 6 5 2 8 3 7 1 4 6 5 • 2 3 • 8 4 • 7 6 5 • 2 3 • 8 4 • 7 6 5 • 2 8 • 4 3 • 7 6 5 • 2 8 3 • 4 5 • 7 6 • 2 8 3 • 6 4 • 7 5 • 2 8 3 • 6 4 • 7 5 3 7 13 8 3 2 1 4 7 6 5 2 8 3 7 1 4 6 5 1 2 3 8 4 7 6 5 • 2 3 4 • 8 • 7 6 5 • 2 8 • 4 3 • 7 6 5 • 2 8 3 • 4 5 • 7 6 2 8 3 6 4 1 7 5 • 2 8 3 • 6 • 7 5 4 4 8 8 3 2 1 4 7 6 5 8 1 3 2 4 7 6 5 2 8 3 7 4 6 1 5 2 8 3 7 1 4 6 5 1 2 3 8 4 7 6 5 1 2 3 7 8 4 6 5 八数码难题的有界深度优先搜索 5 6 9 10 14 Sg
OPEN CLOSED S L O M F2 P Q N F3 F4 F1 有界深度优先搜索 1. S 示例: 2. S 3. LO S 4. O SL 5. MF2O SL 6. F2O SLM 7. NF2O SLM 8. F2O SLMN 9. F1F2O SLMN Sg 10. F2O SLMNF1 深度dm=4 11. O SLMNF1F2 12. SLMNF1F2O 13. PQ SLMNF1F2O Sg 14. Q SLMNF1F2OP 15. F3Q SLMNF1F2OP
实例:十五数码难题 如何把初始棋局变换为目标棋局?
最直接的求解方法:尝试各种不同的走步,直到偶然得到目标棋局为止,即试探搜索。最直接的求解方法:尝试各种不同的走步,直到偶然得到目标棋局为止,即试探搜索。
S0 Sg • 2 8 3 • 4 • 7 6 5 1 2 3 8 4 7 6 5 八数码难题 习题 编写程序,采用宽度优先搜索或有界深度优先搜索实现八数码难题。