猴子摘香蕉实验报告(含代码)

2019-04-21 17:01

华 中 科 技 大 学

《人工智能与模式识别》

院 系:班 级:姓 名:同 组 人:指导老师:电 话:邮 箱:实 验 报 告

电子与信息工程系

日 期: 2013年12月24日

一、实验内容

利用一阶谓词逻辑求解猴子摘香蕉问题:房内有一个猴子,一个箱子,天花板上挂了一串香蕉,其位置如图所示,猴子为了拿到香蕉,它必须把箱子搬到香蕉下面,然后再爬到箱子上。请定义必要的谓词,列出问题的初始化状态(即下图所示状态),目标状态(猴子拿到了香蕉,站在箱子上,箱子位于位置b)。(附加:从初始状态到目标状态的谓词演算过程。)

二、实验平台

VC6.0

三、实验分析

1. 定义描述环境状态的谓词。

AT(x,w):x在t处,个体域:x?{monkey},w?{a,b,c,box}; HOLD(x,t):x手中拿着t,个体域:t?{box,banana}; EMPTY(x):x手中是空的;

ON(t,y):t在y处,个体域:y?{b,c,ceiling}; CLEAR(y):y上是空的;

BOX(u):u是箱子,个体域:u?{box}; BANANA(v):v是香蕉,个体域:v?{banana}; 2. 使用谓词、连结词、量词来表示环境状态。 问题的初始状态可表示为:

So:AT(monkey,a)?EMPTY(monkey)?ON(box,c)?ON(banana,ceiling)?CLEAR(b)?BOX(box)? BANANA(banana) 要达到的目标状态为:

Sg:AT(monkey,box)?HOLD(monkey,banana)?ON(box,b)?CLEAR(ceiling)?CLEAR(c)? BOX(box)?BANANA(banana)

3. 从初始状态到目标状态的转化, 猴子需要完成一系列操作, 定义操作类谓词表示其动

作。 WALK(m,n):猴子从m走到n处,个体域:m,n?{a,b,c};

CARRY(s,r):猴子在r处拿到s,个体域:r?{c,ceiling},s?{box,banana}; CLIMB(u,b):猴子在b处爬上u;

这3个操作也可分别用条件和动作来表示。条件直接用谓词公式表示,是为完成相应操作所必须具备的条件;当条件中的事实使其均为真时,则可激活操作规则,于是可执行该规则中的动作部分。动作通过前后状态的变化表示,即通过从动作前删除或增加谓词公式来描述动作后的状态。

WALK(m,n):猴子从m走到n处 条件:AT(monkey,m)

动作:??删除:AT(monkey,m)?增加:AT(monkey,n)

CARRY(s,r):猴子在r处拿到s

条件:AT(monkey,r)?EMPTY(monkey)?ON(s,r)?BOX(box)?BANANA(banana)

动作:??删除:EMPTY(monkey)?ON(s,r)?增加:HOLD(monkey,s)?CLEAR(r)

CLIMB(u,b):猴子在b处爬上u

条件:AT(monkey,b)?HOLD(monkey,u)?CLEAR(b)?BOX(box)?BANANA(banana)

动作:??删除:AT(monkey,b)?HOLD(monkey,u)?CLEAR(c)?增加:AT(monkey,u)EMPTY(monkey)?ON(u,c)

4. 按照行动计划, 一步步进行状态替换, 直至目标状态。

AT(monkey,a)?EMPTY(monkey)?ON(box,c)?ON(banana,ceiling)?CLEAR(b)?BOX(box)? BANANA(banana)

?WALK(a,c)用a代换m,用c代换n

AT(monkey,c)?EMPTY(monkey)?ON(box,c)?ON(banana,ceiling)?CLEAR(b)?BOX(box)? BANANA(banana)

?CARRY(c,box)用c代换s,用box代换r

AT(monkey,c)?HOLD(monkey,box)?ON(banana,ceiling)?CLEAR(b)?CLEAR(c)?BOX(box)?

BANANA(banana)

?WALK(c,b)用c代换m,用b代换n

AT(monkey,b)?HOLD(monkey,box)?ON(banana,ceiling)?CLEAR(b)?CLEAR(c)?BOX(box)?

BANANA(banana)

?CLIMB(box,b)用box代换u

AT(monkey,box)?EMPTY(monkey)?ON(box,b)?ON(banana,ceiling)?CLEAR(c)?BOX(box)?

BANANA(banana)

?CARRY(banana,ceiling)用banana代换s,用ceiling代换r

AT(monkey,box)?HOLD(monkey,banana)?ON(box,b)?CLEAR(ceiling)?CLEAR(c)?BOX(box)? BANANA(banana)(目标得解)

猴子行动的规则序列是:WALK(a,c)→CARRY(c,box)→WALK(c,b)→CLIMB(box,b)→ CARRY(banana,ceiling)

在上述过程中,我们应该注意,当猴子执行某一个操作之前,需要检查当前状态是否可使所要求的条件得到满足,即证明当前状态是否蕴涵操作所要求的状态的过程。在行动过程中, 检查条件的满足性后才进行变量的代换。代入新条件后的新状态如果是目标状态,则问题解决;否则看是否满足下面的操作,如果不满足或即使满足却又回到了原来的状态,那么代入无效。

四、源代码

#include struct State {

int monkey; /*-1:Monkey at A;0: Monkey at B;1:Monkey at C;*/

int box; /*-1:box at A;0:box at B;1:box at C;*/ int banana; /*Banana at B,Banana=0*/

int monbox; /*-1: monkey on the box;1: monkey the box;*/


猴子摘香蕉实验报告(含代码).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:重庆市南开中学2017-2018学年高三9月月考英语试题 Word版含解析

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: