A CA B 图 机器人摞积木问题
B C 解:(1) 先定义描述状态的谓词
CLEAR(x):积木x上面是空的。 ON(x, y):积木x在积木y的上面。 ONTABLE(x):积木x在桌子上。 HOLDING(x):机械手抓住x。
HANDEMPTY:机械手是空的。
其中,x和y的个体域都是{A, B, C}。
问题的初始状态是:
ONTABLE(A) ONTABLE(B) ON(C, A) CLEAR(B) CLEAR(C) HANDEMPTY
问题的目标状态是: ONTABLE(C) ON(B, C) ON(A, B)
CLEAR(A) HANDEMPTY
(2) 再定义描述操作的谓词
在本问题中,机械手的操作需要定义以下4个谓词: Pickup(x):从桌面上拣起一块积木x。 Putdown(x):将手中的积木放到桌面上。
Stack(x, y):在积木x上面再摞上一块积木y。 Upstack(x, y):从积木x上面拣起一块积木y。
其中,每一个操作都可分为条件和动作两部分,具体描述如下:
Pickup(x)
条件:ONTABLE(x),HANDEMPTY,CLEAR(x) 动作:删除表:ONTABLE(x),HANDEMPTY 添加表:HANDEMPTY(x) Putdown(x)
条件:HANDEMPTY(x)
动作:删除表:HANDEMPTY(x)
添加表:ONTABLE(x),CLEAR(x) ,HANDEMPTY Stack(x, y)
条件:HANDEMPTY(x),CLEAR(y)
动作:删除表:HANDEMPTY(x),CLEAR(y)
添加表:HANDEMPTY,ON(x, y) ,CLEAR(x) Upstack(x, y)
条件:HANDEMPTY,CLEAR(y) ,ON(y,x) 动作:删除表:HANDEMPTY,ON(y, x) 添加表:HOLDING(y),CLEAR(x) (3) 问题求解过程
利用上述谓词和操作,其求解过程为: ONTABLE(A) ONTABLE(A) ONTABLE(A) ONTABLE(B) ONTABLE(B) Upstack(A,C) ONTABLE(B) Putdown(C) ONTABLE(C) Pickup(B) ON(C, A) HOLDING(C) CLEAR(A) CLEAR(B) CLEAR(A) CLEAR(B) CLEAR(C) CLEAR(B) CLEAR(C) HANDEMPTY CLEAR(C) HANDEMPTY ONTABLE(A) ONTABLE(A) ONTABLE(CONTABLE(CONTABLE(C) ONTABLE(C) ) Stack(C,B) Pickup(A) ) Stack(B,A) ON(B,C) HOLDING(B) ON(B,C) ON(B,C) CLEAR(A) CLEAR(A) ON(A,B) CLEAR(A) CLEAR(B) CLEAR(B) CLEAR(A) CLEAR(B) HANDEMPT CLEAR(C) HANDEMPT HOLDING(AY
2.10 用谓词表示法求解农夫、狼、山羊、白菜问题。农夫、狼、山羊、白菜全部放在一条河的左岸,现在要把他们全部送到河的右岸去,农夫有一条船,过河时,除农夫外船上至多能载狼、山羊、白菜中的一种。狼要吃山羊,山羊要吃白菜,除非农夫在那里。似规划出一个确保全部安全过河的计划。请写出所用谓词的定义,并给出每个谓词的功能及变量的个体域。
解:(1) 先定义描述状态的谓词
要描述这个问题,需要能够说明农夫、狼、羊、白菜和船在什么位置,为简化问题表示,取消船在河中行驶的状态,只描述左岸和右岸的状态。并且,由于左岸和右岸的状态互补,因此可仅对左岸或右岸的状态做直接描述。本题选择对左岸进行直接描述的方法,即定义谓词如下:
AL(x):x在左岸
其中,x的个体域是{农夫,船,狼,羊,白菜}。对应地,?AL(x)表示x在右岸。 问题的初始状态:
AL(农夫) AL(船) AL(狼) AL(羊) AL(白菜)
问题的目标状态:
?AL(农夫) ?AL(船) ?AL(狼) ?AL(羊) ?AL(白菜)
(2) 再定义描述操作的谓词
本题需要以下4个描述操作的谓词: L-R:农夫自己划船从左岸到右岸
L-R(x):农夫带着x划船从左岸到右岸 R-L:农夫自己划船从右岸到左岸
R-L(x) :农夫带着x划船从右岸到左岸 其中,x的个体域是{狼,羊,白菜}。
对上述每个操作,都包括条件和动作两部分。它们对应的条件和动作如下: L-R:农夫划船从左岸到右岸
条件:AL(船),AL(农夫),?AL(狼)∨?AL(羊),?AL(羊)∨?AL(白菜) 动作:删除表:AL(船),AL(农夫) 添加表:?AL(船),?AL(农夫) L-R(狼):农夫带着狼划船从左岸到右岸
条件:AL(船),AL(农夫),AL(狼),?AL(羊) 动作:删除表:AL(船),AL(农夫),AL(狼) 添加表:?AL(船),?AL(农夫),?AL(狼) L-R(羊):农夫带着羊划船从左岸到右岸
条件:AL(船),AL(农夫),AL(羊), AL(狼),AL(白菜) 或:AL(船),AL(农夫),AL(羊),?AL(狼),?AL(白菜) 动作:删除表:AL(船),AL(农夫),AL(羊) 添加表:?AL(船),?AL(农夫),?AL(羊) L-R(白菜):农夫带着白菜划船从左岸到右岸
条件:AL(船),AL(农夫),AL(白菜),?AL(狼) 动作:删除表:AL(船),AL(农夫),AL(白菜) 添加表:?AL(船),?AL(农夫),?AL(白菜) R-L:农夫划船从右岸到左岸
条件:?AL(船),?AL(农夫),AL(狼)∨AL(羊),AL(羊)∨AL(白菜) 或:?AL(船),?AL(农夫) ,?AL(狼),?AL(白菜),AL(羊) 动作:删除表:?AL(船),?AL(农夫) 添加表:AL(船),AL(农夫) R-L(羊) :农夫带着羊划船从右岸到左岸
条件:?AL(船),?AL(农夫),?AL(羊) ,?AL(狼),?AL(羊),AL(白菜) 动作:删除表:?AL(船),?AL(农夫),?AL(羊) 添加表:AL(船),AL(农夫),AL(羊) (3) 问题求解过程 AL(农夫) AL(狼) AL(农夫) AL(白菜) AL(船) AL(白菜) R-L AL(船) L-R(羊) L-R(狼) ?AL(农R-L(羊) AL(狼) ?AL(农AL(狼) 夫) AL(羊) 夫) AL(白菜) ?AL(船) ?AL(船) ?AL(羊) ?AL(狼) ?AL(羊) ?AL(羊) AL(白菜) AL(AL(农夫) AL(羊) 农夫) ?AL(农L-R(羊) AL(船) R-L L-R(白菜) AL(船) ?AL(农 夫) AL(羊) AL(羊) 夫) ?AL(船) AL(白菜) ?AL(白?AL(船) ?AL(羊) ?AL(狼) 菜) ?AL(白 ?AL(白 2.11 用谓词表示法求解修道士和野人问题。在河的北岸有三个修道士、三个野人和一条船,修道士们想用这条船将所有的人都运过河去,但要受到以下条件限制:
(1) 修道士和野人都会划船,但船一次只能装运两个人。
(2) 在任何岸边,野人数不能超过修道士,否则修道士会被野人吃掉。 假定野人愿意服从任何一种过河安排,请规划出一种确保修道士安全的过河方案。要求写出所用谓词的定义、功能及变量的个体域。
解:(1)定义谓词
先定义修道士和野人人数关系的谓词: G(x,y,S): 在状态S下x大于y
GE(x,y,S):在状态S下x大于或等于y
其中,x,y分别代表修道士人数和野人数,他们的个体域均为{0,1,2,3}。
再定义船所在岸的谓词和修道士不在该岸上的谓词: Boat(z,S):状态S下船在z岸
EZ(x,S): 状态S下x等于0,即修道士不在该岸上 其中,z的个体域是{L,R},L表示左岸,R表示右岸。 再定义安全性谓词:
Safety(z,x,y,S)≡(G(x,0,S)∧GE(x,y,S))∨(EZ(x,S))
其中,z,x,y的含义同上。该谓词的含义是:状态S下,在z岸,保证修道士安全,当且仅当修道士不在该岸上,或者修道士在该岸上,但人数超过野人数。该谓词同时也描述了相应的状态。
再定义描述过河方案的谓词:
L-R(x, x1, y, y1,S):x1个修道士和y1个野人渡船从河的左岸到河的右岸
条件:Safety(L,x-x1,y-y1,S’)∧Safety(R,3-x+x1,3-y+y1,S’)∧Boat(L,S) 动作:Safety(L,x-x1,y-y1,S’)∧Safety(R,3-x+x1,3-y+y1,S’)∧Boat(R,S’) R-L (x, x1, y, y1,S):x2个修道士和y2个野人渡船从河的左岸到河的右岸
条件:Safety(R,3-x-x2,3-y-y2,S’)∧Safety(L,x+x2,y+y2,S’)∧Boat(R,S) 动作:Safety(R,3-x-x2,3-y-y2,S’)∧Safety(L,x+x2,y+y2,S’)∧Boat(L,S’)
(2) 过河方案
Safety(L,3,3,S0)∧Safety(R,0,0,S0)∧Boat(L,S0)
L-R(3, 1, 3, 1,S0) L-R(3, 0, 3, 2,S0)
Safety(L,2,2,S1)∧Safety(R,1,1,S1)∧Boat(R,S1)
Safety(L,3,1,S1’)∧Safety(R,0,2,S1’)∧Boat(R,S
1’)
R-L (2, 1, 2, 0,S1) R-L (3,0, 1, 1,S1’)