人工智能实验 1:猴子摘香蕉问题的Python编程实现

一、实验描述

  1. 实验目的:
    (1)熟悉谓词逻辑表示法;
    (2)掌握人工智能谓词逻辑中的经典例子——猴子摘香蕉问题的编程实现。

  2. 实验内容:
    房子里有一只猴子(即机器人),位于a处。在c处上方的天花板上有一串蕉,猴子想吃,但摘不到。房间的b处还有一个箱子,如果猴子站到箱子上,就可以摸着天花板。如图1所示,对于上述问题,可以通过谓词逻辑表示法来描述知识。要求通过python语言编程实现猴子摘香蕉问题的求解过程。

二、涉及知识点

谓词逻辑表示法是一种基于数理逻辑的表示方法。

  1. 谓词的逻辑学基础
    (1)命题(proposition)
    命题的定义:
    断言:一个陈述句称为一个断言.
    命题:具有真假意义的断言称为命题.
    (2)命题的真值:
    T:表示命题的意义为真
    F:表示命题的意义为假
    (3)论域:
    由所讨论对象的全体构成的集合。亦称为个体域。(类似定义域)。
    个体:论域中的元素。
    (4)谓词:
    在谓词逻辑中命题是用形如 P(x1 ,x2 ,…,xn ) 的谓词来表示,其中:
    谓词名:是命题的谓语,表示个体的性质、状态或个体之间的关系
    个体:是命题的主语,表示独立存在的事物或概念
    (5)函数:
    设D是个体域,f:Dn→D是一个映射,其中,则称是Dn ={(x1 ,x2 ,…,xn )∣x1 ,x2 ,…,xn }上的一个n元函数,记作f( x1 ,x2 ,…,xn )。
    (6)谓词逻辑组成
    谓词符号
    变量符号
    常量符号
    函数符号
    其他辅助符号——括号、标点符号等。

  2. 连接词
    (1)合取(与)
    符号:∧
    定义:A∧B 为真,当且仅当A、B同时为真。
    (2)析取(或)
    符号:∨
    定义:A∨B为假,当且仅当A、B同时为假。
    (3)否定(非)
    符号:¬、∽
    定义:¬A为真,当且仅当A为假。
    (4)蕴涵
    符号:→,⇒
    定义:A→B为假,当且仅当A为真,B为假。
    等价式: A∨B
    表达语义:如果A,则B。

  3. 约束量词
    (1)全称量词
    符号:∀
    含义:表达变量x在其论域内的所有可能取值。意思是“所有的”、“任一个”。记为:(∀x)
    命题(∀x)P(x)为真,当且仅当对论域中的所有x,都有P(x)为真
    命题(∀x)P(x)为假,当且仅当至少存在一个xi∈D,使得P(xi)为假
    (2)存在量词
    • 符号:∃
    • 含义:表达变量x在其论域内,存在着、有一个、或至少有一个取值,使P(x)为真。记为(∃x)
    • 命题(∃x)P(x)为真,当且仅当至少存在一个xi∈D ,使得P(xi )为真
    • 命题(∃x)P(x)为假,当且仅当对论域中的所有x,都有P(x)为假

  4. 谓词公式
    (1)项(Item)
    a. 个体常量、个体变量是项;
    b. 若t1,t2 ,…,tn是项,f是n元函数,则f(t1,t2 ,…,tn)是项;
    c. 由a,b生成的表达式是项。
    通俗地说:个体常量、个体变量和函数统称为项。
    (2)原子谓词公式(原子公式)
    若 t1,t2 ,…,tn 是项,P是谓词,则称P(t1,t2 ,…,tn )为原子谓词公式。
    (3)谓词公式(合式)
    a. 原子公式是谓词公式;
    b. 若A是谓词公式,则¬A也是谓词公式;
    c. 若A,B是谓词公式,则A∨B,A∧B,A→B也都是谓词公式;
    d. 若A是谓词公式,x是项,则(∀x)A(x)和(∃x)A(x)都是谓词公式。
    e. 按a—d规则构造的表达式是谓词公式。
    (4)量词的辖域
    量词的约束范围,即指位于量词后面的单个谓词或者用括弧括起来的合式公式。
    (5)约束变元:
    受到量词约束的变元,即辖域内与量词中同名的变元称为约束变元
    (6)自由变元:
    不受约束的变元称为自由变元
    (7)变元的换名:
    谓词公式中的变元可以换名。要保持变量的论域不变。此外还需注意:第一:对约束变元,必须把同名的约束变元都统一换成另外一个相同的名字,且不能与辖域内的自由变元同名。第二:对辖域内的自由变元,不能改成与约束变元相同的名字。存在量词约束的变量换名同上。
    (8)谓词公式真值表
    取出公式中所有单个谓词,按所有可能的取值组合,再按连接词和量词的定义给出合适公式的真值。

  5. 谓词公式性质
    (1)否定之否定(=肯定)
    ¬(¬P)⇔P
    (2)逆否律
    P∨Q⇔¬P→Q
    (3)德.摩根定律( De.Morgen’s Law)
    ¬(P∨Q)⇔¬P∧¬Q
    ¬(P∧Q)⇔¬P∨¬Q
    (4)分配率
    P∧(Q∨R)⇔(P∧Q)∨(P∧R)
    P∨(Q∧R)⇔(P∨Q)∧(P∨R)
    (5)交换率
    P∧Q⇔Q∧P
    P∨Q⇔Q∨P
    (6)结合率
    (P∨Q)∨R⇔P∨(Q∨R)
    (P∧Q)∧R⇔P∧(Q∧R)
    (7)逆否率
    P→Q⇔¬Q→¬P
    ¬P∨Q⇔Q∨¬P
    (8)否定移过量词
    ¬(∀x)P(x)⇔(∃x)[¬P(x)]
    ¬(∃x)P(x)⇔(∀x)[¬P(x)]
    (9)约束量词移进
    (∀x)[P(x)∧Q(x)]⇔(∀x)P(x)∧(∀x)Q(x)
    (∃x)[P(x)∨Q(x)]⇔(∃x)P(x)∨(∃x)Q(x)
    (10)变量换名(论域不变、名字不冲突)
    (∀x)P(x)⇔(∀y)P(y)
    (∃x)P(x)⇔(∃y)P(y)

  6. 谓词逻辑表示方法
    谓词逻辑表示步骤:
    (1) 先根据要表示的知识定义谓词
    (2) 再用连词、量词把这些谓词连接起来

三、实验步骤

系统给出该实验部分代码,需要用户补全右侧开始至结束之间的代码
用户点击运行,系统返回运行结果给用户,如下: 测试输入:b a c
输出: 请用‘a’、‘b’、‘c’表示猴子香蕉箱子的位置
操作步骤如下:
step: 1 monkey从 b 走到c
step: 2 monkey把箱子从 c 运到a
step: 3 monkey爬上箱子
step: 4 monkey摘到香蕉

四、实验代码

'''
猴子摘香蕉问题的Python编程实现
'''
#全局变量i
i=0
def Monkey_go_box(x,y):
    global i
    i=i+1
    print('step:',i,'monkey从',x,'走到'+y)

def Monkey_move_box(x,y):
    global i
    i = i + 1
    print('step:', i, 'monkey把箱子从', x, '运到' + y)

def Monkey_on_box():
    global i
    i = i + 1
    print('step:', i, 'monkey爬上箱子')

def Monkey_get_banana():
    global i
    i = i + 1
    print('step:', i, 'monkey摘到香蕉')


import sys
print('请用‘a’、‘b’、‘c’表示猴子香蕉箱子的位置')

#读取输入的运行参数
codeIn=sys.stdin.read()
codeInList=codeIn.split()
#将运行参数赋值给monkey、banana、box
monkey=codeInList[0]
banana=codeInList[1]
box=codeInList[2]
print('操作步骤如下:')
#请用最少步骤完成猴子摘香蕉任务
###########开始#############

Monkey_go_box(monkey,box)

Monkey_move_box(box,banana)

Monkey_on_box()

Monkey_get_banana()

###########结束#############
  • 18
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值