谓词表⽰法求解农夫、狼、⼭⽺、⽩菜问题(个⼈理解)
题⽬:
⽤谓词表⽰法求解农夫、狼、⼭⽺、⽩菜问题。农夫、狼、⼭⽺、⽩菜全部放在⼀条河的左岸,现在要把他们全部送到河的右岸去,农夫有⼀条船,过河时,除农夫外船上⾄多能载狼、⼭⽺、⽩菜中的⼀种。狼要吃⼭⽺,⼭⽺要吃⽩菜,除⾮农夫在那⾥。请完成以下问题:
问题:
⽤⼀阶谓词逻辑设计给出⼀个确保全部安全过河的规划,写出所⽤谓词的定义及本问题的求解过程。
解题思路:
步骤⼀:使⽤⾃然语⾔求解出问题答案;
步骤⼆:将问题求解过程中的事物的状态,位置,动作进⾏谓词定义;
步骤三:明晰问题的初始状态和⽬标状态;
步骤四:设置状态转换中的操作(包含条件和动作两部分),并且根据实际求解步骤连接起来;
步骤五:完善出从初始状态到⽬标状态的所有状态;
具体:
步骤⼀:使⽤⾃然语⾔求解出问题答案:
第⼀回合:左岸到右岸:农夫带⽺
右岸到左岸:不带东西
第⼆回合:左岸到右岸:农夫带狼
香港中文大学研究生专业右岸到左岸:农夫带⽺
第三回合:左岸到右岸:农夫带⽩菜
右岸到左岸:不带东西
第四回合:左岸到右岸:农夫带⽺
(从第⼆回合起问题有另⼀种最优解:
出纳工作内容
① 第⼆回合:左岸到右岸:农夫带菜
右岸到左岸:农夫带⽺
② 第三回合:左岸到右岸:农夫带狼
右岸到左岸:不带东西
③ 第四回合:左岸到右岸:农夫代⽺
可见从第⼆回合起有先带狼或者⽩菜两种选择,但求解问题⽆太⼤差异,故下⾯的第三问以第⼀种解决⽅法为例编写。
北京教育网站)
步骤⼆:将问题求解过程中的事物的状态,位置,动作进⾏谓词定义;
(将农夫定义为可主动操作体,⽤AT表⽰他的位置,将狼⽩菜⽺定义为⽆主动操作的个体,⽤ON表⽰它的位置 )
BANK(w):w是岸边;
EMPTY(x):x什么都没带;
AT(x,w):x在w处;
HOLDS(x,z):x带着z;
ON(z,w):z在w处;
学汽车美容w的个体域是{left,right};
x的个体域是{farmer};
z的个体域是{wolf,sheep,cabbage};
步骤三:明晰问题的初始状态和⽬标状态;
问题初始状态是:
AT(farmer,left)
EMPTY(farmer)
ON(wolf,left)
隔墙有耳英文ON(sheep,left)
无济于事的意思是什么ON(cabbage,left)
BANK(left)
wawaBANK(right)
问题⽬标状态是:
agency是什么意思AT(farmer,right)
EMPTY(farmer)
ON(wolf,right)
ON(sheep,right)
ON(cabbage,right)
BANK(left)
BANK(right)
步骤四:设置状态转换中的操作(包含条件和动作两部分),并且根据实际求解步骤连接起来;BOATING(x,y):农夫划船从x到y岸
条件:AT(x,y)
动作:删除表:AT(farmer,x)
donatello添加表:AT(farmer,y)
环评师PICKUP(x,y):农夫在x处带上y
条件:ON(y,x),BANK(x),AT(farmer,x),EMPTY(farmer)
动作:删除表:EMPTY(farmer),ON(y,x)
添加表:HOLDS(farmer,y)
SETDOWN(x,y):农夫在x处放下y
条件:AT(farmer,x),BANK(x),HOLDS(farmer,y)
动作:删除表:HOLDS(farmer,y)
添加表:EMPTY(farmer),ON(y,x)
第⼀回合:PICKUP(left,sheep),BOATING(left,right),SETDOWN(right,sheep),BOATING(right,left)
第⼆回合:PICKUP(left,wolf),BOATING(left,right),SETDOWN(right,wolf),PICKUP(right,sheep)BOATING(right,left),SETDOWN(left,sheep)
第三回合:PICKUP(left,cabbage),BOATING(left,right),SETDOWN(right,cabbage),BOATING(right,left)第四回合:PICKUP(left,sheep),BOATING(left,right),SETDOWN(right,sheep)
步骤五:完善出从初始状态到⽬标状态的所有状态;
全部状态图⽰如下:
⼩结:⼀开始想将“在船上”划分为⼀个状态,但那样势必要引⼊“下船”和“上船”两个操作,感觉对于机器来说实现起来更严谨,但懒得做了,在此⼩记已经做好的简易版,在此简单讨论此问题,将“船”划分为⼀个动作“BOATING”,当农夫“HOLDS”某物体时,默认中农夫和该物体都在船上,但不引⼊船状态。