人工智能_(马少平_朱小燕_著)_清华大学出版社_课后答案

更新时间:2023-08-16 05:17:01 阅读量: 教学研究 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第三章 课后习题

4、AO*算法中,第7步从S中选一个节点,要求其子孙不在S中出现,讨论应如何实现对S的控制使得能有效地选出这个节点。如下图所示,若E的耗散值发生变化时,所提出的对S的处理方法应能正确工作。

错误!未找到引用源。

5、如何修改AO*算法使之能处理出现回路的情况。如下图所示,若节点C的耗散值发生变化时,所修改的算法能正确处理这种情况。

错误!未找到引用源。

6、对3×3的一字棋,设用+1和-1分别表示两选手棋子的标记,用0表示空格,试给出一字棋产生式系统的描述。

错误!未找到引用源。

7、写一个α-β搜索的算法。

错误!未找到引用源。

8、用一个9维向量C来表示一字棋棋盘的格局,其分量根据相应格内的×,空或○的标记分别用+1,

0,或-1来表示。试规定另一个9维向量W,使得点积C·W可作为MAX选手(棋子标记为×)估计非终端位置的一个有效的评价函数。用这个评价函数来完成几步极小-极大搜索,并分析该评价函数的效果。

第四章 课后习题

13、一个积木世界的状态由下列公式集描述: ONTABLE(A) CLEAR(E) ONTABLE(C) CLEAR(D) ON(D,C) HEAVY(D) ON(B,A) WOODEN(B) HEAVY(B) ON(E,B) 绘出这些公式所描述的状态的草图。

下列语句提供了有关这个积木世界的一般知识: 每个大的蓝色积木块是在一个绿色积木块上。 每个重的木制积木块是大的。

所有顶上没有东西的积木块都是蓝色的。 所有木制积木块是蓝色的。

以具有单文字后项的蕴涵式的集合表示这些语句。绘出能求解"哪个积木块是在绿积木块上"这个问题的一致解图(用B规则)。

第五章 课后习题

1.将下面的公式化成子句集

~( (( P ∨ ~Q) → R) → (P ∧ R))

2.命题是数理逻辑中常用的公式,试使用归结法证明它们的正确性: a) P → ( Q → P )

b) ( P → ( Q → R )) → ((P → Q) → ( P → R)) c) ( Q → ~ P) → ((Q → P) → ~ Q)

3. 下列子句是否可以合一,如果可以,写出最一般合一置换 a) P(x, B, B) 和 P(A, y, z)

b) P( g( f (v)) , g(u) ) 和 P(x , x) c) P( x , f(x) ) 和 P(y, y) d) P(y, y , B) 和 P( z, x , z)

4. 解释 P( f (x, x), A) 和 P( f (y , f (y, A )) , A )为什么不能合一

5. 将下列公式化为skolem子句形

a) ((x) P(x) ∨ (x) Q(x)) → (x) ( P(x) ∨ Q(x) )

b) (x) ( P(x) → (y) ( (z) Q(x , y) → ~ (z)R(y , x) ) ) c) (x) P(x) → (x) ( ((z) Q(x ,z )) ∨ (z)R(x , y , z) )

6. 用归结法证明:存在一个绿色物体,如果有如下条件存在: a) 如果可以推动的物体是蓝色的,那么不可以推动的物体是绿色的 b) 所有的物体或者是蓝色的,或者是绿色的,但不能同时具有两种颜色。 c) 如果存在一个不能推动的物体,那么所有的可推动的物体是蓝色的。 d) 物体O1是可以推动的 e) 物体O2是不可以推动的

7. 设S={ P(x), Q(f(x), y) },试写出H域上的元素,并写出S的一个基例。

答案部分

第一章 课后习题答案

说明:由于人工智能的很多题目都很灵活,以下解答仅供参考。

1、对N=5、k≤3时,求解传教士和野人问题的产生式系统各组成部分进行描述(给出综合数据库、规则集合的形式化描述,给出初始状态和目标条件的描述),并画出状态空间图。

答: 1,综合数据库 定义三元组:(m, c, b) 其中:

2,规则集

规则集可以用两种方式表示,两种方法均可。

第一种方法: 按每次渡河的人数分别写出每一个规则,共(3 0)、(0 3)、(2 1)、(1 1)、(1 0)、(0 1)、(2 0)、(0 2)八种渡河的可能(其中(x y)表示x个传教士和y个野人上船渡河),因此共有16个规则(从左岸到右岸、右岸到左岸各八个)。注意:这里没有(1 2),因为该组合在船上的传教士人数少于野人人数。 规则集如下:

r1:IF (m, c, 1) THEN (m-3, c, 0)

,表示传教士在河左岸的人数。 ,表示野人在河左岸的认输。

,b=1,表示船在左岸,b=0,表示船在右岸。

r2:IF (m, c, 1) THEN (m, c-3, 0) r3:IF (m, c, 1) THEN (m-2, c-1, 0) r4:IF (m, c, 1) THEN (m-1, c-1, 0) r5:IF (m, c, 1) THEN (m-1, c, 0) r6:IF (m, c, 1) THEN (m, c-1, 0) r7:IF (m, c, 1) THEN (m-2, c, 0) r8:IF (m, c, 1) THEN (m, c-2, 0) r9 :IF (m, c, 0) THEN (m+3, c, 1) r10:IF (m, c, 0) THEN (m, c+3, 1) r11:IF (m, c, 0) THEN (m+2, c+1, 1) r12:IF (m, c, 0) THEN (m+1, c+1, 1) r13:IF (m, c, 0) THEN (m+1, c, 1) r14:IF (m, c, 0) THEN (m, c+1, 1) r15:IF (m, c, 0) THEN (m+2, c, 1) r16:IF (m, c, 0) THEN (m, c+2, 1)

第二种方法: 将规则集综合在一起,简化表示。规则集如下: r1:IF (m, c, 1) and 0< i+j〈=3 and (i>= j or i=0) THEN (m-i, c-j, 0) r2:IF (m, c, 0) and 0< i+j〈=3 and (i>= j or i=0) THEN (m+i, c+j, 1) 3,初始状态:(5, 5, 1) 4,结束状态:(0, 0, 0)

2、对量水问题给出产生式系统描述,并画出状态空间图。

有两个无刻度标志的水壶,分别可装5升和2升的水。设另有一水缸,可用来向水壶灌水或倒出水,两个水壶之间,水也可以相互倾灌。已知5升壶为满壶,2升壶为空壶,问如何通过倒水或灌水操作,使能在2升的壶中量出一升的水来。

答: 1,综合数据库 定义两元组:(L5, L2)

其中:0<=L5<=5,表示容量为5升的壶的当前水量。 0<=L2<=2,表示容量为2升的壶的当前水量。 2,规则集

r1:IF (L5, L2) THEN (5, L2) /* 将L5灌满水 */ r2:IF (L5, L2) THEN (L5, 2) /* 将L2灌满水 */ r3:IF (L5, L2) THEN (0, L2) /* 将L5水到光 */ r4:IF (L5, L2) THEN (L5, 0) /* 将L2水到光 */

r5:IF (L5, L2) and L5+L2<=5 THEN (L5+L2, 0) /* L2到入L5中 */ r6:IF (L5, L2) and L5+L2>5 THEN (5, L5+L2-5) /* L2到入L5中 */ r7:IF (L5, L2) and L5+L2<=2 THEN (0, L5+L2) /* L5到入L2中 */ r8:IF (L5, L2) and L5+L2>5 THEN (L5+L2-2, 2) /* L5到入L2中 */

3,初始状态:(5, 0)

4,结束条件:(x, 1),其中x表示不定。当然结束条件也可以写成:(0, 1)

3、对梵塔问题给出产生式系统描述,并讨论N为任意时状态空间的规模。

相传古代某处一庙宇中,有三根立柱,柱子上可套放直径不等的N个圆盘,开始时所有圆盘都放在第一根柱子上,且小盘处在大盘之上,即从下向上直径是递减的。和尚们的任务是把所有圆盘一次一个地搬到另一个柱子上去(不许暂搁地上等),且小盘只许在大盘之上。问和尚们如何搬法最后能完成将所有的盘子都移到第三根柱子上(其余两根柱子,有一根可作过渡盘子使用)。

求N=2时,求解该问题的产生式系统描述,给出其状态空间图。讨论N为任意时,状态空间的规模。 答: 1,综合数据库 定义三元组:(A, B, C)

其中A, B, C分别表示三根立柱,均为表,表的元素为1~N之间的整数,表示N个不同大小的盘子,数值小的数表示小盘子,数值大的数表示大盘子。表的第一个元素表示立柱最上面的柱子,其余类推。 2,规则集

为了方便表示规则集,引入以下几个函数:

first(L):取表的第一个元素,对于空表,first得到一个很大的大于N的数值。 tail(L):取表除了第一个元素以外,其余元素组成的表。 cons(x, L):将x加入到表L的最前面。 规则集:

r1: IF (A, B, C) and (first(A) < first(B)) THEN (tail(A), cons(first(A), B), C) r2: IF (A, B, C) and (first(A) < first(C)) THEN (tail(A), B, cons(first(A), C)) r3: IF (A, B, C) and (first(B) < first(C)) THEN (A, tail(B), cons(first(B), C)) r4: IF (A, B, C) and (first(B) < first(A)) THEN (cons(first(B), A), tail(B), C) r5: IF (A, B, C) and (first(C) < first(A)) THEN (cons(first(C), A), B, tail(C)) r6: IF (A, B, C) and (first(C) < first(B)) THEN (A, cons(first(C), B), tail(C)) 3,初始状态:((1,2,...,N),(),()) 4,结束状态:((),(),(1,2,...,N))

问题的状态规模: 每一个盘子都有三中选择:在A上、或者在B上、或者在C上,共N个盘子,所以共有

4、对猴子摘香蕉问题,给出产生式系统描述。

一个房间里,天花板上挂有一串香蕉,有一只猴子可在房间里任意活动(到处走动,推移箱子,攀登箱子等)。设房间里还有一只可被猴子移动的箱子,且猴子登上箱子时才能摘到香蕉,问猴子在某一状态下(设猴子位置为a,箱子位置为b,香蕉位置为c),如何行动可摘取到香蕉。 答: 1,综合数据库

定义5元组:(M, B, Box, On, H) 其中:

M:猴子的位置

种可能。即问题的状态规模为

B:香蕉的位置 Box:箱子的位置 On=0:猴子在地板上 On=1:猴子在箱子上 H=0:猴子没有抓到香蕉 H=1:猴子抓到了香蕉 2,规则集

r1: IF (x, y, z, 0, 0) THEN (w, y, z, 0, 0) 猴子从x处走到w处

r2: IF (x, y, x, 0, 0) THEN (z, y, z, 0, 0) 如果猴子和箱子在一起,猴子将箱子推到z处 r3: IF (x, y, x, 0, 0) THEN (x, y, x, 1, 0) 如果猴子和箱子在一起,猴子爬到箱子上 r4: IF (x, y, x, 1, 0) THEN (x, y, x, 0, 0) 如果猴子在箱子上,猴子从箱子上下来

r5: IF (x, x, x, 1, 0) THEN (x, x, x, 1, 1) 如果箱子在香蕉处,猴子在箱子上,猴子摘到香蕉 其中x, y, z, w为变量 3,初始状态 (c, a, b, 0, 0)

4,结束状态 (x1, x2, x3, x4, 1) 其中x1~x4为变量。

5、对三枚钱币问题给出产生式系统描述及状态空间图。

设有三枚钱币,其排列处在"正、正、反"状态,现允许每次可翻动其中任意一个钱币,问只许操作三次的情况下,如何翻动钱币使其变成"正、正、正"或"反、反、反"状态。 答: 1,综合数据库 定义四元组:(x, y, z, n)

其中x,y,x∈[0,1],1表示钱币为正面,0表示钱币为方面。n=0,1,2,3,表示当前状态是经过n次翻钱币得到的。 2,规则库

r1: IF (x, y, z, n) THEN (~x, y, z, n+1) r2: IF (x, y, z, n) THEN (x, ~y, z, n+1) r3: IF (x, y, z, n) THEN (x, y, ~z, n+1) 其中~x表示对x取反。 3,初始状态 (1, 1, 0, 0)

4,结束状态 (1, 1, 1, 3) 或者(0, 0, 0, 3)

6、说明怎样才能用一个产生式系统把十进制数转换为二进制数,并通过转换141.125这个数为二进制数,阐明其运行过程。

提示:将十进制数分为整数部分和小数部分两部分。用四元组(a, b, c, d)表示综合数据库,其中a, b表示到目前为止还没有转换的十进制数的整数部分和小数部分,c, d表示已经转换得到的二进制数的整数部分和小数部分。然后根据十进制数转换二进制数的原理,分别定义整数的转换规则和小数的转换规则,一次规则的执行,转换得到二进制数的一位。

7、设可交换产生式系统的一条规则R可应用于综合数据库D来生成出D',试证明若R存在逆,则可应用于D'的规则集等同于可应用于D的规则集。

答: 设规则R的逆用R'表示。由题意有R应用于D后,得到数据库D',由可交换系统的性质,

有: rule(D)rule(D')

其中rule(D)表示可应用于D的规则集合。

由于R'是R'的逆,所以R'应用于D'后,得到数据库D。同样由可交换系统的性质, 有:

rule(D')

rule(D)

综合上述两个式子,有rule(D')=rule(D)。

8、一个产生式系统是以整数的集合作为综合数据库,新的数据库可通过把其中任意一对元素的乘积添加到原数据库的操作来产生。设以某一个整数子集的出现作为目标条件,试说明该产生式系统是可交换的。 答: 说明一个产生式系统是可交换的,就是要证明该产生式系统满足可交换产生式系统的三条性质。 (1)该产生式系统以整数的集合为综合数据库,其规则是将集合中的两个整数相乘后加入到数据库中。由于原来数据库是新数据库的子集,所以原来的规则在新数据库中均可以使用。所以满足可交换产生式系统的第一条性质。

(2)该产生式系统以某个整数的子集的出现为目标条件,由于规则执行的结果只是向数据库中添加数据,如果原数据库中已经满足目标了,即出现了所需要的整数子集,规则的执行结果不会破坏该整数子集的出现,因此新的数据库仍然会满足目标条件。满足可交换产生式系统的第二个性质。

(3)设D是该产生式系统的一个综合数据库。对D施以一个规则序列后,得到一个新的数据库D'。该规则序列中的有些规则有些是可以应用于D的,这些规则用R1表示。有些规则是不能应用于D的,这些规则用R2表示。由于R1中的规则可以直接应用与D,所以R1中规则的应用与R2中规则的执行结果无关,也与R1中其他的规则的执行无关。所以可以认为,先将R1中所有的规则对D应用,然后再按照原来的次序应用R2中的规则。因此对于本题的情况,这样得到的综合数据库与D'是相同的。而由于R1中一条规则的执行与其他的规则无关,所以R1中规则的执行顺序不会影响到最终的结果。因此满足可交换产生式系统的第三个条件。

因此这样一个产生式系统是一个可交换的产生式系统。

第二章 习题答案

1、用回溯策略求解如下所示二阶梵塔问题,画出搜索过程的状态变化示意图。

对每个状态规定的操作顺序为:先搬1柱的盘,放的顺序是先2柱后3柱;再搬2柱的盘,放的顺序是先3柱后1柱;最后搬3柱的盘,放的顺序是先1柱后2柱。

答: 为了方便起见,我们用((AB)()())这样的表表示一个状态。这样得到搜索图如下:

2、滑动积木块游戏的棋盘结构及某一种将牌的初始排列结构如下:

其中B表示黑色将牌,W表示白色将牌,E表示空格。游戏的规定走法是: (1)任意一个将牌可以移入相邻的空格,规定其耗散值为1;

(2)任意一个将牌可相隔1个或2个其他的将牌跳入空格,规定其耗散值等于跳过将牌的数目;游戏要达到的目标是使所有白将牌都处在黑将牌的左边(左边有无空格均可)。对这个问题,定义一个启发函数h(n),并给出利用这个启发函数用算法A求解时所产生的搜索树。你能否辨别这个h(n)是否满足下界范围?在你的搜索树中,对所有的节点满足不满足单调限制? 提示:可定义h为: h=B右边的W的数目

设j节点是i节点的子节点,则根据走法不同,h(i)-h(j)的值和C(i, j)分为如下几种情况: (1)B或W走到了相邻的一个空格位置,此时: h(i)-h(j)=0, C(i,j)=1; (2)W跳过了1或2个W,此时 h(i)-h(j)=0, C(i,j)=1或2;

(3)W向右跳过了一个B(可能同时包含一个W),此时: h(i)-h(j)=-1, C(i,j)=1或2; (4)W向右跳过了两个B,此时: h(i)-h(j)=-2, C(i,j)=2;

(5)W向左跳过了一个B(可能同时包含一个W),此时: h(i)-h(j)=1, C(i,j)=1或2; (6)W向左跳过了两个B,此时: h(i)-h(j)=2, C(i,j)=2; (7)B跳过了1或2个B,此时 h(i)-h(j)=0, C(i,j)=1或2;

(8)B向右跳过了一个W(可能同时包含一个B),此时: h(i)-h(j)=1, C(i,j)=1或2; (9)B向右跳过了两个W,此时: h(i)-h(j)=2, C(i,j)=2;

(10)B向左跳过了一个W(可能同时包含一个B),此时: h(i)-h(j)=-1, C(i,j)=1或2; (11)B向左跳过了两个W,此时: h(i)-h(j)=-2, C(i,j)=2; 纵上所述,无论是哪一种情况,具有: h(i)-h(j)≤C(i,j)

且容易验证h(t)=0,所以该h是单调的。由于h满足单调条件,所以也一定有h(n)≤h*(n),即满足A*条件。

3、对1.4节中的旅行商问题,定义两个h函数(非零),并给出利用这两个启发函数用算法A求解1.4节中的五城市问题。讨论这两个函数是否都在h*的下界范围及求解结果。

答: 定义h1=n*k,其中n是还未走过的城市数,k是还未走过的城市间距离的最小值。 h2=其中n是还未走过的城市数,ki是还未走过的城市间距离中n个最小的距离。 显然这两个h函数均满足A*条件。

4、2.1节四皇后问题表述中,设应用每一条规则的耗散值均为1,试描述这个问题h*函数的一般特征。你是否认为任何h函数对引导搜索都是有用的?

提示:对于四皇后问题,如果放一个皇后的耗散值为1的话,则任何一个解的耗散值都是4。因此如果h是对该耗散值的估计,是没有意义的。对于像四皇后这样的问题,启发函数应该是对找到解的可能性的评价。比如像课上讲到的,利用一个位置放皇后后,消去的对角线的长度来进行评价。

5、对N=5,k≤3的M-C问题,定义两个h函数(非零),并给出用这两个启发函数的A算法搜索图。讨论用这两个启发函数求解该问题时是否得到最佳解。

答: 定义h1=M+C-2B,其中M,C分别是在河的左岸的传教士人数和野人人数。B=1表示船在左岸,B=0表示船在右岸。 也可以定义h2=M+C。

h1是满足A*条件的,而h2不满足。

要说明h(n)=M+C不满足A*条件是很容易的,只需要给出一个反例就可以了。比如状态(1, 1, 1),h(n)=M+C=1+1=2,而实际上只要一次摆渡就可以达到目标状态,其最优路径的耗散值为1。所以不满足A*的条件。

下面我们来证明h(n)=M+C-2B是满足A*条件的。

我们分两种情况考虑。先考虑船在左岸的情况。如果不考虑限制条件,也就是说,船一次可以将三人从左岸运到右岸,然后再有一个人将船送回来。这样,船一个来回可以运过河2人,而船仍然在左岸。而最后剩下的三个人,则可以一次将他们全部从左岸运到右岸。所以,在不考虑限制条件的情况下,也至少需要

摆渡次。其中分子上的"-3"表示剩下三个留待最后一次运过去。除以"2"是因为一

个来回可以运过去2人,需要个来回,而"来回"数不能是小数,需要向上取整,

这个用符号

表示。而乘以"2"是因为一个来回相当于两次摆渡,所以要乘以2。而最后的"+1",则表示将剩下的3个运

过去,需要一次摆渡。 化简有:

再考虑船在右岸的情况。同样不考虑限制条件。船在右岸,需要一个人将船运到左岸。因此对于状态(M,C,0)来说,其所需要的最少摆渡数,相当于船在左岸时状态(M+1,C,1)或(M,C+1,1)所需要的最少摆渡数,再加上第一次将船从右岸送到左岸的一次摆渡数。因此所需要的最少摆渡数为:(M+C+1)-2+1 。其中(M+C+1)的"+1"表示送船回到左岸的那个人,而最后边的"+1",表示送船到左岸时的一次摆渡。 化简有:(M+C+1)-2+1=M+C。

综合船在左岸和船在右岸两种情况下,所需要的最少摆渡次数用一个式子表示为:M+C-2B。其中B=1表示船在左岸,B=0表示船在右岸。 由于该摆渡次数是在不考虑限制条件下,推出的最少所需要的摆渡次数。因此,当有限制条件时,最优的摆渡次数只能大于等于该摆渡次数。所以该启发函数h是满足A*条件的。

6、证明OPEN表上具有f(n)<f*(s)的任何节点n,最终都将被A*选择去扩展。

答:题目的另一个说法是:当A*结束时,OPEN表中任何一个具有f(n)<f*(s)的节点都被扩展了。 用反证法证明。

假设在A*结束的时候,OPEN表中有一个节点n没有被扩展,且f(n)<f*(s)。A*算法每次从OPEN表中取出f值最小的节点扩展,当该节点是目标节点时,算法结束。并且由可采纳性定理,知道这时A*找到了从初始节点到目标节点的最佳路径,即f(t)=f*(s)。如果这时OPEN中存在f(n)<f*(s)的节点n,由于f(n)<f(t),则这时A*算法应选择n扩展,而不是目标t,与A*已经结束矛盾。

7、如果算法A*从OPEN表中去掉任一节点n,对n有f(n)>F(F>f*(s)),试说明为什么算法A*仍然是可采纳的。

答: 因为A*选作扩展的任何一个节点n,均有f(n)≤f*(s),因此f(n)>f*(s)的节点,不会被A*所扩展。所以如果从OPEN表中去掉f(n)>f*(s)的节点,不会影响A*的可采纳性。而F是f*(s)的上界范围,因此去掉f(n)>F的节点也同样不会影响A*的可采纳性。

8、用算法A逆向求解图2.7中的八数码问题,评价函数仍定义为f(n)=d(n)+w(n)。逆向搜索在什么地方和正向搜索相会。

提示:对于8数码问题,逆向搜索和正向搜索是完全一样的,只是把目标状态和初始状态对调就可以了。

9、讨论一个h函数在搜索期间可以得到改善的几种方法。

提示:在搜索期间改善h函数,是一种动态改变h函数的方法。像改进的A*算法中,对NEST中的节点按g值的大小选择待扩展的节点,相当于令这些节点的h=0,就是动态修改h函数的一种方法。 由定理6,当h满足单调条件时,A*所扩展的节点序列,其f是非递减的。对于任何节点i,j,如果j是i的子节点,则有f(i)≤f(j)。利用该性质,我们可以提出另一种动态修改h函数的方法: f(j)=max(f(i), f(j))

以f(j)作为节点j的f值。f值的改变,隐含了h值的改变。

当h不满足单调条件时,经过这样修正后的h具有一定的单调性质,可以减少重复节点的可能性。

10、四个同心圆盘的扇区数字如图所示,每个圆盘可单独转动。问如何转动圆盘使得八个径向的4个数字和均为12。

提示:很多知识对求解问题有好处,这些知识并不一定要写成启发函数的形式,很多情况下,也不一定能清晰的写成一个函数的形式。

为了叙述方便,我们将两个相对的扇区称为相对扇区,图中阴影部分的扇区称为阴影扇区,非阴影部分的扇区称为非阴影扇区。 由题意,在目标状态下,一个扇区的数字之和等于12,一个相对扇区的数字之和等于24,而一个阴影扇区或者非阴影扇区的数字之和为48。为此,我们可以将目标进行分解,首先满足阴影扇区的数字之和为48(这时非阴影部分的数字和也一定为48)。为了这个目标我们可以通过每次转动圆盘45o实现。在第一个目标被满足的情况下,我们再考虑第二个目标:每一个相对扇区的数字和为24。在实现这个目标的过程中,我们希望不破坏第一个目标。为此我们采用转动90o的方式实现,这样即可以调整相对扇区的数字和,又不破坏第一个目标。在第二个目标实现之后,我们就可以实现最终目标:扇区内的数字和为12。同样我们希望在实现这个目标的时候,不破坏前两个目标。为此我们采用转动180o的方式实现。这样同样是即可以保证前两个目标不被破坏,又可以实现第三个目标。 经过这样的分析以后,我们发现该问题就清晰多了。当然,是否每一个第一、第二个目标的实现,都能够实现第三个目标呢?有可能不一定。在这种情况下,就需要在发现第三个目标不能实现时,重新试探其他的第一、第二个目标。

第3章 课后习题答案

说明:由于人工智能的很多题目都很灵活,以下解答仅供参考。 1、数字重写问题的变换规则如下: 6→3,3 4→3,1 6→4,2 3→2,1 4→2,2 2→1,1

问如何用这些规则把数字6变换成一个由若干个1组成的数字串。试用算法AO*进行求解,并给出搜索图。求解时设k-连接符的耗散值是k个单位,h函数值规定为:h(1)=0,h(n)=n(n≠1)。 答:此题要求按照课中例题的方式,给出算法,以下是每个循环结束时的搜索图。

上面这种做法比较简单,也可以如下做:

2、余一棋的弈法如下:两棋手可以从5个钱币堆中轮流拿走一个、两个或三个钱币,拣起最后一个钱币者算输。试通过博弈证明,后走的选手必胜,并给出一个简单的特征标记来表示取胜策略。 答:

从该搜索图可以看出,无论先走者选择哪个走步,后走者都可以走到标记为A的节点,该节点只剩下一枚钱币,所以先走者必输。 对于一般的具有n个钱币的情况,当n=4×m+1时,后走者存在取胜策略。因为后走者可以根据先走者的走法,选择自己的走法,使得双方拿走的钱币数为4,这样经过m个轮回后,共拿走了4×m个钱币,只剩下了一枚钱币,而此时轮到先走者走棋。所以在这种情况下,后走者存在取胜的策略。 对于钱币数不等于4×m+1的情况,先走者可以根据实际的钱币数选择取走的钱币数,使得剩下的钱币数为4×m+1个,此时先走者相当于4×m+1个钱币时的后走者了。因此在这种情况下,先走者存在获胜的策略。

3、对下图所示的博弈树,以优先生成左边节点顺序来进行α-β搜索,试在博弈树上给出何处发生剪枝的标记,并标明属于α剪枝还是β剪枝。

答:

第四章 课后习题答案

1、化下列公式成子句形式: (1)(

x)[P(x)→P(x)]

(2){~{(x)P(x)}}→(x)[~P(x)] (3)~(x){P(x)→{((4)(

y)[P(y)→P(f(x,y))]∧~(

y)[Q(x,y)→P(y)]}}

y)[P(x,y)

x)(y){[P(x,y)→Q(y,x)]∧[Q(y,x)→S(x,y)]}→(x)(

→S(x,y)] 答:(1)( (

x)[P(x)→P(x)] x)[~P(x)∨P(x)]

{~P(x)∨P(x)}

(2){~{(x)P(x)}}→(x)[~P(x)] {( {( (

x)P(x)}∨(x)[~P(x)] x)P(x)}∨(y)[~P(y)] x)(y)[P(x)∨~P(y)]

{P(x)∨~P(f(a))} (3)~(

x){P(x)→{( ~( ~( ~( ~(

y)[P(y)→P(f(x,y))]∧~(y)[Q(x,y)→P(y)]}}

x){P(x)→{(y)[~P(y)∨P(f(x,y))]∧~(y)[~Q(x,y)∨P(y)]}} x){P(x)→{(y)[~P(y)∨P(f(x,y))]∧(y)[Q(x,y)∧~P(y)]}} x){P(x)→{(y)[~P(y)∨P(f(x,y))]∧(z)[Q(x,z)∧~P(z)]}} x){~P(x)∨{(

y)[~P(y)∨P(f(x,y))]∧(z)[Q(x,z)∧~P(z)]}}

(x){P(x)∧{(y)[P(y)∧~P(f(x,y))]∨( (x)(

y)( (x)(

y)(

z)[~Q(x,z)∨P(z)]}}

z){P(x)∧{[P(y)∧~P(f(x,y))]∨[~Q(x,z)∨P(z)]}}

z){P(x)∧[P(y)∨~Q(x,z)∨P(z)]∧[~P(f(x,y))∨~Q(x,z)∨P(z)]}

{P(a)∧[P(b)∨~Q(a,z)∨P(z)]∧[~P(f(a,b))∨~Q(a,z)∨P(z)]} {P(a), P(b)∨~Q(a,z1)∨P(z1), ~P(f(a,b))∨~Q(a,z2)∨P(z2)} (4)( ( (

x)(y){[P(x,y)→Q(y,x)]∧[Q(y,x)→S(x,y)]}→(x)(x)(y){[P(x,y)→Q(y,x)]∧[Q(y,x)→S(x,y)]}→(x)(

y)[P(x,y)→S(x,y)] y)[P(x,y)→S(x,y)]

x)(y){[~P(x,y)∨Q(y,x)]∧[~Q(y,x)∨S(x,y)]}→(u)(v)[~P(u,v)∨S(u,v)] x)(y){[~P(x,y)∨Q(y,x)]∧[~Q(y,x)∨S(x,y)]}}∨(u)(v)[~P(u,v)∨S(u,v)] y){[P(x,y)∧~Q(y,x)]∨[Q(y,x)∧~S(x,y)]}∨(u)(v)[~P(u,v)∨S(u,v)] y)(u)(v){[P(x,y)∧~Q(y,x)]∨[Q(y,x)∧~S(x,y)]}∨[~P(u,v)∨S(u,v)] y)(u)(v){[P(x,y)∨Q(y,x)]∧[P(x,y)∨~S(x,y)]∧[~Q(y,x)∨~S(x,y)]}∨[~P(u,

~{( (x)( (x)( (x)(v)∨S(u,v)] (x)(

y)(u)(v)[P(x,y)∨Q(y,x)∨~P(u,v)∨S(u,v)]∧[P(x,y)∨~S(x,y)∨~P(u,v)∨S(u,

v)]∧[~Q(y,x)∨~S(x,y)∨~P(u,v)∨S(u,v)]

[P(a,y)∨Q(y,a)∨~P(f(y),v)∨S(f(y),v)]∧[P(a,y)∨~S(a,y)∨~P(f(y),v)∨S(f(y),v)]∧[~Q(y,a)∨~S(a,y)∨~P(f(y),v)∨S(f(y),v)]

{P(a,y1)∨Q(y1,a)∨~P(f(y1),v)∨S(f(y1),v), P(a,y2)∨~S(a,y2)∨~P(f(y2),v2)∨S(f(y2),v2), ~Q(y3,a)∨~S(a,y3)∨~P(f(y3),v3)∨S(f(y3),v3)}

2、以一个例子证明置换的合成是不可交换的。

答:设有两个置换s1={a/x}和s2={x/y},合适公式P(x, y)。则: P(x, y)s1s2=P(a, x) P(x, y)s2s1=P(a, a)

二者不相等。所以说,置换的合成是不可交换的。

3、找出集{P(x,z,y),P(w,u,w),P(A,u,u)}的mgu。 答:{A/x, A./y, A/z, A/w, A/u}

4、说明下列文字集不能合一的理由:

(1){P(f(x,x),A),P(f(y,f(y,A)),A)} (2){~P(A),P(x)}

(3){P(f(A),x),P(x,A)}

答: (1){P(f(x,x),A),P(f(y,f(y,A)),A)}

在合一时,f(x,x)要与f(y,f(y,a))进行合一,x置换成y后,y要与f(y,a)进行合一,出现了嵌套的情况,所以不能进行合一。

(2){~P(A),P(x)}

一个是谓词P,一个是P的反,不能合一。 (3){P(f(A),x),P(x,A)}

在合一的过程中,x置换为f(A),而f(A)与A不能合一。

5、已知两个子句为 Loves(father(a),a) ~Loves(y,x)∨Loves(x,y)

试用合一算法求第一个子句和第二个子句的第一个文字合一时的结果。 答: 略

6、用归结反演法证明下列公式的永真性:

(1)(x){[P(x)→P(A)]∧[P(x)→P(B)]} (2)(

z)[Q(z)→P(z)]→{(x)[Q(x)→P(A)]∧[Q(x)→P(B)]}

(3)(x)(y){[P(f(x))∧Q(f(B))]→[P(f(A))∧P(y)∧Q(y)]} (4)(x)((5)(

y)P(x,y)→(

y)(x)P(x,y)

x){P(x)∧[Q(A)∨Q(B)]}→(x)[P(x)∧Q(x)]

答: (1)(x){[P(x)→P(A)]∧[P(x)→P(B)]} 目标取反化子句集:

~(x){[P(x)→P(A)]∧[P(x)→P(B)]} ~(x){[~P(x)∨P(A)]∧[~P(x)∨P(B)]} ( ( (

x){[P(x)∧~P(A)]∨[P(x)∧~P(B)]}

x){[P(x)∧~P(A)]∨P(x)}∧{[P(x)∧~P(A)]∨~P(B)}} x){P(x)∧[~P(A)∨P(x)]∧[P(x)∨~P(B)]∧[~P(A)∨~P(B)]}

P(x)∧[~P(A)∨P(x)]∧[P(x)∨~P(B)]∧[~P(A)∨~P(B)] 得子句集: 1, P(x1)

2, ~P(A)∨P{x2} 3, P(x3)∨~P(B) 4, ~P(A)∨

~P(B)

(2)(

z)[Q(z)→P(z)]→{(x)[Q(x)→P(A)]∧[Q(x)→P(B)]}

目标取反化子句集: ~{( ~{(

z)[Q(z)→P(z)]→{(x)[Q(x)→P(A)]∧[Q(x)→P(B)]}} z)[~Q(z)∨P(z)]→{(x)[~Q(x)∨P(A)]∧[~Q(x)∨P(B)]}}

~{~{(z)[~Q(z)∨P(z)]}∨{(x)[~Q(x)∨P(A)]∧[~Q(x)∨P(B)]}}

( (

z)(z)(

x){[~Q(z)∨P(z)]∧{[Q(x)∧~P(A)]∨[Q(x)∧~P(B)]}}

x){[~Q(z)∨P(z)]∧{Q(x)∧[Q(x)∨~P(B)]∧[~P(A)∨Q(x)]∧[~P(A)∨~P(B)]}

[~Q(z)∨P(z)]∧Q(x)∧[Q(x)∨~P(B)]∧[~P(A)∨Q(x)]∧[~P(A)∨~P(B)] 得子句集: 1, ~Q(z)∨P(z) 2, Q(x2) 3, Q(x3)∨~P(B) 4, ~P(A)∨Q(x4) 5, ~P(A)∨~P(B)

(3)(x)(y){[P(f(x))∧Q(f(B))]→[P(f(A))∧P(y)∧Q(y)]} 目标取反化子句集:

~(x)(y){[P(f(x))∧Q(f(B))]→[P(f(A))∧P(y)∧Q(y)]} ~(x)(y){~[P(f(x))∧Q(f(B))]∨[P(f(A))∧P(y)∧Q(y)]} ( x)( y){[P(f(x))∧Q(f(B))]∧[~P(f(A))∨~P(y)∨~Q(y)]} P(f(x))∧Q(f(B))∧[~P(f(A))∨~P(y)∨~Q(y)] 得子句集: 1,P(f(x1)) 2,Q(f(B))

3,~P(f(A))∨~P(y3)∨~Q(y3)

(4)(x)(

y)P(x,y)→(

y)(x)P(x,y)

目标取反化子句集: ~{(x)( ~{~[(

x)( ~{~[(

x)( [(x)( (x)(

y)P(x,

y)→(

y)(x)P(x,y)} y)(x)P(x,y)} v)(u)P(u,v)} u)~P(u,v)

y)P(x,y)]∨(y)P(x,y)]∨(

y)P(x,y)]∧(v)(y)(v)(

u)P(x,y)]∧~P(u,v)

P(a,y)∧~P(u,f(y)) 得子句集: 1,P(a,y1) 2,~P(u,f(y2))

(5)(x){P(x)∧[Q(A)∨Q(B)]}→(x)[P(x)∧Q(x)]

目标取反化子句集: ~{(

x){P(x)∧[Q(A)∨Q(B)]}→(x)[P(x)∧Q(x)]}

~{~{(x)P(x)∧[Q(A)∨Q(B)]}∨(x)[P(x)∧Q(x)]} {( {( (

x)P(x)∧[Q(A)∨Q(B)]}∧(x)P(x)∧[Q(A)∨Q(B)]}∧(x)(

x)[~P(x)∨~Q(x)]} y)[~P(y)∨~Q(y)]}

y){P(x)∧[Q(A)∨Q(B)]∧[~P(y)∨~Q(y)]}

P(x)∧[Q(A)∨Q(B)]∧[~P(y)∨~Q(y)] 得子句集: 1,P(x)

2,Q(A)∨Q(B) 3,~P(y)∨~Q(y)

7、以归结反演法证明公式( x)P(x)是[P(A1)∨P(A2)]的逻辑推论,然而,( x)P(x)的Skolem形即P(A)并非[P(A1)∨P(A2)]的逻辑推论,请加以证明。 答: (1)将(x)P(x)取反化为子句: ~(x)P(x) =( x)~P(x)

与条件[P(A1)∨P(A2)]合在一起得子句集: {~P(x), P(A1)∨P(A2)

}

所以,公式(x)P(x)是[P(A1)∨P(A2)]的逻辑推论。

(2)对于(x)P(x)的Skolem形,即P(A),取反后为~P(A),与条件[P(A1)∨P(A2)]合在一起得子句集:

{~P(A), P(A1)∨P(A2)}

该子句集不能进行归结,故P(A)不是[P(A1)∨P(A2)]的逻辑推论。

8、给定下述语句: John likes all kinds of food. Apples are food.

Anything anyone eats and isn't killed by is food. Bill eats peanuts and is still alive. Sue eats everything Bill eats.

(1)用归结法证明"John likes peanuts。" (2)用归结法提取回答"What food does Sue eat?" 答: 该问题用谓词公式描述如下: 已知:

(1)(x){Food(x)→Like(John, x)} (2)Food(Apple) (3)(

x)(

y){[Eat(y, x)∧~Kill(x, y)]→Food(x)}

(4)Eat(Bill, Peanut)∧~Kill(Penut, Bill) (5)(

x){Eat(Bill, x)→Eat(Sue, x)}

目标1:Like(John, Peanut) 目标2:(x)Food(x)∧Eat(Sue, x) 已知条件化子句集: (1)( = (

x){Food(x)→Like(John, x)} x){~Food(x)∨Like(John, x)}

=> {~Food(x)∨Like(John, x)} (2)Food(Apple) (3)( = (

= (

x)(x)(x)(

y){[Eat(y, x)∧~Kill(x, y)]→Food(x)} y){~[Eat(y, x)∧~Kill(x, y)]∨Food(x)} y){~[Eat(y, x)∨Kill(x, y)]∨Food(x)}

=> {~Eat(y, x)∨Kill(x, y)∨Food(x)} (4)Eat(Bill, Peanut)∧~Kill(Penut, Bill) => {Eat(Bill, Peanut), ~Kill(Penut, Bill)} (5)( = (

x){Eat(Bill, x)→Eat(Sue, x)} x){~Eat(Bill, x)∨Eat(Sue, x)}

=> ~Eat(Bill, x)∨Eat(Sue, x) 目标1取反化子句集: ~Like(John, Peanut) 目标2取反化子句集: ~{(x)Food(x)∧Eat(Sue, x)} = (

x)~Food(x)∨~Eat(Sue, x)

=> ~Food(x)∨~Eat(Sue, x)

对于目标1,经变量换名后,得子句集:

{~Food(x1)∨Like(John, x1),Food(Apple),~Eat(y2, x2)∨Kill(x2, y2)∨Food(x2),Eat(Bill, Peanut), ~Kill(Penut, Bill), ~Eat(Bill, x3)∨Eat(Sue, x3), ~Like(John, Peanut)} 归结树如下:

本文来源:https://www.bwwdw.com/article/suoj.html

Top