猴子摘香蕉实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
catch(bana na)
AT(box,b) ? ONBOX(mo nkey) ? HAND(ba nan a) ? AT(mo nkey,b) ? AT(ba nan a,b)
(目标得解)
猴子行动的规则序列是:go(a,c戸movebox(c,b)fon box(b)宀catch(ba nanan)
ONBOX(m on key):猴子在箱子上;
2.使用谓词、连结词、量词来表示环境状态。
问题的初始状态可表示为:
So: AT(monkey,a)? ~HAND(s) ? AT(box,c) ? ~ONBOX(monkey) ? AT(banana,b)
要达到的目标状态为:
Sg: AT(box,b) ? ONBOX(mo nkey) ? HAND(ba nan a) ? AT(mo nkey,b) ? AT(ba nan a,b)
条件:AT(monkey,m)? ~HAND(s)?AT(box,m)?AT(banana,m)?~ONBOX(monkey)
删除
动作:
增加
catch(m):猴子摘到香蕉
条件:AT(monkey,m)? ~HAND(s)?AT(box,m)?AT(banana,m)?ONBOX(monkey)
删除:
四、源代码
#defi ne _CRT_SECURE_NO_WARNINGS
#i nclude <stdio.h>
int i;
void go(char x, char y)
{
prin tf( "step %d:mo nkey从%走到%c\n" ++i, x, y)〃x表示猴子的位置,y为箱子的位置
}
void movebox( char x, char y)
{
printf("step %d:monkey把箱子从%运到%c\n" ++i, x, y)〃x表示箱子的位置,y为香蕉的位置
}I
void on box()
{
printf("step %d:monkey爬上箱子\n", ++i);
}
void catch()
{
printf("step %d:monkey摘摘到香蕉\n", ++i);
go(m,n):猴子从m走到n处
条件:AT(monkey,m)
删除:AT (monkey, m)动作:
增加:AT (monkey, n)
movebox(m,n):猴子把箱子从m处移动到n处
条件:AT(monkey,m))?~HAND(s)?AT(box,m)
删除
动作:
增加
onbox(m):猴子在m处爬上箱子
实验
一、
利用一阶谓词逻辑求解猴子摘香蕉问题并通过编程来实现
Hale Waihona Puke Baidu二、
本文主要编译环境是Windows10Visual Studio 2015在Ubuntu 12.0用gcc编译来演示问题的另外几种状态的解法
三、
房内有一个猴子,一个箱子,天花板上挂了一串香蕉,其位置如图所示,猴子为了拿到 香蕉,它必须把箱子搬到香蕉下面,然后再爬到箱子上。请定义必要的谓词,列出问题的初

nonke v box banana
step
step_
step3 :non key胆上箱子step
}
void mai n()
{
char mon key, box, banana;
printf("请用a b c来表示猴子箱子香蕉的位置\n");
printf( "monkey\tbox\tbanana\n");
sca nf("%c"&mo nkey);
getchar();
prin tf("\t");
catch(ba nana)猴子摘到香蕉;
这 3 个操作也可分别用条件和动作来表示。 条件直接用谓词公式表示, 是为完成相应操 作所必须具备的条件; 当条件中的事实使其均为真时, 则可激活操作规则, 于是可执行该规 则中的动作部分。 动作通过前后状态的变化表示, 即通过从动作前删除或增加谓词公式来描 述动作后的状态。
{
movebox(box,ba nan a);
}I
on box();
catch ();
prin tf("\n");
getchar();
五、实验结果相关截图
Visual Studio 2015截图 (图一)
E C:\U5ers\1\,\/idco5\^^\Vi5Udl StudiesB'Pnojects滋子掃看蕉\尺序
动作:
增加:
4.按照行动计划 , 一步步进行状态替换 , 直至目标状态。
5.AT(monkey,a)? ~HAND(s)?AT(box,c)?~ONBOX(monkey)?AT(banana,b)
go(a, c)
AT(monkey,c)? HAND(box) ? AT(box,c) ? ~ONBOX(monkey) ? AT(banana,b)
始化状态(即下图所示状态),目标状态(猴子拿到了香蕉,站在箱子上,箱子位于位置b)。
忌n
ab
c
四、解决方案
1.定义描述环境状态的谓词。
AT(x,y):x在y处,个体域:x? {monkey, box,banana }, y? {a,b,c};
HAND(s):猴子手中拿着s,个体域:s? {box,banana};
sea nf("%c" &box); getchar();
printf("\t\t");
scanf("%c" &banana); getchar();
printf( "\n操作步骤如下\n"); if(mon key!=box)
{
go( mon key,box);
}
if( box!=ba nana)
movebox(c, b)
AT(monkey,b)? ~HAND(s) ? AT(box,b) ? ~ONBOX(monkey) ? AT(banana,b)
onbox(b)
AT(monkey,b)? ~HAND(s) ? AT(box,b) ? ONBOX(monkey) ? AT(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};
相关文档
最新文档