3.3-盲目搜索(2)解析
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 ()
实验二 盲目搜索
实验二搜索问题形式化和无信息搜索(2学时)一实验目的熟悉和掌握搜索问题形式化方法与步骤,使用Python语言实现搜索问题形式化;掌握基本无信息搜索算法,实现算法并验证。
二实验原理搜索问题形式化即把要解决的问题描述为搜索问题,主要包括确定状态空间,初始状态,后继函数,目标测试及耗散等5方面内容;对于搜索问题可以应用通用的搜索算法求解,主要包括无信息(盲目)搜索和有信息搜索两大类,基本的无信息搜索有广度优先搜索和深度优先搜索。
三实验条件1 Python解释器,及IDLE等程序开发调试环境。
2 本实验所提供的几个Python文件,包括:mazeworld.py 用于构造、编辑、显示迷宫问题,以及对迷宫进行简单搜索;search.py 编写搜索算法代码。
实验要求的所有搜索Agent将通过改写本文件中类SearchAgent的solve方法来实现;util.py 实现搜索算法可能使用到的一些数据结构;eightpuzzle.py 用于构造、编辑、显示8数码问题;maze1.txt maze2.txt maze3.txt 迷宫文本文件。
四实验内容1 搜索问题形式化2 广度优先搜索3 深度优先搜索五实验步骤1 建立文件夹,将实验提供的4个Python文件和3个文本文件拷到文件夹中,注意整个文件夹路径不能有中文字符2 构造、编辑、显示迷宫问题运行Python IDLE,在>>>提示符下输入import mazeworld此时会出现错误提示,分析为什么出错#之所以会出现错误,是因为在sys的导入路径(path)中没有mazeworld.py文件的路径,这是用户自定#义的的路径,需要手工导入,即使用下面的方法import syssys.path['D:\\Python27\\Lib\\idlelib', 'C:\\WINDOWS\\SYSTEM32\\python27.zip','D:\\Python27\\DLLs', 'D:\\Python27\\lib', 'D:\\Python27\\lib\\plat-win','D:\\Python27\\lib\\lib-tk','D:\\Python27','D:\\Python27\\lib\\site-packages']#这里是你sys初始导入路径>>> sys.path.append('D:\QQPCmgr\Desktop\BlindSearchProject')#这里是你sys新增的导入路径>>> sys.path['D:\\Python27\\Lib\\idlelib', 'C:\\WINDOWS\\SYSTEM32\\python27.zip','D:\\Python27\\DLLs', 'D:\\Python27\\lib', 'D:\\Python27\\lib\\plat-win','D:\\Python27\\lib\\lib-tk', 'D:\\Python27','D:\\Python27\\lib\\site-packages', 'D:\\QQPCmgr\\Desktop\\BlindSearchProject']#新增导入路径后确认路径导入成功>>> import mazeworld此时,不再有出错提示,成功,分析成功原因#由于此时系统具有了mazeworld.py文件所在文件夹的路径,故当使用import命令时,系统会自动来到#这个文件夹进查找,当然就可找到而不会出错了#同时还有可能是因为版本问题出现报错,因为python2和python3要求的输出语言的代码不同#python2系列可以支持 print “xxxx”,python系列需要使用print("xxx") simpleMaze = mazeworld.Maze([['#', ' ', ' ', ' '], ['~', 'S', ' ', 'E']])print simpleMaze理解迷宫的表现形式#输出的迷宫为- - - -|# ||~ S E|- - - -#迷宫最典型的表现形式便是矩阵,而此处的迷宫也同样如此。
三章状态空间搜索策略
第三章 状态空间搜索策略
第三章 状态空间搜索策略
算法3.2 状态空间图的宽度优先搜索算法
(1)把初始节点S0放人OPEN表中。
(2)如果OPEN表是空表,则没有解,失败退出;否则继续。
第三章 状态空间搜索策略
3.1.2 搜索的种类
搜索分为盲目搜索和启发式搜索两种。
盲目搜索:又称无信息搜索。即在搜索过程中,只按预先规 定的搜索控制策略进行搜索。问题本身的特性对搜索控制策 略没有任何影响,搜索带有盲目性,效率不高,只用于解决 比较简单的问题。
启发式搜索:又称有信息搜索。指在搜索求解过程中,根据 问题本身的特性来不断地改变或调整搜索的方向,使搜索朝 着最有希望的方向前进,加速问题的求解,并找到最优解。 搜索求解的效率高,易于求解复杂的问题,但抽取出问题的 相关特性和信息难。
初始棋局目标棋局第三章状态空间搜索策略状态空间图是一类问题的抽象表示有许多智力问题如hanoi塔问题旅行商问题八皇后问题农夫过河问题等和实际问题如路径规划定理证明演绎推理机器人行动规划等都可以归结为在状态空间图中寻找目标或路径的问题
第三章 状态空间搜索策略
第三章 状态空间搜索策略
3.1 搜索的概念及种类 3.2 盲目搜索策略 3.3 启发式搜索策略
第三章 状态空间搜索策略
3.1 搜索的概念及种类
3.1.1 搜索的概念
现实世界中的大多数问题都是非结构化问题,一般不存在现 成的求解方法来求解这样的问题,而只能利用已有的知识一 步一步地摸索着前进。
搜索:是一种求解问题的方法,是寻找从问题初始事实到最 终答案的推理路线的一种过程。
人工智能及其应用-状态空间的盲目搜索
3
3.2.1 状态空间的盲目搜索
广度优先搜索(2/3)
例3.5 八数码难题。在3×3的方格棋盘上,分别放置了表有数字1、 2、3、4、5、6、7、8的八张牌,初始状态S0,目标状态Sg,如下图 所示。可以使用的操作有
空格左移,空格上移,空格右移,空格下移
即只允许把位于空格左、上、右、下方的牌移入空格。要求应用广度 优先搜索策略寻找从初始状态到目标状态的解路径。
23 4 18 765
27
28 14 3 765
283 14 5 76
283 64
1 75
12 3
12 3
8 7
6
4 5
Sg
78 4 65
283 1 64 75
283 16 754
5
3.2.1 状态空间的盲目搜索
深度优先搜索
深度优先搜索算法和广度优先搜索算法的步骤基本相同,它 们之间的主要差别在于Open表中的节点排序不同。在深度优先 搜索算法中,最后进人Open表的节点总是排在最前面,即后生 成的节点先扩展。
个子节点设置指向父节点的指针。按如下公式: g(ni)=g (n) +c (n , ni) i=1,2,...
计算各子结点的代价,并根据各子结点的代价对Open表中的全部结点按由小到大的 顺序排序。然后转第(2)步。
8
3.2.2 代价树的盲目搜索
代价树的代价及广度优先搜索(2/2)
例3.6 城市交通问题。设有5个城市,它们之间的交通线路如左图所示,图中的数 字表示两个城市之间的交通费用,即代价。用代价树的广度优先搜索,求从A市出 发到E市,费用最小的交通路线。
搜索算法 (1)把初始节点S0放入Open表中; (2)如果Open表为空,则问题无解,失败退出; (3)把Open表的第一个节点取出放入Closed表,并记该节点为n; (4)考察n是否为目标节点。若是,则得到问题的解,成功退出; (5)若节点n不可扩展,则转第(2)步; (6)扩展节点n,将其子节点放入Open表的尾部,并为每一个子节
盲目搜索与探索
24
3.1.3 深度优先搜索
2020/6/26
25
有界深度优先搜索
定义节点的深度如下: (1) 起始节点(即根节点)的深度为0。 (2) 任何其它节点的深度等于其父辈节点深度加上1。
• 对于许多问题,其状态空间搜索树的深度可能为无限深, 或者可能至少要比某个可接受的解答序列的已知深度上限 还要深。为了避免考虑太长的路径(防止搜索过程沿着无 益的路径扩展下去),往往给出一个节点扩展的最大深 度——深度界限。任何节点如果达到了深度界限,那么都 将把它们作为没有后继节点处理。值得说明的是,即使应 用了深度界限的规定,所求得的解答路径并不一定就是最 短的路径。
失败 成功
一、盲目搜索
盲目搜索又叫做无信息搜索,一般只适用于求解比较简 单的问题。主要包括宽度优先搜索、等深度优先搜索等。 特点:
1)搜索按规定的路线进行,不使用与问题有关的启发性 信息。
2)适用于其状态空间图是树状结构的一类问题。
13
1、 宽度优先搜索
定义:如果搜索是以接近起始节点的程度依次扩展节点的, 那么这种搜索就叫做宽度优先搜索(breadth-first search)。
2020/6/26
29
八数码难题的深度优先搜索树
2020/6/26
30
二、 启发式搜索
盲目搜索的不足:
效率低,耗费过多的计算空间与时间。 宽度优先搜索、深度优先搜索,或等代价搜索算法,是按事
先规定的路线进行搜索,或按已经付出的代价决定下一步 要搜索的节点,其主要差别是OPEN表中待扩展节点的顺 序问题。如果找到一种方法用于排列待扩展节点的顺序, 即选择最有希望的节点加以扩展,那么,搜索效率将会大 为提高。
基本思想:
第3章(搜索推理技术1-图盲目搜索)
①、起 始节点 ( 即根
节点)的深度为0。
②、任何其它节点的
深度等于其父辈
节点深度加上1。
深度优先搜索的基本
思路:
先扩展最深的节点 。
当出现没有后继节点
时,换到旁边的次深
节点
后生成的节点画在左边
含有深度界限的深度优先搜索算法:
① 把起始节点 S 放到未扩展节点的 OPEN 表中。 如果此节点为一目标节点,则得到解 ② 如果 OPEN 为一空表,则无解、失败退出
状态:长度为9的一维数组
(q1 , q2 , … , q9 )
其中,qi 取 0 , 1 , … , 8 个数,0 表示空格,且取值
互不相同
如果记空格的位置为P,这时空格的移动规则是: 1 4 7 2 5 8 3 6 9 数字表示位置 1 2 3 4 5 6 7 8 9 P-3
P-1
P
P+1
P+3
起始节点的父节点标志和操作符:
不作记录或记录为负
搜索过程(按照程序运行方式)
① 起始节点放到OPEN表
2 8 3 1 0 4
2 8 3 1 4 7 6 5 7 6 5
② OPEN不为空,继续
③ 将第一个节点 n 从 OPEN 表中移出,并放到 CLOSED表中 OPEN表
CLOSED表 1 0 0 2 8
13
14
1
4
2
8
8
3
3
0
1
2
4
1
5
4
7
7
0
6
6
5
1 8
7
2
3 4
14 15 15
16 16
3 2 4
6第六讲 第三章(盲目、启发搜索)
二、有序搜索
用估价函数 f 来排列OPEN表上的节点。
应用某个算法选择OPEN表上具有最小f 值的节点作为
二、宽度优先搜索
例3.2 八数码问题 操作规定: 允许空格四周上、下、左、右的数码 块移入空格中,不许斜方向移动,不许返回先辈 结点。
1 2 3 8 5 7 4 6
1
4
1 3 8 2 5 7 4 6
2
1 2 3 8 4 5 7 6
3
1 2 3 8 5 7 4 6
5
1 2 3 8 5 7 4 6
深度优先搜索的特点
OPEN表为堆栈,操作是后进先出(LIFO) 深度优先又称纵向搜索。 一般不容易保证找到最优解(如下图所示) 防止搜索过程沿着无益的路径扩展下去,往往 给出一个节点扩展的最大深度——深度界限。
2、有界深度优先搜索
引入搜索深度限制值d,使深度优先搜索具有完备性 。 (1)深度界限的选择很重要 d若太小,则达不到解的深度,得不到解;若太大,既 浪费了计算机的存储空间与时间,降低了搜索效率。由于 解的路径长度事先难以预料,要恰当地给出d的值是比较 困难的。 (2)即使能求出解,它也不一定是最优解。 例3.3:设定搜索深度限制d=5的八数码问题。
4. 搜索过程框图
S0放入OPEN表 是 OPEN表空? 否 将OPEN表中第一个节点(n) 移至CLOSE表 否 n是目标节点? 扩展节点n,把n的后继节点放入 OPEN表末端,提供指向 节点n的指针 修改指针方针,重排OPEN表
失败
是
成功
一、图搜索策略(Graph Search) 5.图搜索方法分析:
3.2 启发式搜索
盲目搜索的不足:效率低,耗费空间与时间。 启发式搜索:利用问题本身特性信息(启发信息) 指导搜索过程。是有序搜索。 一、启发式搜索策略 启发式信息主要用途:
人工智能课件-搜索推理技术
1
3.4 消解原理
(4) (x){~P(x)∨{(y)[~P(y)∨P(f(x,y))]
∧[Q(x,g(x))∧~P(g(x))]}}
式中,w=g(x)為一Skolem函數。
(4) 消去存在量詞
以Skolem函數代替存在量詞內的約束變數,
❖ 實質
❖ 把一棵根部有NIL的反演樹變換為根部帶有回 答 語句的一棵證明樹。
1
3.5 規則演繹系統
—— g是g*的估計 ,h是h*的估計
❖ A*演算法的定義:
定義1 在GRAPHSEARCH過程中,如果第8步的重排OPEN表
是依據f(x)=g(x)+h(x)進行的,則稱該過程為A演算法。
定義2 在A演算法中,如果對所有的x存在h(x)≤h*(x),則稱h(x)
為h*(x)的下界,它表示某種偏於保守的估計。
子句(4) {a/x,b/y}
子句(7) ~M(b)
子句(5)
圖3.12 儲蓄問題反演樹
NIL
1
3.4 消解原理
❖ 反演求解過程 ❖從反演樹求取答案步驟
❖把由目標公式的否定產生的每個子句添加到目 標公式否定之否定的子句中去。
❖按照反演樹,執行和以前相同的消解,直至在 根部得到某個子句止。
❖用根部的子句作為一個回答語句。
❖ 種類:有序搜索、A*演算法等
3.3.1 啟發式搜索策略和估價函數
❖盲目搜索可能帶來組合爆炸 ❖啟發式資訊
用來加速搜索過程的有關問題領域的特徵資訊。
1
3.3 啟發式搜索
❖ 估價函數 為獲得某些節點“希望”的啟發資訊,提供一
第3章搜索推理技术3与或树搜索
OPEN= { 2,3 } CLOSED= { 1 }
第二大循环(3、4、5步): 3、从OPEN表中取出节点2,并送到CLOSED表 4、扩展节点2,生成后继节点4、5,并送到OPEN
表的末端 5、无叶节点,转到3步
OPEN= { 3, 4, 5 } CLOSED= { 1, 2 }
1、没有后裔的非终叶节点是不可解节点
2、如果某一个非终叶节点含有“或”后继节点, 那么,只要当所有的后继节点都不可解时,这一 个非终叶节点才是不可解的
3、如果某一个非终叶节点含有“与”后继节点, 那么,只要有一个后继节点是不可解的,这一个 非终叶节点就是不可解的
可解标志过程与不可解标志过程:
根据可解与不可解节点的递归定义,用递归的方 式作用于某一个与或图,以标出所有的可解节点 与不可解节点
注意
由于深度限制,深度优先搜索算法有可能找不 到解
例: 深度界限为4
√
1
√
√
2
6
√
3
ⅩA 7 √ C
Ⅹ
4
√
5
√
8
t√
ⅩB
t
t
t
t
√
√
√
√
注:后生成的节点画在左边
课堂练习:用宽度和深度优先搜索算法找出解树
提示:对于宽度优先搜索,先生成的节点画在左; 对于深度优先搜索,后生成的节点画在左
2 4
算法结束的条件:
➢ 若初始节点被标志为可解节点,算法成 功结束(有解)
➢ 若起始节点被标志为不可解节点,则搜 索失败结束(无解)
与或图的解图: 由最少的可解节点所构成的子图,这些节 点能够使问题的起始节点是可解的
人工智能ch3 盲目搜索
3.1 一般搜索过程
三、几点说明
代价树的宽度优先搜索算法
3.3 宽度优先搜索
3.4 代价树的宽度优先搜索算法
例:城市交通问题。 设有5个城市, 它们之间的交 通路线如图所示,图中的数字 表示两个城市之间的交通费用,
即代价。
求从A市出发到E市,费用最 小的交通路线。 结论:在搜索树中给每条边 都标上代价。
3.4 代价树的宽度优先搜索
第3章 盲目搜索
3.1 一般搜索过程
3.2 回溯策略 3.3 宽度(广度)优先搜索 3.4 代价树的宽度优先搜索 3.5 深度优先搜索
搜索、推理与人工智能
搜索是人工智能中的一个基本问题,是推理不可分 割的一部分,它直接关系到智能系统的性能与运行效率, 尼尔逊把它列为人工智能研究中的核心问题之一。
搜索的基本问题:
一、代价树生成方法
从初始节点A开始,把与A直接 相邻的节点作为子节点。 对其他节点作相同处理。 若一个节点已是某节点的直系 先辈节点,就不能再作为该节点的 子节点。 除 A 外,其它节点可能在代价 树中多次出现。为便于区分,用下 标1, 2, ……标出。
3.4 代价树的宽度优先搜索
二、代价的定义
3.2 回溯策略
回溯策略的几点说明
各种合适的推理规则或其他问题求解操作都可以应用于 PS,得到一些新的子节点有序集; 为避免死循环,若有序集中的子节点已在 3张表的任一表 中,说明它已被搜索过,不需要再考虑;
3.3-启发式搜索(2)
8
例1:水壶问题
给定4L和3L的水壶各一个,水壶上没有刻 度,可以向水壶中加水。如何在4L的壶中 准确地得到2L水?
这里:用(x,y)—4L壶里的水有xL,3L壶里的水 有yL,n表示搜索空间中的任一节点。 则给出下面的启发式函数:
人工智能 丁世飞
9
例1:水壶问题
h(n) = 2 =4 =8 =10 如果0< x < 4并且0< y < 3 如果0< x < 4或者0< y < 3 如果 x = 0并且 y = 3 或者 x =4 并且 y= 0 如果 x = 0 并且 y = 0 或者 x1 引言 3.2 盲目搜索 √3.3 启发式搜索(2) 启发式搜索(2)
人工智能 丁世飞 1
通用图搜索算法( 算法 算法) 3.3.3 通用图搜索算法(A算法)
图搜索算法只记录状态空间中那些被搜索 过的状态,它们组成一个搜索图 搜索图G 过的状态,它们组成一个搜索图G。 搜索图G由两种节点组成: 搜索图G由两种节点组成:
人工智能 丁世飞 17
A*算法 算法
有了g*(n) 和h*(n) 的定义,如果对最好优先的 的定义,如果对最好优先的 有了 启发式搜索算法中的 中的g(n)和h(n)做如下的限制: 做如下的限制: 启发式搜索算法中的 和 做如下的限制
人工智能 丁世飞
3
图搜索算法( 算法)(P78:算法3.8) 图搜索算法(A算法)(P78:算法3.8) 算法
Procedure Graph-Search Begin 建立一个只含有初始节点S 的搜索图 , 放入OPEN表;计算 0)=g(S0)+h(S0); 建立一个只含有初始节点 0的搜索图G,把S0放入 表 计算f(S 假定初始时CLOSED表为空。 表为空。 假定初始时 表为空 While OPEN 表不空 do Begin 表中取出f值最小的节点 第一节点),并放入 表中.假设该节点 从OPEN表中取出 值最小的节点 第一节点 并放入 表中取出 值最小的节点(第一节点 并放入CLOSED表中 假设该节点 表中 的编号为n。 的编号为 。 If n是目标 则停止 返回 并根据 的反向指针指出的从初始节点到 的路径。 是目标,则停止 返回n,并根据 的反向指针指出的从初始节点到n的路径 是目标 则停止;返回 并根据n的反向指针指出的从初始节点到 的路径。 Else do Begin (1) 生成 的子节点集合 i},把mI作为 的后继节点加入到 中,并计算 生成n的子节点集合 的子节点集合{m 把 作为n的后继节点加入到 的后继节点加入到G中 并计算 f(mi)。 。 (2) If mi未曾在 中出现过 即未曾在 未曾在G中出现过 即未曾在OPEN和CLOSED表中出现过 中出现过(即未曾在 表中出现过),then 将 和 表中出现过 它们配上刚计算过的f值 设置返回到 的指针,并把它们放入 设置返回到n的指针 并把它们放入OPEN表中。 表中。 它们配上刚计算过的 值,设置返回到 的指针 并把它们放入 表中
人工智能 一般搜索原理---盲目搜索
人 工 智 能 及 其 应 用
第六讲一般搜索原理--盲目搜索
搜索:从问题表示到问题解决的求解过程. 一.盲目搜索:人为给定搜索顺序的无信息搜索. 1.宽度优先搜索 2.深度优先搜索 3.等代价搜索 二.启发式搜索:根据检测到的信息决定搜索顺序 的有信息搜索. 1.有序搜索,2.A算法,3.A*算法
第六讲一般搜索原理--盲目搜索
算法
(1)把起始节点放到OPEN表中,若该节点为一目标节点,则求得一个 解,退出.否则,令g(s)=0. (2)如果OPEN表是一个空表,则没有解,失败退出.否则继续. (3)把第一个节点i,其g(i)为最小,从OPEN 表中移出到CLOSED表中. (4)扩展节点i.如果没有后继节点,则goto(2). (5)把i的所有后继节点j,计算g(j)=g(i)+C(i,j),放到OPEN表末端,并 提供从这些后继节点回到i的指针. (6)如果i的任一后继节点是目标,则成功退出,否则,goto (2).
2 8 3 7 1 4 6 5
2 3 1 8 4 7 6 5
2 3 1 8 4 7 6 5
2 8 3 1 6 4 7 5
2 8 3 1 6 4 7 5
2 8 1 4 3 7 6 5
2 8 3 1 4 5 7 6
宽度优先搜索示意图
第六讲一般搜索原理--盲目搜索
2.深度优先搜索 扩展最新产生的节点,搜索沿着状态空间某条 单一的路径从起始节点向下搜索,结果使得只有 搜索到一个没有后裔的状态时,才考虑另一条替 代的路径. 问题:当搜索深度很深时,需要控制.
第六讲一般搜索原理--盲目搜索
算法
(1)把起始节点放到OPEN表中,若该节点为一目标节点,则求得一个 解,退出. (2)如果OPEN表是一个空表,则没有解,失败退出.否则继续. (3)把第一个节点N从OPEN 表中移出到CLOSED表中. (4)如果节点N的深度等于最大深度,则goto(2). (5)扩展节点N.把N的所有后继节点放到OPEN表前端,并提供从这些 后继节点回到N的指针.如果没有后继节点,则goto(2). (6)如果N的任一后继节点是目标,则成功退出,否则,goto (2).
3.3-盲目搜索(2)解析
S15(2,4)
S16(3,4) S17(4,4)
死
S11(2,1) S12(3,1)
死 死 深度限制 解
图3.11 卒子穿阵的深度优先搜索树
2018/12/18
人工智能 丁世飞
10
DFS空间复杂性
深度优先搜索对内存的需求是比较适中的。
它只需要保存从根到叶的单条路径,包括在 这条路径上每个节点的未扩展的兄弟节点。
2018/12/18 人工智能 丁世飞 23
迭代加深搜索算法
Procedure Iterative-deepening Begin (1)设置当前深度限制=1; (2)把初始节点压入栈,并设置栈顶指针; (3)While栈不空并且深度在给定的深度限制之内do Begin 弹出栈顶元素; If栈顶元素=goal,返回并结束; Else以任意的顺序把栈顶元素的子女压入栈中; End End while (4)深度限制加1,并返回2; End.
2018/12/18 人工智能 丁世飞 18
搜索策略说明:
(2)深度限制dm不能太大。
当dm太大时,搜索过程会产生过多的无用节 点,既浪费了计算机资源,又降低了搜索效率。 有界深度搜索的时间和空间复杂度与深度优先
搜索类似,空间是线性复杂度为O(bdm),时间是
指数复杂度为O(bdm)。
2018/12/18
332332深度优先搜索深度优先搜索20171229人工智能丁世飞深度优先搜索生成节点并与目标节点进行比较是沿着树的最大深度方向进行的只有当上次访问的节点不是目标节点而且没有其他节点可以生成的时候才转到上次访问节点的父节转移到父节点后该算法会搜索父节点的其他的子节点
第3章 搜索策略
3.1 引言 3.2 基于状态空间图的搜索技术(1)(2)
盲目搜索启发式搜索讲解学习
从初始节点S开始,在其子节点中选择一个节点进行 考察,若不是目标节点,则再在该子节点中选择一个节 点进行考察,一直如此向下搜索。当到达某个子节点, 且该子节点既不是目标节点又不能继续扩展时,才选择 其兄弟节点进行考察。
2020/6/26
21
深度优先搜索示意图
2020/6/26Hale Waihona Puke 223、深度优先搜索
2020/6/26
36
3、 有序搜索
尼尔逊(Nilsson)曾提出一个有序搜索的基本算法。 估价函数f按照如下方法确定:
一个节点希望程度越大,其f值就越小。被选为扩展的节 点,是估价函数最小的节点。
2020/6/26
37
有序状态空间搜索算法
(1) 把起始节点S放到OPEN表中,计算f(S)并把其值与节点S 联系起来。
• 在用状态空间图来表示问题时,对问题 的求解就是求出从初始节点到目标节点 的路径。
图搜索策略
1. 图搜索的定义——一种计算机在状态图 中寻找路径的方法。
2.CLOSED表的引入
CLOSED表 (记录扩展过的节点)
编号 节点号 父节点号
3. OPEN表的引入
OPEN表 (记录待扩展的节点)
节点号 父节点号
失败 成功
一、盲目搜索
盲目搜索又叫做无信息搜索,一般只适用于求解比较简 单的问题。主要包括宽度优先搜索、等深度优先搜索等。 特点:
1)搜索按规定的路线进行,不使用与问题有关的启发性 信息。
2)适用于其状态空间图是树状结构的一类问题。
12
1、 宽度优先搜索
定义:如果搜索是以接近起始节点的程度依次扩展节点的, 那么这种搜索就叫做宽度优先搜索(breadth-first search)。
实验一、盲目搜索算法
实验一:盲目搜索算法一、实验目的掌握盲目搜索算法之一的宽度优先搜索求解算法的基本思想。
对于宽度优先搜索算法基本过程,算法分析有一个清晰的思路,了解宽度优先搜索算法在实际生活中的应用。
二、实验环境PC机一台,VC++6.0三、实验原理宽度优先搜索算法(又称广度优先搜索)是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型。
Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽度优先搜索类似的思想。
其别名又叫BFS,属于一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。
同时,宽度优先搜索算法是连通图的一种遍历策略。
因为它的思想是从一个顶点V0开始,辐射状地优先遍历其周围较广的区域,故得名。
其基本思想是:(1) 把起始节点放到OPEN表中(如果该起始节点为一目标节点,则求得一个解答)。
(2) 如果OPEN是个空表,则没有解,失败退出;否则继续。
(3) 把第一个节点(节点n)从OPEN表移出,并把它放入CLOSED扩展节点表中。
(4) 扩展节点n。
如果没有后继节点,则转向上述第(2)步。
(5) 把n的所有后继节点放到OPEN表的末端,并提供从这些后继节点回到n的指针。
(6) 如果n的任一个后继节点是个目标节点,则找到一个解答,成功退出;否则转向第(2)步。
宽度优先搜索示意图和宽度优先算法流程图如下图1和图2所示:图1、宽度优先搜索示意图图2、宽度优先算法流程图四、实验数据及步骤这部分内容是通过一个实例来对宽度优先算法进行一个演示,分析其思想。
问题描述了《迷宫问题》的出路求解办法。
定义一个二维数组:int maze[5][5] = {0, 1, 0, 0, 0,0, 1, 0, 1, 0,0, 0, 0, 0, 0,0, 1, 1, 1, 0,0, 0, 0, 1, 0,};它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。
人工智能课程习题与部分解答
⼈⼯智能课程习题与部分解答《⼈⼯智能》课程习题与部分解答第1章绪论1.1 什么是⼈⼯智能? 它的研究⽬标是什么?1.2 什么是图灵测试?简述图灵测试的基本过程及其重要特征.1.3 在⼈⼯智能的发展过程中,有哪些思想和思潮起了重要作⽤? 1.5 在⼈⼯智能的发展过程中,有哪些思想和思潮起了重要作⽤?1.7 ⼈⼯智能的主要研究和应⽤领域是什么?其中,哪些是新的研究热点?第2章知识表⽰⽅法2.1 什么是知识?分类情况如何?2.2 什么是知识表⽰?不同的知识表⽰⽅法各有什么优缺点? 2.4 ⼈⼯智能对知识表⽰有什么要求? 2.5 ⽤谓词公式表⽰下列规则性知识:⾃然数都是⼤于零的整数。
任何⼈都会死的。
[解] 定义谓词如下:N(x): “x 是⾃然数”, I(x): “x 是整数”, L(x): “x ⼤于0”, D(x): “x 会死的”, M(x): “x 是⼈”,则上述知识可⽤谓词分别表⽰为: )]()()()[(x I x L x N x ∨→? )]()()[(x D x M x →?2.6 ⽤谓词公式表⽰下列事实性知识:⼩明是计算机系的学⽣,但他不喜欢编程。
李晓新⽐他⽗亲长得⾼。
2.8 产⽣式系统由哪⼏个部分组成? 它们各⾃的作⽤是什么?2.9 可以从哪些⾓度对产⽣式系统进⾏分类? 阐述各类产⽣式系统的特点。
2.10简述产⽣式系统的优缺点。
2.11 简述框架表⽰的基本构成,并给出框架的⼀般结构 2.12框架表⽰法有什么特点?2.13试构造⼀个描述你的卧室的框架系统。
2.14 试描述⼀个具体的⼤学教师的框架系统。
[解] ⼀个具体⼤学教师的框架系统为:框架名:<教师-1> 类属:<⼤学教师>姓名:张宇性别:男年龄:32职业:<教师>职称:副教授部门:计算机系研究⽅向:计算机软件与理论⼯作:参加时间:2000年7⽉⼯龄:当前年份-2000⼯资:<⼯资单>2.16把下列命题⽤⼀个语义⽹络表⽰出来(1)树和草都是植物;(2)树和草都是有根有叶的;(3)⽔草是草,且⽣长在⽔中;(4)果树是树,且会结果;(5)苹果树是果树的⼀种,它结苹果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
因此深度优先搜索的空间复杂度是d的线性函数
O(bd) 。
2018/12/18 人工智能 丁世飞 12
DFS时间复杂性
如果搜索在d层最左边的位置找到了目标,则检
查的节点数为(d+1)。另一方面,,如果只是搜索 到d层,而在d层的最右边找到了目标,则检查的 节点包括了树中所有节点,其数量为: 1+b+b2+┅+bd=(bd+1-1)/(b-1)
当搜索过程到达了最大深度的时候,所需
要的内存最大。
2018/12/18
人工智能 丁世飞
11
DFS空间复杂性
假设每个节点的分支系数为b,当我们考虑深度为d
的一个节点时,保存在内存中的节点的数量包括到
达深度d时所有未扩展的节点以及正在被考虑的节 点。因此,在每个层次上都有(b-1)个未扩展的节点, 总的内存需要量为d(b-1)+1。
2018/12/18 人工智能 丁世飞 16
2018/12/18
人工智能 丁世飞
4
基于栈实现的DFS算法
Procedure Depth First Search Begin (1)把初始节点压入栈,并设置栈顶指针; (2)While 栈不空 do Begin 弹出栈顶元素; If 栈顶元素=goal,成功返回并结束; Else 以任意次序把栈顶元素的子女压入栈中; End While End
2018/12/18 人工智能 丁世飞 7
遍历一棵树的过程(下图)。
2018/12/18
人工智能 丁世飞
8
DFS例题分析
例3.3 卒子穿阵问题: 要求一卒子从顶部通过图3.10所 示的列阵到达底部。要求卒子行进中不可进入到代表敌兵 驻守的区域内(标注1),并不准后退。假定限制值为5
行 1 2 3 1 2 3 4 列
深度优先——扩展当前节点后生成的子节 点总是置于OPEN表的前端,即OPEN表 作为栈,后进先出,使搜索优先向纵深方 向发展。
人工智能 丁世飞 2
2018/12/18
DFS的基本思想
深度优先搜索生成节点并与目标节点进行比较 是沿着树的最大深度方向进行的,只有当上次 访问的节点不是目标节点,而且没有其他节点 可以生成的时候,才转到上次访问节点的父节 点。
第3章 搜索策略
3.1 引言 3.2 基于状态空间图的搜索技术(1)(2)
√3.3 盲目搜索(2)
--DFS搜索
2018/12/18 人工智能 丁世飞 1
3.3.2 深度优先搜索
深度优先搜索(Depth First Search, DFS),是 一种一直向下的搜索策略。 OPEN表中节点简单的排序方式:
深度优先搜索的存储器要求是深度约束的 线性函数O(bd)。
2018/12/18 人工智能 丁世飞 14
DFS的缺点
既不是完备的,也不是最优的。
主要问题是可能搜索到了错误的路径上。很多问
题可能具有很深甚至是无限的搜索树,如果不幸选 择了一个错误的路径,则深度优先搜索会一直搜索 下去,而不会回到正确的路径上。这样一来对于这 些问题,深度优先搜索要么陷入无限的循环而不能 给出一个答案,要么最后找到一个答案,但路径很 长而且不是最优的答案。
1 0 0
0 0 1
0 1 0
0 0 0
4
1
0
0
0
图3.10 阵列图
2018/12/18 人工智能 丁世飞 9
S0
S1(1,1)
S2(1,2)
S8(1,3)
S18(1,4)
死
S3(2,2) S9(1,2) S14(1,4)
S4(2,1)
S5(3,1) S6(3,2)
S7(2,3)
S10(2,2)
S13(2,3)
所以,平均来说,检查的节点数量为
(bd+1-1)/2(b-1)+(1+d)/2≈b(bd+d)/2(b-1)
因此深度优先搜索的平均时间复杂度O(bd)。
2018/12/18 人工智能 丁世飞 13
DFS的优点
深度优先搜索的优点是比宽度优先搜索算 法需要较少的空间。该算法只需要保存搜 索树的一部分,它由当前正在搜索的路径 和该路径上还没有完全展开的节点标志所 组成。
转移到父节点后,该算法会搜索父节点的其他 的子节点。
2018/12/18
人工智能 丁世飞
3
DFS的基本思想
深度优先搜索也称为回溯搜索,它总是首先扩展 树的最深层次上的某个节点,只是当搜索遇到一 个死亡节点(非目标节点而且不可扩展),搜索 方法才会返回并扩展浅层次的节点。 上述原理对树中的每一节点是递归实现的,实现 该递归过程的比较简单的一种方法是采用栈。
2018/12/18 人工智能 丁世飞 5
算法说明
初始节点放到栈中,栈指针指向栈的最上 边的元素。
为了对该节点进行检测,需要从栈中弹出 该节点,如果是目标,该算法结束,否则 把其子节点以任何顺序压入栈中。
该过程直到栈变成为空。
2018/12/18
人工智能 丁世飞
6
基于栈实现的DFS流程
(1)把初始节点S0放入OPEN表; (2)如果OPEN表为空,则问题无解,失败并退出。 (3)把OPEN表中的第一个节点取出放入CLOSE表中, 并按顺序冠以编号n; (4)考察节点n是否为目标节点。若是,则求得了问题的 解,成功并退出。 (5)若节点n不可扩展,则转第(2)步; (6)扩展节点n,将其予节点放到OPEN表的首部,并为 其配置指向父节点的指针,然后转第(2)步4,4)
死
S11(2,1) S12(3,1)
死 死 深度限制 解
图3.11 卒子穿阵的深度优先搜索树
2018/12/18
人工智能 丁世飞
10
DFS空间复杂性
深度优先搜索对内存的需求是比较适中的。
它只需要保存从根到叶的单条路径,包括在 这条路径上每个节点的未扩展的兄弟节点。
2018/12/18 人工智能 丁世飞 15
3.3.3 有界深度搜索和迭代加深搜索
对于深度d比较大的情况,深度优先搜索需要很 长的运行时间,而且还可能得不到解答。一种 比较好的问题求解方法是对搜索树的深度进行 控制,即有界深度优先搜索方法。
有界深度优先搜索过程总体上按深度优先算法 方法进行,但对搜索深度需要给出一个深度限 制dm,当深度达到了dm的时候,如果还没有找 到解答,就停止对该分支的搜索,换到另外一 个分支进行搜索。