2.2.2 谓词逻辑表示方法
(1)定义谓词的个体,确定每一个谓词及个体的确切含义。
(2)根据所要表达的事物和概念,为每个谓词中的变元赋予特定的值。
(3)根据所要表达的知识的语义,用适当的连词、量词把这些谓词连接起来形成谓词公式。
例如:表示知识“所有教师都有自己的学生”。
定义谓词:T(x):x 是教师;S(y):y是学生;TS(x,y):x是y的老师。
表示知识:(∀x)(∃y)(T(x)→ TS(x,y)∧S(y))。
可读作:对所有x,如果x是一个教师,那么一定存在一个个体y,y的老师是x,且y是一个学生。
例2.1 机器人移盒子问题
机器人移盒子问题的初始状态如图2-1所示:机器人在c处,a、b处各有一桌子,a处桌子上放有一盒子。要完成:机器人从c处出发,走到a处拿起盒子,走到b处放下盒子,再退回到c处。用谓词逻辑表示方法来描述。
图2-1 机器人移盒子问题
(1)定义描述状态的谓词。
TABLE(x):x是桌子;EMPTY(y):y手中是空的;AT(y,z):y在z处;HOLDS(y,w):y拿着w;ON(w,x):w在x桌面上。
变元的个体域:x的个体域是{a,b};y的个体域是{robot};z的个体域是{a,b,c};w的个体域是{box}。
问题的初始状态:AT(robot,c);EMPTY(robot);ON(box,a);TABLE(a);TABLE(b)。
问题的目标状态:AT(robot,c);EMPTY(robot);ON(box,b);TABLE(a);TABLE(b)。
机器人行动的目标即把问题的初始状态转换为目标状态,而要实现问题状态的转换需要完成一系列的操作。
(2)定义描述操作的谓词。
条件部分:用来说明执行该操作必须具备的先决条件,可用谓词公式来表示。
动作部分:给出了该操作对问题状态的改变情况,通过在执行该操作前的问题状态中删去和增加相应的谓词来实现。
需要定义的操作:GOTO(x,y):从x处走到y处;PICKUP(x):在x处拿起盒子;SETDOWN(x):在x处放下盒子。
(3)各操作的条件和动作。
GOTO(x,y):条件:AT(robot,x);动作:删除AT(robot,x);添加 AT(robot,y)。
PICKUP(x):条件:ON(box,x),TABLE(x),AT(robot,x),EMPTY(robot);动作:删除EMPTY(robot),ON(box,x);添加 HOLDS(robot,box)。
SETDOWN(x):条件:AT(robot,x),TABLE(x),HOLDS(robot,box);动作:删除HOLDS(robot,box);添加EMPTY(robot),ON(box,x)。
机器人每执行一个操作前,都要检查该操作的先决条件是否可以满足。如果满足,就执行相应的操作;否则再检查上一个操作。
(4)机器人行动规划问题的求解过程如下:
状态1(初始状态):AT(robot,c),EMPTY(robot),ON(box,a),TABLE(a),TABLE(b)。
动作:Goto(c,a)得到:
状态2:AT(robot,a),EMPTY(robot),ON(box,a),TABLE(a),TABLE(b)。
动作:PICKUP(a)得到:
状态3:AT(robot,a),HOLDS(robot,box),TABLE(a),TABLE(b)。
动作:GOTO(a,b)得到:
状态4:AT(robot,b),HOLDS(robot,box),TABLE(a),TABLE(b)。
动作:SETDOWN(b)得到:
状态5:AT(robot,b),EMPTY(robot),ON(box,b),TABLE(a),TABLE(b)。
动作:GOTO(b,c)得到:
状态(目标状态)6:AT(robot,c),EMPTY(robot),ON(box,b),TABLE(a),TABLE(b)。