2020/7/31人工智能ArtificialIntelligence(AI)许建华xujianhua@njnu.edu.cn南京师范大学计算机科学与技术学院2011年秋季2020/7/31第2章知识表示方法2.1状态空间法2.2问题归约法2.3谓词逻辑法2020/7/31用计算机技术解决实际问题的一般思路:实际问题问题表达知识表达数学建模求解的方法或者算法结果的解释2020/7/31例:求侧面积为150平方米的体积最大的长方体?设长、宽、高分别为x,y,z侧面积为:2(xy+yz+xz)体积为:xyz数学模型maxxyzs.t.2(xy+yz+xz)=150xyz2020/7/31利用最优化技术中的算法,可以得到结果:x=y=z=5.0解释:长、宽、高都等于5米时,体积最大说明:在计算数学的课程中,主要关心求解的具体算法2020/7/31在人工智能中,重点关注两个方面的内容:①问题的表示(知识的表示):即要找到问题的一种合适的表示方法在人工智能中,我们要涉及到:状态空间法问题归约法谓词逻辑法样本向量法2020/7/31②问题的求解:从问题表示方法出发,找到一个合理的办法来求解在人工智能中,常有的方法有:搜索法推理法计算方法2020/7/312.1状态空间法在日常的一些智力游戏(八数码、走八卦阵、走迷宫等)中,我们采用的策略:试着向前走,如果走不通,则往后退,不停地试、试、试,直到成功12457836123456782020/7/31类似地,在人工智能中,一种最基本的求解方法就是试探搜索法,即,通过在某个可能的解空间(例如,所有可能的走法)中寻找一个解这种基于解空间的问题表示和求解方法就是状态空间法,其基础是状态和算符(算子)2020/7/312.1.1问题状态描述状态:描述某一类不同事物间的差别而引入的一组最少变量q0,q1,…,qn的有序集合2020/7/31例:描述在坐的同学变量可以有年级班级姓名性别学号……根据要解决的问题、从中选择最少的一组变量例:区分哪一个班:年级、班级区分哪一位同学:姓名、性别、学号2020/7/31矢量形式:Q=[q0,q1,…,qn]T其中,元素qi(i=0,1,…,n)为集合的分量,称为状态变量。具体状态:给每一个状态变量一个具体的值(符号、数值等)。2020/7/31矩阵形式1111......nmmnqqQqq2020/7/31例:八数码问题矢量形式的状态表示:12347865矩阵形式的状态表示:1,2,3,4,7,8,6,5,01234786502020/7/31算符(操作符):使问题从一个状态变换到另一状态的手段。例如:走步、规则、数学算子、运算符号等等。2020/7/31例:描述在坐的同学(续)状态变量可以有年级班级姓名性别学号……操作符入学正常升级毕业2020/7/31例:八数码问题12347865算符:1、数字的上、下、左、右移动2、空格的上、下、左、右移动2020/7/31问题的状态空间:一个表示问题全部可能状态及其关系的图,它包含了三个集合:1.所有可能的问题初始状态集合S2.操作符集合F3.目标状态集合G状态空间记作三元状态(S,F,G)2020/7/31例:十五数码问题123456789101112131415119415131275861321014初始状态:左图目标状态:右图操作符集合F=[空格的左移、上移、右移、下移]2020/7/31可能的求解过程注:在程序和图示求解过程中,需要规定好操作符的使用顺序2020/7/31要完成某一个具体问题的状态描述,必须完成三项工作:①如何描述状态,特别是初始状态②操作符集合及其对状态描述的作用③如何描述目标状态即定义好三元状态(S,F,G)中的三个成分2020/7/31状态空间法:从某一个初始状态开始,每次施加一个操作符,递增地建立操作符序列,直到达到目标状态为止2020/7/31状态空间法的问题:寻找从初始状态到目标状态的某一个操作符序列状态空间法的解:从初始状态变换到目标状态的操作符序列119415131275861321014123456789101112131415左、下、上…..2020/7/312.1.2状态图示法图是由节点(不一定是有限个的节点)的集合构成的注意:在图论中,图的定义中还包括边的集合状态空间法(求解过程)的表示方法:用图来表示(借助于图论中某些技术)2020/7/31有向图和无向图:2020/7/31无向图:一对节点可能互为后裔,边用线段来表示2020/7/31有向图:一对节点用弧线连接起来,并且从一个节点指向另一个节点父辈节点或祖先ni后继节点或后裔nj2020/7/31对于某一个节点序列(ni0,ni2,…nij,…,nik)如果每一个节点nij-1都有一个后继节点nij存在,则将这一序列称为从节点ni0到nik的长度为k的路径。nikni02020/7/31如果从节点ni到nj存在一条路径,则称节点nj是从节点ni可到达的节点,或者称nj是ni的后裔节点、称ni是nj的祖先。njni祖先后裔2020/7/31当用有向图来表示状态空间法时,对应关系:图中的一个节点对应于某一个状态图中的一个有向弧对应于某一个算符注:有向弧的旁边可以标以具体算符2020/7/31状态节点操作符有向弧2020/7/31问题:寻找从初始状态到目标状态的某个操作符序列问题:寻找图中初始节点(对应初始状态)到目标节点(对应于目标状态)的一条路径转化为2020/7/31c(ni,nj)表示从节点ni指向节点nj(相邻)的那一段弧的代价njni在某些情况下,每个操作符作用、成本是不一样的,需要引入代价的概念2020/7/31(不相邻的)两个节点间路径的代价等于连接该路径的各个节点的所有弧线的代价之和nkn0C(n0,n1)C(nk-1,nk)110(,)kiiicnn2020/7/31引入代价的概念后,我们的问题可能是:寻找初始节点到目标节点之间的代价最小的路径对应的原始问题:寻找从初始状态到目标状态的操作符代价之和最小的操作符序列2020/7/31利用图论的技术,我们要解决两个问题:第一、找出初始节点到目标节点的一条路径。对应于寻找初始状态到目标状态的操作符序列第二、找出初始节点到目标节点的一条代价最小的路径。对应于寻找将初始状态变换到目标状态所用操作符代价之和最小的操作符序列2020/7/312.1.3例子例1:八数码问题八数码的任何一种摆法是一个状态,状态总数为9!。用一个长度为9的一维数组来描述状态:(q1,q2,…,q9)其中,qi取0,1,…,8个数,0表示空格,且取值互不相同。算符是空格的上、下、左、右移动2020/7/31如果记空格的位置为P,这时空格的移动规则是:12385674123856740PP-3P+1P+3P-1表示位置123456789P2020/7/31代码规则前提条件应用结果1左移P≠1,4,7P位置与P-1位置上的元素互换2上移P≠1,2,3P-33右移P≠3,6,9P+14下移P≠7,8,9P+3空格移动规则123456789表示位置2020/7/31初始状态:(2,0,3,1,8,4,5,6,7)目标状态:(1,2,3,8,0,4,7,6,5)部分状态空间图2020/7/31注意:事先规定操作符的前后顺序,便于编程不要生成已有的状态(节点),防止进入死循环2020/7/31例2:迷宫问题2020/7/31给图上加一个坐标系,定义每一个分叉路口为一个状态。2020/7/31操作符为人的上、下、左、右走动初始状态为(1,1)目标状态为(4,4)2020/7/31部分状态空间图2020/7/31例3:梵塔问题(三个盘)对于n个盘的问题,我们用n维向量(a1a2…an)表示问题的一个状态其中ai=1,2,3表示第i个盘位于第一、二、三个柱子上,a1an中盘的大小从大到小21...naaa2020/7/31初始状态为(1…1),目标状态为(3…3)操作符m(i,j):表示一个盘从i根柱子搬到第j根柱子。T(k):表示第k根柱子上(最上面)的盘的大小。操作符集合为:O={m(i,j)|T(i)T(j)}2020/7/31部分状态空间图2020/7/31例4:猴子与香蕉问题acb2020/7/31用一个四元组(W,x,Y,z)来表示问题的状态W:猴子的水平位置x:当猴子爬到箱子顶上取1,否则取0Y:箱子的水平位置z:当猴子摘到香蕉时取1,否则取0初始状态是(a,0,b,0),目标状态是(c,1,c,1)2020/7/31操作符:①猴子当前位置W走到水平位置U:goto(U):(W,0,Y,z)(U,0,Y,z)注:猴子必须不在箱子上②猴子将箱子从W位置推到水平位置V:pushbox(V):(W,0,W,z)(V,0,V,z)注:猴子与箱子必须在同一位置2020/7/31操作符:③猴子爬到箱子上:climbbox:(W,0,W,z)(W,1,W,z)④猴子摘到香蕉:grasp:(c,1,c,0)(c,1,c,1)2020/7/31acb部分状态空间图(a,0,b,0)(b,0,b,0)(c,0,c,0)(b,1,b,0)(c,1,c,0)(c,1,c,1)goto(b)climbboxclimbboxgrasp初始状态目标状态pushbox2020/7/31例5:四皇后问题状态:任意一种合法的摆法操作符:摆下一个皇后,先摆第一行,每一行从左开始摆,并满足皇后不成线的规则QQ2020/7/31思考题:小结用状态空间法表示八数码问题的讲课内容,考虑如何在计算机上加以实现?