图搜索与问题求解
《人工智能导论》第3章 图搜索与问题求解
![《人工智能导论》第3章 图搜索与问题求解](https://img.taocdn.com/s3/m/747e268533d4b14e8424684b.png)
第 3 章 图搜索与问题求解 图 3-5 修改返回指针示例
第 3 章 图搜索与问题求解
说明:
(1) 这里的返回指针也就是父节点在CLOSED表中的编 号。
(2) 步6中修改返回指针的原因是, 因为这些节点又被第 二次生成, 所以它们返回初始节点的路径已有两条, 但这两 条路径的“长度”可能不同。 那么, 当新路短时自然要走 新路。
第 3 章 图搜索与问题求解
3.1.5 加权状态图搜索
1.加权状态图与代价树
例3.6 图3-9(a)是一个交通图,设A城是出发地,E城 是目的地, 边上的数字代表两城之间的交通费。试求 从A到E最小费用的旅行路线。
第 3 章 图搜索与问题求解 图 3-9 交通图及其代价树
第 3 章 图搜索与问题求解
第 3 章 图搜索与问题求解
3. 状态图表示
一个问题的状态图是一个三元组 (S, F, G)
其中S是问题的初始状态集合, F是问题的状态转换 规则集合, G是问题的目标状态集合。
一个问题的全体状态及其关系就构成一个空间, 称为状态空间。所以,状态图也称为状态空间图。
第 3 章 图搜索与问题求解
例 3.7 迷宫问题的状态图表示。
的返回指针和f(x)值, 修改原则是“抄f(x)
”。
(2)对其余子节点配上指向N的返回指针后放入OPEN表中, 并对OPEN表按f(x)值以升序排序, 转步2。
第 3 章 图搜索与问题求解
算法中节点x的估价函数f(x)的计算方法是 f(xj)=g(xj)+h(xj) =g(xi)+c(xi, xj)+h(xj) (xj是xi的子节点)
人工智能第三章搜索推理技术
![人工智能第三章搜索推理技术](https://img.taocdn.com/s3/m/ddbff2b8f424ccbff121dd36a32d7375a417c697.png)
人工智能第三章搜索推理技术教学内容:本章在上一章知识表示的基础上研究问题求解的方法,是人工智能研究的又一核心问题。
内容包含早期搜索推理技术,如图搜索策略与消解原理;与高级搜索推理技术,如规则演绎系统、产生式系统、系统组织技术、不确定性推理与非单调推理。
教学重点:图搜索策略、消解原理、规则演绎系统、产生式系统。
教学难点:启发式搜索、规则双向演绎系统等。
教学方法:课堂教学为主,辅以恰当的实验。
注意结合前面所学知识表示的基础内容,将其与问题求解方法融为一体。
及时提问、收集学生学习情况。
尽量使用实例与网络课程中的多媒体素材进行讲解。
教学要求:重点掌握通常图搜索策略与消解原理,掌握各类搜索方法与产生式系统原理,熟悉规则演绎系统的基本原理,对系统组织技术、不确定性推理与非单调推理等高级推理技术作通常性熟悉。
3.1 图搜索策略教学内容:本节介绍图搜索的通常策略,作为各类图搜索技术的基础。
教学重点:图搜索的通常过程、OPEN表与CLOSE表的概念。
教学难点:OPEN表与CLOSE表的物理意义。
教学方法:课堂教学为主,通过提问完全弄清图搜索的基本概念。
教学要求:重点掌握图搜索通常策略,掌握OPEN表与CLOSE表的构成及作用。
1、图搜索策略的定义图搜索策略可看作一种在图中寻找路径的方法。
初始节点与目标节点分别代表初始数据库与满足终止条件的数据库。
求得把一个数据库变换为另一数据库的规则序列问题就等价于求得图中的一条路径问题。
研究图搜索的通常策略,能够给出图搜索过程的通常步骤。
2、图搜索算法中的几个重要名词术语(1)OPEN表与CLOSE表(2)搜索图与搜索树3、图搜索(GRAPHSEARCH)的通常过程(1) 建立一个只含有起始节点S的搜索图G,把S放到一个叫做OPEN的未扩展节点表中。
(2) 建立一个叫做CLOSED的已扩展节点表,其初始为空表。
(3) LOOP:若OPEN表是空表,则失败退出。
(4) 选择OPEN表上的第一个节点,把它从OPEN表移出并放进CLOSED表中。
第3章 图搜索与问题求解
![第3章 图搜索与问题求解](https://img.taocdn.com/s3/m/5952a683dd88d0d233d46ad4.png)
( 4 )对其余子节点配上指向 N 的返回指针后放入 OPEN 表 中某处,或对OPEN表进行重新排序,转步2。
3.1.2 状态图搜索
树式算法的几点说明
返回指针指的是父节点在CLOSED表中的编号。 步6中修改指针的原因是返回初始节点的路径有两 条,要选择“短”的那条路径。 这里路径长短以节点数来衡量,在后面将会看到以 代价来衡量。按代价衡量修改返回指针的同时还要 修改相应的代价值。
3.1.2 状态图搜索
1 搜索方式
树式搜索 在搜索过程中记录所经过的所有节点和边。树式搜 索所记录的轨迹始终是一棵树,这棵树也就是搜索过 程中所产生的搜索树。 线式搜索 在搜索过程中只记录那些当前认为在所找路径上的 节点和边。
不回溯线式搜索 可回溯线式搜索
3.1.2 状态图搜索
2 搜索策略
3.1.2 状态图搜索
搜索:从初始节点出发,沿着与之相连的边试探 地前进,寻找目标节点的过程。 搜索过程中经过的节点和边,按原图的连接关系, 便会构成一个树型的有向图,这种树型有向图称 为搜索树。 搜索进行中,搜索树会不断增长,直到当搜索树 中出现目标节点,搜索便停止。这时从搜索树中 就可很容易地找出从初始节点到目标节点的路径 (解)来。
八数码深度优先搜索
…
3.1.4 启发式搜索
• 启发式搜索的目的 利用知识来引导搜索,达到减少搜索范围,降低问题复 杂度。 • 启发性信息的强弱 强:降低搜索的工作量,但可能导致找不到最优解。 弱:一般导致工作量加大,极限情况下变为盲目搜索, 但可能可以找到最优解。
3.1.4 启发式搜索
启发函数
步5 扩展N,选取其一个未在CLOSED表中出现过的
第3章(搜索推理技术1-图盲目搜索)
![第3章(搜索推理技术1-图盲目搜索)](https://img.taocdn.com/s3/m/3da12908581b6bd97f19ea48.png)
①、起 始节点 ( 即根
节点)的深度为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
第4章+图搜索技术_2(启发式)
![第4章+图搜索技术_2(启发式)](https://img.taocdn.com/s3/m/5fc9bfd084254b35eefd34cd.png)
g=0
h=3 f=3
A
优先队:FBH
设g 为已搜索的路程代价 h 为将付出的估计代价
F g=1 h=2 f=3 G h=1
B g=1 h=3 f=4
H g=1 h=4 f=5
F
h=3 A
h= 2
h=3
B
h=4
C
初始结点
h=2 h=3
D
h=1 h=2
E
h=0
目标结点
H
I
J
第4章 图搜索技术
(d)
A
算出f值对OPEN表重排序
(3)用于删除节点的选择,即用于决定应删除哪些
无用节点,以免造成进一步的时空浪费。
第4章 图搜索技术
一般来说启发信息过弱,产生式系统在找到一条 路径之前将扩展过多的节点,即求得解路径所需搜索 的耗散值(搜索花费的工作量)较大;相反引入强的 启发信息,有可能大大降低搜索工作量,但不能保证 找到最小耗散值的解路径(最佳路径),因此实际应
模式,需要具体问题具体分析。通常可以参考的思路 有:一个节点到目标节点的某种距离或差异的度量; 一个节点处在最佳路径上的概率;或者根据经验的主 观打分等等。例如,对于八数码难题,用h(x)就可表 示节点x的数码格局同目标节点相比,数码不同的位 置个数。
第4章 图搜索技术
4.启发式搜索算法
启发式搜索要用启发函数来导航,其搜索算法就 要在状态图一般搜索算法基础上再增加启发函数值的 计算与传播过程,并且由启发函数值来确定节点的扩 展顺序。为简单起见,下面我们仅给出树型图的树式 搜索的两种策略。
第4章 图搜索技术
4.1.5 加权状态图搜索
1. 加权状态图与代价树 例4.6 图4—8(a)是一个交通图,设A城是出发地,E 城是目的地,边上的数字代表两城之间的交通费。试 求从A到E最小费用的旅行路线。
第3章 图搜索与问题求解
![第3章 图搜索与问题求解](https://img.taocdn.com/s3/m/335ac274915f804d2b16c1f0.png)
第 3 章 图搜索与问题求解
第 3 章 图搜索与问题求解
3.1.4 启发式搜索 1. 问题的提出
2. 启发性信息 按其用途划分, 启发性信息可分为以下三类: (1) 用于扩展节点的选择, 即用于决定应先扩展哪一个节 点, 以免盲目扩展。 (2) 用于生成节点的选择,即用于决定应生成哪些后续节点, 以免盲目地生成过多无用节点。 (3) 用于删除节点的选择,即用于决定应删除哪些无用节点, 以免造成进一步的时空浪费。
第 3 章 图搜索与问题求解
代价树的搜索。所谓代价,可以是两点之间的距离、交 通费用或所需时间等等。通常用g(x)表示从初始节点So到 节点x的代价, 用c(xi,xj)表示父节点xi到子节点xj的代价,即边 (xi,xj)的代价。从而有
g(xj)=g(xi)+c(xi, xj)
而 g(So)=0
第 3 章 图搜索与问题求解 2.深度优先搜索
第 3 章 图搜索与问题求解
深度优先搜索算法: (1) 把初始节点So放入OPEN表中。 (2) 若OPEN表为空, 则搜索失败, 退出。 (3) 取OPEN表中前面第一个节点N放入CLOSED表中,并 冠以顺序编号n。 (4) 若目标节点Sg=N, 则搜索成功,结束。 (5) 若N不可扩展, 则转步(2)。 (6) 扩展N, 将其所有子节点配上指向N的返回指针依次放 入OPEN表的首部, 转步(2)。
第 3 章 图搜索与问题求解
3. 最近择优法(瞎子爬山法) 把局部择优法算法中的h(x)换成g(x)就可得最近择优 法的算法。 例:用代价树搜索求解例3-6中给出的问题。 用分支界限法得到的路径为
第3章图搜索与问题求解
![第3章图搜索与问题求解](https://img.taocdn.com/s3/m/652cc5edcfc789eb172dc8f1.png)
第 3 章 图搜索与问题求解 图 3-1 迷宫图
第 3 章 图搜索与问题求解 图 3-2 迷宫的有向图表示
第 3 章 图搜索与问题求解
例 3.2 在一个3×3的方格棋盘上放置着1, 2, 3, 4, 5, 6, 7, 8八个数码, 每个数码占一格, 且有一个空格。 这些数码可 在棋盘上移动, 其移动规则是:与空格相邻的数码方可移入空 格。现在的问题是:对于指定的初始棋局和目标棋局(如图3-3 所示), 给出数码的移动序列。该问题称为八数码难题或重排九 宫问题。
可以看出,图中的一条边(即相邻两个节点的连线)就对应一 次数码移动,反之, 一次数码移动也就对应着图中的一条边。而 数码移动是按数码的移动规则进行的。所以, 图中的一条边也 就代表一个移动规则或者移动规则的一次执行。于是,这个八数 码问题也就是要在该有向图中寻找目标节点, 或找一条从初始节 点到目标节点的路径问题。
按搜索范围的扩展顺序的不同, 搜索又可分为广度优先和 深度优先两种类型。对于树式搜索, 既可深度优先进行, 也可 广度优先进行。对于线式搜索则总是深度优先进行。
第 3 章 图搜索与问题求解
3. 搜索算法
由于搜索的目的是为了寻找初始节点到目标节点的路径, 所以在搜索过程中就得随时记录搜索轨迹。为此, 我们用一个 称为CLOSED表的动态数据结构来专门记录考查过的节点。显然, 对于树式搜索来说, CLOSED表中存储的正是一棵不断成长的搜 索树; 而对于线式搜索来说, CLOSED表中存储的是一条不断伸 长的折线, 它可能本身章 图搜索与问题求解
启发式搜索则是利用“启发性信息”引导的搜索。 所谓 “启发性信息”就是与问题有关的有利于尽快找到问题解的信 息或知识。例如:“欲速则不达”、“知已知彼, 百战不殆”、 “学如逆水行舟不进则退”等格言, 就是指导人们行为的启发 性信息。常识告诉我们,如果有向导引路, 则就会少走弯路而 事半功倍。 所以, 启发式搜索往往会提高搜索效率, 而且可 能找到问题的最优解。根据启发性信息的内容和使用方式的不 同, 启发式搜索又可分为许多不同的策略, 如全局择优、局部 择优、 最佳图搜索等等。
图搜索问题求解
![图搜索问题求解](https://img.taocdn.com/s3/m/397bcf30580102020740be1e650e52ea5518ce9a.png)
图搜索问题求解实验⼆图搜索问题求解⼀、实验⽬的加深学⽣对图搜索技术的理解,使学⽣掌握图搜索基本编程⽅法,并能利⽤图搜索技术解决⼀些应⽤问题。
1. 掌握Turbo prolog软件编程⽅法;2. 熟悉状态图搜索的基本算法;3.掌握图搜索问题求解中的问题表⽰、节点表⽰、close表和open表的构造。
⼆、实验环境计算机,Turbo PROLOG教学软件三、预习要求1.预习教材第四章有关状态图问题求解的内容,熟悉状态图求解的过程和⽅法;2.了解Turbo PROLOG程序设计的基本知识。
四、实验内容以求交通图中两地之间的路径和最短路径问题为例,分别⽤状态图搜索和代价树搜索,进⾏问题求解。
问题描述如下:G 为⼀有向图, 其每条边都有⼀个⾮负的权数。
对于图中任意两点间的路径, 定义⼀个路径长度, 其值为该路径所包含的各条边的权数之和。
两点间的路径⼀般不⽌⼀条。
对于给定的任意出发点s和到达点t,⾸先找到所有的从s⾄t的路径,然后从中找出长度最短的路径。
左图是某⼀城市的交通⽹络。
边的⽅向表⽰允许的通⾏⽅向。
边旁的权数表⽰该边的长度。
要求找出点 v1 ⾄ v5 的所有路径,并找出最短路径。
五、实验⽅法和步骤1. 启动prolog编辑环境;2. ⽤图搜索搜索思想编辑路径求解问题的源程序;2. 运⾏程序,分析结果;3. ⽤代价树搜索思想编辑最短路径求解问题的源程序;4.运⾏程序,分析结果。
六、⽰例程序以教材例4.1迷宫图的路径搜索为例,给出迷宫问题的求解程序。
DOMAINSstate=symbolDATABASE-mydatabaseopen(state,integer)closed(integer,state,integer)res(state)open1(state,integer)min(state,integer)mark(state)fail_PREDICATESsolveroad(state,state)search(state,state)resultsearchingstep4(integer,state)step56(integer,state)equal(state,state)repeatresulting(integer)rule(state,state)GOALsolve.CLAUSESsolve:-search(s0,sg),result.search(Begin,End):-retractall(_,mydatabase),assert(closed(0,Begin,0)),assert(open(Begin,0)),assert(mark(End)),repeat,searching,!.result:-not(fail_),retract(closed(0,_,0)),closed(M,_,_),resulting(M),!.result:-beep,write("sorry don't find aroad!"). searching:-open(State,Pointer),retract(open(State,Pointer)),closed(No,_,_),No2=No+1,asserta(closed(No2,State,Pointer)),!,step4(No2,State).searching:-assert(fail_).step4(_,State):-mark(End),equal(State,End).step4(No,State):-step56(No,State),!,fail.step56(No,StateX):-rule(StateX,StateY),not(open(StateY,_)),not(closed(_,StateY,_)),assertz(open(StateY,No)),fail.step56(_,_):-!.equal(X,X).repeat.repeat:-repeat.resulting(N):-closed(N,X,M),asserta(res(X)),resulting(M).resulting(_):-res(X),write(X),nl,fail.resulting(_):-!.rule(X,Y):-road(X,Y).road(s0,s4).road(s4,s1).road(s1,s4).road(s1,s2).road(s2,s1).road(s2,s3).road(s3,s2).road(s4,s7).road(s7,s4).road(s4,s5).road(s5,s4).road(s5,s6).road(s6,s5).road(s5,s8).road(s8,s5).road(s8,s9).road(s9,s8).road(s2,s5).road(s5,s2).road(s9,sg).七、实验报告要求1. 实验报告应简单明了,语⾔通顺,结果正确,程序规范。
图搜索与问题求解(八数码)
![图搜索与问题求解(八数码)](https://img.taocdn.com/s3/m/9a7a7754640e52ea551810a6f524ccbff121cad4.png)
图搜索与问题求解实验报告一实验题目图搜索与问题求解二实验目的1熟悉和掌握启发式搜索/A*搜索的定义、估价函数和算法过程;2 理解和掌握搜索过程,能够用选定的编程语言求解八数码问题,理解求解流程和搜索顺序;3 比较并分析图搜索策略的实质,通过实验理解启发式搜索/A*搜索的意义。
三实验要求1以九宫问题/八数码问题为例,以某种启发式搜索/A*搜索策略编程演示其搜索过程;2 定义启发式函数,能正确求解出从初始状态到目标状态的移动路线;3 对不可达状态能进行正确识别;4对所采用的启发式函数做出性能分析。
四数据结构typedef struct Qnode{ //队列的节点类型定义long a; //将8数码转化为长整型后入队列int dnum; //与目标状态数码不同的位置的个数Qnode *next;}*QueuePtr;typedef struct{QueuePtr front; //队头指针QueuePtr rear; //队尾指针}LinkQueue; //链式队列五实验算法1 说明有解和无解如何判定;int NiXu(int a[][3]) //求出所给状态的逆序数{i nt i,j,k=0,sum=0;i nt b[8];f or(i=0;i<3;i++)for(j=0;j<3;j++)if(a[i][j]) //空格用0代替,逆序不计空格b[k++]=a[i][j];for(i=1;i<8;i++)for(j=0;j<i;j++)if(b[i]<b[j])sum++;return sum;}if(NiXu(start)%2 != NiXu(end)%2)printf("无法到达!\n");e lse{printf("广度优先搜索如下:\n\n");search();}2 说明启发式函数如何设定;int h(long x){i nt sum=0;i nt b[3][3];u_trans(x,b);f or (int i=0;i<3;i++)for (int j=0;j<3;j++)if (end[i][j]!=b[i][j])sum++;r eturn sum;}3说明实验中采用的搜索算法。
图搜索状态空间表示
![图搜索状态空间表示](https://img.taocdn.com/s3/m/099580b08762caaedd33d456.png)
1 状态空间及其搜索的表示
4)一般图搜索例——八数码游戏 3×3九宫棋盘,放置数码为1 - 8的8个棋牌,剩下一个空格,只能通过棋
牌向空格的移动来改变棋盘的布局。 求解的问题——给定初始布局(即初始状态)
和目标布局(即目标状态),如何移动棋牌才 能从初始布局到达目标布局(参见图2.2)。 解答路径——就是一个合法的走步序列。
特例:N=3,K=2;
变量m——传教士在左岸或船上的实际人数, 变量c——野人在左岸或船上的实际人数, 变量b——指示船是否在左岸(1、0)。 上述约束条件转变为m + c ≦2, m ≧ c。 左岸状态描述为一个三元组: (m, c, b)
考虑到在这个渡河问题中,左岸的状态描述(m, c, b)可以决定右岸的 状态,所以整个问题状态就可以左岸的状态来描述,以简化问题的表示。 设初始状态下传教士、野人和船都在左岸,目标状态下这三者均在右岸, 问题状态以三元组(m,c,b)表示。
1 状态空间及其搜索的表示
3)状态空间的搜索
状态空间的搜索以SE指示,其可表示为1个五元组:
SE = (S,O,E,I,G) I——问题的初始状态,I ∈ S;
E——搜索引擎; G——问题的目标状态集,G S。
基本思想——通过搜索引擎寻找一个操作算子的调用序列,使问题从初始状态变迁
总共只有16个可达的合法状态。
2类操作算子:
L(m,c)——指示从左岸到右岸的划船操作,
R(m,c)——指示从右岸回到左岸的划船操作,
m和c取值的可能组合只有5个:10,20,11,01,02。
总共有10个操作算子。
2)状态空间表示的经典例——传教士和野人问题 渡河问题状态空间的有向图: 参见图2.1
人工智能作业题解答
![人工智能作业题解答](https://img.taocdn.com/s3/m/b646b669bf1e650e52ea551810a6f524ccbfcb3f.png)
人工智能作业题解答第三章图搜索与问题求解1、何为状态图和与或图?图搜索与问题求解有什么关系?解:按连接同一节点的各边间的逻辑关系划分,图可以分为状态图和与或图两大类。
其中状态图是描述问题的有向图。
在状态图中寻找目标或路径的基本方法就是搜索。
2、综述图搜索的方式和策略。
解:图搜索的方式有:树式搜索,线式搜索。
其策略是:盲目搜索,对树式和不回溯的线式是穷举方式,对回溯的线式是随机碰撞式。
启发式搜索,利用“启发性信息”引导的搜索。
3、什么是问题的解?什么是最优解?解:能够解决问题的方法或具体做法成为这个问题的解。
其中最好的解决方法成为最优解。
4、什么是与或树?什么是可解节点?什么是解树?解:与或树:一棵树中的弧线表示所连树枝为“与”关系,不带弧线的树枝为或关系。
这棵树中既有与关系又有或关系,因此被称为与或树。
可解节点:解树实际上是由可解节点形成的一棵子树,这棵子树的根为初始节点,叶为终止节点,且这棵子树一定是与树。
解树:满足下列条件的节点为可解节点。
①终止节点是可解节点;②一个与节点可解,当且仅当其子节点全都可解;③一个或节点可解,只要其子节点至少有一个可解。
5、设有三只琴键开关一字排开,初始状态为“关、开、关”,问连接三次后是否会出现“开、开、开”或“关、关、关”的状态?要求每次必须按下一个开关,而且只能按一个开关。
请画出状态空间图。
注:琴键开关有这样的特点,若第一次按下时它为“开”,则第二次按下时它就变成了“关”。
解:设0为关,1为开6、有一农夫带一只狼、一只羊和一筐菜欲从河的左岸乘船到右岸,但受下列条件限制:1)船太小,农夫每次只能带一样东西过河。
2)如果没农夫看管,则狼要吃羊,羊要吃菜。
请设计一个过桥方案,使得农夫、狼、羊、菜都不受损失地过河。
画出相应状态空间图。
提示:(1)用四元组(农夫、狼、羊、菜)表示状态,其中每个元素都可为0或1,用0表示在左岸,用1表示在右岸。
(2)把每次过河的一次安排作为一个算符,每次过河都必须有农夫,因为只有他可以划船。
人工智能课件第3章 图搜索与问题求解
![人工智能课件第3章 图搜索与问题求解](https://img.taocdn.com/s3/m/171c45eab8f3f90f76c66137ee06eff9aef8490d.png)
例 3-3 用全局择优搜索法解八数码难题。初始 棋局和目标棋局如下面的图3-8所示。
解 设启发函数h(x)为节点x的格局与目标格局 相比数码不同的位置个数。以这个函数制导的搜索树 如图3-8所示。此八数问题的解为:So, S1, S2, S3, Sg。
■教材的微课视 频中有搜索过 程的动画
图 3-8 八数码问题的全局择优搜索
(6) 扩展N, 将其所有子节点配上指向N的指针依次放入
OPEN表尾部, 转步(2)。
2.深度优先搜索 深度优先搜索就是
在搜索树的每一层始终 先只扩展一个子节点, 不断地向纵深前进,直 到不能再前进(到达叶 子节点或受到深度限制) 时,才从当前节点返回 到上一级节点,沿另一 方向又继续前进。这种 方法的搜索树是从树根 开始一枝一枝逐渐形成 的。
• 可回溯的线式搜索
(1) 把初始节点So放入CLOSED表中。 (2) 令N=So。 (3) 若N是目标节点, 则搜索成功, 结束。
(4) 若N不可扩展, 则移出CLOSED表的末端节点Ne,若Ne =So,则搜索失败, 退出。否则, 以CLOSED表新的末端节点Ne 作为N,即令N=Ne, 转步(4)。
r5: (X1==0)( X2==n) (X1=n) ( X2=0) r6: (X1==0)( X8==n) (X1=n) ( X8=0)
2组规则:
r7: (X2==0)( X1==n) (X2=n) ( X1=0) r8: (X2==0)( X3==n) (X2=n) ( X3=0) r9: (X2==0)( X0==n) (X2=n) ( X0=0)
盘子的搬动次数:
264-1=18 446 744 073 709 511 615
二阶梵塔问题
第2章 问题求解1用
![第2章 问题求解1用](https://img.taocdn.com/s3/m/827e2023ed630b1c59eeb5a6.png)
由于所有启发函数都是容许的,所以h(n)也是容许的。
33
状态图搜索问题求解 2. 机器感知
修道士和野人问题。 问题描述 设有三个传教士和三个野人来到河边,打算乘一只 船从左度到右岸。该船的负载能力为两人,在任何 时候,如果野人人数超过传教士人数,那么野人就 会把传教士吃掉。他们这样才能用这条船安全地把 所有人都渡河过去?
算法的主要问题是内存耗尽而不是计算时间太久。
28
2.2.2 启发式函数 2. 机器感知
8数码问题是最早采用启发式搜索的问题之一,其 典型的解大约为20步,这当然要根据初始状态的不 同而有所不同。分支因子大约为3(当空格单元在 中间时分支因子为4,在四个角落时为2),这意味 着一个深度为20的完全搜索将有大约 个状态。当然 这里面会有大量重复的状态。除去重复状态仍然会 有很多状态,因此下一步就是寻找一个好的启发式 函数。如果我们希望找到路径最短的解,我们需要 一个估计值不会超过到目标的真实步数的启发式函 数。这里有两个候选函数:
2.2 信息搜索方法
上一节介绍了对目前状态到目标状态的步数或者路 径代价一无所知的情况下的几种搜索策略。如果 我们对状态空间有一些了解,那么可以利用这些 知识来帮助确定先扩展哪一个节点。
启发性信息的概念
启发性信息是指那种与具体问题求解过程有关的,
并可指导搜索过程朝着最有希望方向前进的控制信
息。
1
概念:启发性信息
11
2.2.1 最好优先搜索
贪婪搜索对于错误的开端很敏感。假设问题是从I
到F。启发式函数建议先扩展N,但这是一个死角。解
路径应该是先到V远——然后到U,B,F。因此这次启发函数造成
了不必要的节点被扩展。进而如果不仔细检测状态的
人工智能导论实验一 基于图搜索技术的八数码问题求解
![人工智能导论实验一 基于图搜索技术的八数码问题求解](https://img.taocdn.com/s3/m/1ed3b591dbef5ef7ba0d4a7302768e9951e76e72.png)
广州大学学生实验报告开课学院及实验室:计算机科学与工程实验室 2020年10月14日(***报告只能为文字和图片,老师评语将添加到此处,学生请勿作答***)一、实验内容1. 分别用广度优先搜索策略、深度优先搜索策略和启发式搜索算法(至少两种)求解八数码问题;分析估价函数对启发式搜索算法的影响;探究讨论各个搜索算法的特点。
二、实验设备1. 实验设备:计算机;2. 平台:Windows操作系统,Visual C++ 6.0 / Python Anaconda三、实验步骤1. 随机生成一个八数码问题分布,设计一个可解的目标状态(要求棋盘9个位置都不同)2. 分别用广度优先搜索策略、深度优先搜索策略和至少两种启发式搜索算法求解八数码问题3. 分析估价函数对启发式搜索算法的影响4. 探究讨论各个搜索算法的特点四、分析说明(包括核心代码及解释)广度优先搜索:首先创建一个结构体node,来记录节点移动方向和扩展的节点。
struct node{int ab[3][3];//节点int direction;//方向};struct node sh[102], end;int count = 1;然后创建一个init函数来初始化棋盘起始状态和目标状态,使用for语句填写棋盘数字用loction函数确定0节点的位置,通过for语句和if语句判断sh[num].ab[i / 3][i % 3] == 0,即可得到0节点的位置Sign函数用来获取棋盘状态,将当前棋盘数字顺序生成一个数,即可得知棋盘状态。
Mobile函数用来移动0节点,先用loction函数获取0节点的位置,再通过if语句来判断0节点位置和所能移动方向,然后进行移动。
Display函数使用for语句来打印当前棋盘。
Search函数使用display函数来打印从初始状态移动到目标状态的中间状态棋盘,在while(1)语句下利用mobile函数移动0节点,直到目标状态找到或者超过寻找次数。
图搜索-状态空间表示
![图搜索-状态空间表示](https://img.taocdn.com/s3/m/0fa139de240c844769eaeed7.png)
4)一般图搜索例——八数码游戏
制定操作算子集: * 直观方法——为每个棋牌制定一套可能的走步: 左、上、右、下四种移动, 这样就需32个操作算子。 * 简易方法——仅为空格制定这4种走步, 因为只有紧靠空格的棋牌才能移动。 * 空格移动的唯一约束是不能移出棋盘。
八数码问题的搜索图: 参见图2.3 棋盘布局(问题状态)总共9!=362880个, 但搜索图小得多。
用一般图搜索方法解决该问题:
为问题状态的表示建立数据结构:3×3的一个矩阵, * 矩阵元素S ij∈{0,1,…,8};其中1≤i,j≤3, * 数字0指示空格, * 数字1 - 8指示相应棋牌。 1 0 3 图2.2中的八数码问题就可表示为: 7 2 4 6 8 5
1 2 3 8 0 4 7 6 5
渡河问题就有无数条解答路径(因为划船操作可逆),但只有4条是最短的,都包含11 个也称一般图
操作算子的可选(渡河问题的初始状态节点就有 3 个),在逻辑上称为“或”关系,意 指只要其中有一条路径通往目标状态,就能获得成功解答。除了少数像渡河这样的简单 问题外,描述状态空间的一般图都很大,无法直观地画出,只能将其视为隐含图。
2类操作算子:
2)状态空间表示的经典例——传教士和野人问题
渡河问题状态空间的有向图: 参见图2.1
1 状态空间及其搜索的表示
3)状态空间的搜索 状态空间的搜索以SE指示,其可表示为1个五元组:
SE = (S,O,E,I,G) I——问题的初始状态,I ∈ S; E——搜索引擎; G——问题的目标状态集,G S。
特例:N=3,K=2;
变量m——传教士在左岸或船上的实际人数, 变量c——野人在左岸或船上的实际人数, 变量b——指示船是否在左岸(1、0)。 上述约束条件转变为m + c ≦2, m ≧ c。 左岸状态描述为一个三元组: (m, c, b)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(2,1),(2,2),(2,3)
(3,1),(3,2),(3,3)
2013-8-5 人工智能 20
3.1.3 梵塔问题的状态空间(2)
A B 1 2 3 S0:(1,1)
A
1 2 3 S1:(1,2) A B 1 2 3 S4:(2,2) B A
A
1 2 3 S2:(1,3)
B
A
1 2 3 S3:(2,1)
3 1 1 S10 1 1 1 S18 3 1 0 S26 1 1 0 3 0 1 S11 1 0 1 S19 3 0 0 S27 1 0 0 2 3 1 S12 0 3 1 S20 2 3 0 S28 0 3 0 2 2 1 S13 0 2 1 S21 2 2 0 S29 0 2 0 2 1 1 S14 0 1 1 S22 2 1 0 S30 0 1 0 2 0 1 S15 0 0 1 S23 2 0 0 S31 0 0 0
q01
p01 p10 p02 S1 (3,2,1) q02 q01 S19 (3,0,0) p01 p20 S2 S26 (3,1,1) q20 (1,1,0)
q10
q11 p11
q11 S31 (0,0,0)
p11 p01 q01 p02 q02
S10 (1,1,1) S14 (0,1,1) S13 (0,2,1)
2013-8-5 人工智能 24
n(n≥3)阶梵塔问题
n阶梵塔问题的操作集合表示为: F={Rk(i,j) | i,j={1,2,3},k={1,2,„,n}} 全部可能状态数为3n个,最佳解长度为2n-1。 三阶梵塔问题状态图
S0=(1,1,1)
2013-8-5
Sg2=(3,3,3)
人工智能
Sg1=(2,2,2)
25
3.1.4 重排九宫问题和隐式图(1) 例3.8重排九宫问题(八数码难题)
2 8 1 3 4 1 8 7 6 2 3 4 5 X1 X2 X3 X8 X0 X4
7 6
5
X7 X6 X5
目标棋局 将棋局用向量A=(X0,X1 , X2 , X3 , X4 , X5 , X6 , X7 , X8)
人工智能 2
2013-8-5
第3章 图搜索与问题求解
3.1 3.2 3.3 3.4 3.5 状态图知识表示(状态图搜索问题求解) 状态图搜索 与或图知识表示(与或图搜索问题求解 ) 与或图搜索 博弈树搜索
2013-8-5
人工智能
3
3.1 状态图知识表示
3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 状态、操作和状态空间 修道士和野人的状态空间 梵塔问题的状态空间 重排九宫问题和隐式图 问题求解的基本框架
2013-8-5 人工智能 15
3.1.2 修道士和野人问题的状态空间(2) 解:先建立问题的状态空间。问题的状态可以用 一个三元数组来描述: S=(m, c, b) m:左岸的修道士数 c:左岸的野人数 b:左岸的船数 右岸的状态不必标出,因为: 右岸的修道士数m’=3-m 右岸的野人数c’=3-c 右岸的船数b’=1-b
(S2, S3), (S3, S2),
G:Sg
(S4, S7), (S7, S4), (S4, S5), (S5, S4), (S5,
S6), (S6, S5), (S5, S8), (S8, S5), (S8, S9), (S9, S8), (S9, Sg)} 迷宫问题规则集描述了图中所有节点和边。类似于 这样罗列出全部节点和边的状态图称为显式状态图, 或者说状态图的显式表示。
A
B
1 2 3 S5:(2,3)
B
A 1 2 3 S6:(3,1)
A
B 1 2 3 S8:(3,3)
21
1 2 3 S7:(3,2)
人工智能
2013-8-5
3.1.3 梵塔问题的状态空间(3)
转换规则:A(i,j)表示金盘A从第i号杆移到j号杆 B(i,j)表示金盘B从第i号杆移到j号杆 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),目标状态(3,3) 梵塔问题用状态图表示为: <{(1,1)},{A(1,2),„,B(3,2)},{(3,3)}>
2013-8-5
人工智能
4
3.1.1状态、操作和状态空间(1)
例3.1走迷宫
走迷宫问题就是从该有向图的初始节点出发,寻找目 标节点的问题,或者是寻找通向目标节点的路径问题。
2013-8-5 人工智能 5
3.1.1 状态、操作和状态空间(2)
例3.2八数码难题(重排九宫问题)
2 8
1
3
4
1 8
2
3 4
7 6
5
7
6
5
初始棋局
目标棋局
棋局作为节点,相邻节点通过移动数码一个一个产生 出来,所有节点由它们的相邻关系连成一个有向图。 以上两个问题抽象来看,都是某个有向图中寻找目标 或路径的问题,在人工智能技术中,把这种描述问题 的有向图称为状态空间图,简称状态图。
2013-8-5 人工智能 6
3.1.1 状态、操作和状态空间(3)
操作集F={p01, p10,p11,p02,p20,q01,q10,q11, q02,q20}
2013-8-5 人工智能 18
3.1.2 修道士和野人问题的状态空间(5)
p02 S0 (3,3,1)
q02 p01
q01 p11 q11
S18 (3,1,0) S17 (3,2,0) S21 (2,2,0)
2013-8-5 人工智能 11
3.1.1 状态、操作和状态空间(8)
补充例1 三枚钱币,能否从下面状态翻动三次后 出现全正或全反状态。
正 正 正
反
正
反
反
反
反
初始状态θ s
2013-8-5 人工智能
目标状态集合{θ0, θ7}
12
3.1.1 状态、操作和状态空间(9)
引入一个三元组(q0,q1,q2)来描述总状态,钱币正面为0,反面 为1,全部可能的状态为: Q0=(0,0,0) ; Q1=(0,0,1); Q2=(0,1,0) Q3=(0,1,1) Q6=(1,1,0) ; Q4=(1,0,0); Q5=(1,0,1) ; Q7=(1,1,1)。
2013-8-5
人工智能
22
3.1.3 梵塔问题的状态空间(4)
1,1
A(1,3)
2,1
A(2,1)
3,1
B(1,2)
B(3,1)
A(3,2)
3,3
2,3
3,2
A(3,2)
1,3
1,2
2,2
A(2,1)
2013-8-5
B(1,3)
人工智能
A(1,3)
23
n(n≥3)阶梵塔问题
假设金片Pk从小片到大片按下标k顺序编号, 即k=1,2,3,„,n,n阶梵塔问题状态空间 可用矢量表示为: (P1, P2, P3,„, Pk,„, Pn) Pk表示第k个金片穿在编号为Pk的宝石针上, Pk={1,2,3} 初始状态 S0=(1,1,1,„,1,„,1) 目标状态 Sg1 =(2,2,2,„,2,„,2) Sg2 =(3,3,3,„,3,„,3)
Qs O1 S1 O2 S2 O3 S3 O4 … On Qg
10
2013-8-5
人工智能
3.1.1 状态、操作和状态空间(7)
例 3.7 迷宫问题的状态图表示。
S:So F:{(So, S4), (S4, So), (S4, S1), (S1, S4), (S1,S2), (S2, S1),
2013-8-5
人工智能
9
3.1.1 状态、操作和状态空间(6)
状态空间中问题求解
在状态空间表示法中,问题求解过程转化为在图中 寻找从初始状态Qs出发到达目标状态Qg的路径问题, 也就是寻找操作序列的问题。 状态空间的解为三元组< Qs, a, Qg > Qs :某个初始状态 Qg :某个目标状态 a:把Qs变换成Qg的有限的操作序列 状态转换图
p10 q10 q01 q02 S30 (0,1,0) p02 p01
人工智能 19
p01 S12 (0,3,1) q01
q20 S29 S5 (0,2,0) p20 (2,2,1)
2013-8-5
3.1.3 梵塔问题的状态空间(1) 例3.9 二阶梵塔问题 一号杆有A、B两个金盘, A小于B。要求将AB移至三号杆,每次只可移动 一个盘子,任何时刻B不能在A上。 用二元组(SA ,SB )表示状态,SA 表示A所在 杆号,SB表示B所在杆号,全部状态如下: (1,1),(1,2),(1,3)
2013-8-5 人工智能 17
3.1.2 修道士和野人问题的状态空间(4)
操作符 p01 p10 p11 p02 p20 q01 q10 q11 q02 q20 条 件 b=1, m=0或3, c≥1 b=1, (m=3,c=2)或(m=1,c=1) b=1, m=c, c≥1 b=1, m=0或3, c≥2 b=1, (m=3,c=1)或(m=2,c=2) b=0, m=0或3, c≤2 b=0, (m=0,c=1)或(m=2,c=2) b=0, m=c, c≤2 b=0, m=0或3, c≤2 b=0, (m=0,c=2)或(m=1,c=1) 动 作 b=0, c=c-1 b=0, m=m-1 b=0, m=m-1, c=c-1 b=0, c=c-2 b=0, m=m-2 b=1, c=c+1 b=1, m=m+1 b=1, m=m+1, c=c+1 b=1, c=c+2 b=1, m=m+2