人工智能导论——实验一(机器人搬箱子+爱因斯坦斑马问题)C+prolog+华为云Python实现

碎碎念

最近闲下来了,整理了下之前做过的实验和大作业,发出来给大家参考一下

实验目的及要求:

理解谓词逻辑知识表示的方法,掌握一阶谓词逻辑知识表示的基本原理,能够利用归结原理求解简单问题。掌握Prolog编程环境,熟悉逻辑推理编写过程。
主要知识点:谓词、原子公式、谓词公式、子句、子句集、空子句、归结原理。
重点:谓词公式、子句集和归结原理的实现。
难点:归结原理的实现。

实验内容:

实验项目1:

机器人搬盒子问题:设在一个房间里,有一个机器人ROBOT
,一个壁橱ALCOVE,一个积木块BOX,两个桌子A和B。开始时,机器人ROBOT在壁橱ALCOVE旁边,且两手空空,桌子A放着积木块BOX,桌子B是空的。机器人可把积木块BOX从一种状态桌子A上变换成另一种状态桌子B上,然后回到壁橱。用归结原理方法求解该问题?

实验要求:
1.用谓词公式表示问题的初始状态、目标状态以及机器人操作;
2.将谓词公式转换为子句集;
3. 利用归结原理对子句集中的子句进行归结。
4. 用Prolog实现机器人搬盒子的谓词逻辑。
5. 用Python或其他编程语言实现该问题的求解。

实验项目2:

爱因斯坦逻辑难题(斑马问题):5个不同国家且工作各不相同的人分别住在一条街上的5所房子里,每所房子的颜色不同,每个人都有自己养的不同宠物,喜欢喝不同的饮料。根据以下信息,你能告诉我哪所房子里的人养斑马,哪所房子里的人喜欢喝矿泉水吗?

  1. 英国人住在红色的房子里
  2. 西班牙人养了一条狗
  3. 日本人是一个油漆工
  4. 意大利人喜欢喝茶
  5. 挪威人住在左边的第一个房子里
  6. 绿房子在白房子的右边
  7. 摄影师养了一只蜗牛
  8. 外交官住在黄房子里
  9. 中间那个房子的人喜欢喝牛奶
  10. 喜欢喝咖啡的人住在绿房子里
  11. 挪威人住在蓝色的房子旁边
  12. 小提琴家喜欢喝橘子汁
  13. 养狐狸的人所住的房子与医生的房子相邻
  14. 养马的人所住的房子与外交官的房子相邻

实验要求:

  1. 用Prolog实现斑马问题的逻辑推理。
  2. 在华为云的ModelArts中用Python实现该问题的求解。

思考题:

  1. 如何将谓词公式转换为子句集?
  2. 谓词公式与子句集等值吗?

实验步骤

1、相关谓词定义
TABLE (x):x 是桌子
EMPTY (y):y 手中是空的
AT( y,z): y 在 z 附近
HOLDS (y,w):y 拿着 w
ON(w,x):w 在 x 上面
问题初始状态
TABLE (a)
TABLE (b)
EMPTY (robot)
AT( robot,c)
ON(box,a)
问题目标状态
TABLE (a)
TABLE (b)
EMPTY (robot)
AT( y,z)
ON(box,a)
机器人的操作:
GOTO(x,y):
条件:AT( robot,x)
动作:删除:AT( robot,x)
增加:AT( robot,y)
PICKUP(x):
条件:ON(box,x) ^ TABLE(x) ^ EMPTY(robot)
动作:删除: ON(box,x) ^ EMPTY(robot)
增加:HOLD(robot,box)
SETDOWN(x):
条件:HOLD(robot,box) ^ TABLE(x)
动作:
删除:HOLD(robot,box)
增加:EMPTY(robot) ^ ON(box,x)

2、将谓词公式转换为子句集
机器人x在c处手里没有盒子,盒子y在a处,那么机器人去a拿起盒子y:
(∀ x) (∀y) EMPTY (x) ⋀ AT( x,c)⋀ ON(y,a)→GO(a)⋀ PICK(y)
转化为子句集为
{ EMPTY (x,f(x)) ⋀ AT( y,g(y)⋀ ON(y,g(y) ,GO(x,f(x))⋀ PICK(y,g(y))

机器人x在a手中有盒子y,那么机器人x走到b放下盒子y:
(∀ x) (∀y) ┐ EMPTY (x) ⋀ AT( x,a)⋀ HOLDS (x,y)→GO(b)⋀ SET-DOWN(y)
转化为子句集为
{┐ EMPTY (x,f(x)) ⋀ AT( x,g(x))⋀ HOLDS (x,z(x)),GO(y,f(y))⋀ SET-DOWN(y,g(y))}

机器人x在b手中没有盒子,盒子y在b处,那么机器人走到c处:
(∀ x) (∀y) EMPTY (x) ⋀ AT( x,b)⋀ ON(y,b)→GO(c)
转化为子句集为
{EMPTY (x,f(x)) ⋀ AT( x,g(x))⋀ ON(y,f(y)),GO(x,z(x))}

你可能感兴趣的:(人工智能,c语言,华为,python,prolog)