猴子摘香蕉实验报告

发布时间:2023-03-03 12:00:56



RevisedbyBLUEontheafternoonofDecember12,2020.

实验1:猴子摘香蕉问题的VC编程实现
一、实验目的
利用一阶谓词逻辑求解猴子摘香蕉问题并通过编程来实现
二、编程环境
本文主要编译环境是Windows10VisualStudio2015Ubuntugcc编译来演示问题的另外几种状态的解法
三、问题描述
房内有一个猴子,一个箱子,天花板上挂了一串香蕉,其位置如图所示,猴子为了拿到香蕉,它必须把箱子搬到香蕉下面,然后再爬到箱子上。请定义必要的谓词,列出问题的初始化状态(即下图所示状态),目标状态(猴子拿到了香蕉,站在箱子上,箱子位于位置b)。

四、解决方案
1.定义描述环境状态的谓词。
AT(x,yxy处,个体域:x{monkey,box,banana}y{a,b,c}HAND(s:猴子手中拿着s,个体域:s{box,banana}ONBOX(monkey:猴子在箱子上;
2.使用谓词、连结词、量词来表示环境状态。问题的初始状态可表示为:
SoAT(monkey,a~HAND(sAT(box,c~ONBOX(monkeyAT(banana,b要达到的目标状态为:
SgAT(box,bONBOX(monkeyHAND(bananaAT(monkey,bAT(banana,b
3.从初始状态到目标状态的转化,猴子需要完成一系列操作,定义操作类谓
词表示其动作。
go(m,n:猴子从m走到n处,个体域:m,n{a,b,c}
movebox(m,n:猴子把箱子从m处移动到n处,个体域:m,n{a,b,c}onbox(m:猴子在m处爬上箱子,个体域:m{a,b,c}catch(banana:猴子摘到香蕉;
3个操作也可分别用条件和动作来表示。条件直接用谓词公式表示,是为完成相应操作所必须具备的条件;当条件中的事实使其均为真时,则可激活操作规则,于是可执行该规则中的动作部分。动作通过前后状态的变化表示,即通过从动作前删除或增加谓词公式来描述动作后的状态。

猴子摘香蕉实验报告

相关推荐