猴子摘香蕉实验报告含代码.docx

上传人:b****2 文档编号:17496426 上传时间:2023-07-26 格式:DOCX 页数:15 大小:125.49KB
下载 相关 举报
猴子摘香蕉实验报告含代码.docx_第1页
第1页 / 共15页
猴子摘香蕉实验报告含代码.docx_第2页
第2页 / 共15页
猴子摘香蕉实验报告含代码.docx_第3页
第3页 / 共15页
猴子摘香蕉实验报告含代码.docx_第4页
第4页 / 共15页
猴子摘香蕉实验报告含代码.docx_第5页
第5页 / 共15页
猴子摘香蕉实验报告含代码.docx_第6页
第6页 / 共15页
猴子摘香蕉实验报告含代码.docx_第7页
第7页 / 共15页
猴子摘香蕉实验报告含代码.docx_第8页
第8页 / 共15页
猴子摘香蕉实验报告含代码.docx_第9页
第9页 / 共15页
猴子摘香蕉实验报告含代码.docx_第10页
第10页 / 共15页
猴子摘香蕉实验报告含代码.docx_第11页
第11页 / 共15页
猴子摘香蕉实验报告含代码.docx_第12页
第12页 / 共15页
猴子摘香蕉实验报告含代码.docx_第13页
第13页 / 共15页
猴子摘香蕉实验报告含代码.docx_第14页
第14页 / 共15页
猴子摘香蕉实验报告含代码.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

猴子摘香蕉实验报告含代码.docx

《猴子摘香蕉实验报告含代码.docx》由会员分享,可在线阅读,更多相关《猴子摘香蕉实验报告含代码.docx(15页珍藏版)》请在冰点文库上搜索。

猴子摘香蕉实验报告含代码.docx

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

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

华中科技大学

《人工智能与模式识别》

实验报告

院系:

电子与信息工程系

班级:

姓名:

同组人:

指导老师:

电话:

邮箱:

日期:

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;

4.

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

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

BANANA(banana)

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

BANANA(banana)

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

BANANA(banana)

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

BANANA(banana)

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

BANANA(banana)

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

structState

{

intmonkey;/*-1:

MonkeyatA;0:

MonkeyatB;1:

MonkeyatC;*/

intbox;/*-1:

boxatA;0:

boxatB;1:

boxatC;*/

intbanana;/*BananaatB,Banana=0*/

intmonbox;/*-1:

monkeyonthebox;1:

monkeythebox;*/

};

structStateStates[150];

char*routesave[150];

/*functionmonkeygoto,itmakesthemonkeygototheotherplace*/

voidmonkeygoto(intb,inti)

{

inta;

a=b;

if(a==-1)

{

routesave[i]="MonkeygotoA";

States[i+1]=States[i];

States[i+1].monkey=-1;

}

elseif(a==0)

{

routesave[i]="MonkeygotoB";

States[i+1]=States[i];

States[i+1].monkey=0;

}

elseif(a==1)

{

routesave[i]="MonkeygotoC";

States[i+1]=States[i];

States[i+1].monkey=1;

}

else

{

printf("parameteriswrong");

}

}

/*endfunctionmonkeyygoto*/

/*functionmovebox,themonkeymovetheboxtotheotherplace*/

voidmovebox(inta,inti)

{

intB;

B=a;

if(B==-1)

{

routesave[i]="monkeymoveboxtoA";

States[i+1]=States[i];

States[i+1].monkey=-1;

States[i+1].box=-1;

}

elseif(B==0)

{

routesave[i]="monkeymoveboxtoB";

States[i+1]=States[i];

States[i+1].monkey=0;

States[i+1].box=0;

}

elseif(B==1)

{

routesave[i]="monkeymoveboxtoC";

States[i+1]=States[i];

States[i+1].monkey=1;

States[i+1].box=1;

}

else

{

printf("parameteriswrong");

}

}

/*endfunctionmovebox*/

/*functionclimbonto,themonkeyclimbontothebox*/

voidclimbonto(inti)

{

routesave[i]="Monkeyclimbontothebox";

States[i+1]=States[i];

States[i+1].monbox=1;

}

/*functionclimbdown,monkeyclimbdownfromthebox*/

voidclimbdown(inti)

{

routesave[i]="Monkeyclimbdownfromthebox";

States[i+1]=States[i];

States[i+1].monbox=-1;

}

/*functionreach,ifthemonkey,box,andbananaareatthesameplace,themonkeyreachbanana*/

voidreach(inti)

{

routesave[i]="Monkeyreachthebanana";

}

/*outputthesolutiontotheproblem*/

voidshowSolution(inti)

{

intc;

printf("%s\n","Resulttoproblem:

");

for(c=0;c

{

printf("Step%d:

%s\n",c+1,routesave[c]);

}

printf("\n");

}

/*performnextstep*/

voidnextStep(inti)

{

intc;

intj;

if(i>=150)

{

printf("%s\n","steplengthreached150,haveproblem");

return;

}

for(c=0;c

{

if(States[c].monkey==States[i].monkey&&States[c].box==States[i].box&&States[c].banana==States[i].banana&&States[c].monbox==States[i].monbox)

{

return;

}

}

if(States[i].monbox==1&&States[i].monkey==0&&States[i].banana==0&&States[i].box==0)

{

showSolution(i);

printf("Pressanykeytocontinue\n");

getchar();/*tosavescreenforuser,pressanykeytocontinue*/

return;

}

j=i+1;

if(States[i].monkey==0)

{

if(States[i].box==0)

{

if(States[i].monbox==-1)

{

climbonto(i);

reach(i+1);

nextStep(j);

/*monkeygoto(-1,i);

nextStep(j);

monkeygoto(0,i);

nextStep(j);

movebox(-1,i);

nextStep(j);

movebox(0,i);

nextStep(j);*/

}

else

{

reach(i+1);

nextStep(j);

/*climbdown(i);

nextStep(j);*/

}

}

elseif(States[i].box==1)

{

/*monkeygoto(-1,i);

nextStep(j);*/

monkeygoto(1,i);

nextStep(j);

movebox(0,i);

nextStep(j);

climbonto(i);

reach(i+1);

nextStep(j);

}

else/*box==-1*/

{

monkeygoto(-1,i);

nextStep(j);

movebox(0,i);

nextStep(j);

climbonto(i);

reach(i+1);

nextStep(j);

}

}

/*endif*/

if(States[i].monkey==-1)

{

if(States[i].box==-1)

{

if(States[i].monbox==-1)

{

movebox(0,i);

nextStep(j);

climbonto(i);

reach(i+1);

nextStep(j);

}

else

{

climbdown(i);

nextStep(j);

movebox(0,i);

nextStep(j);

climbonto(i);

reach(i+1);

nextStep(j);

}

}

elseif(States[i].box==0)

{

monkeygoto(0,i);

nextStep(j);

climbonto(i);

reach(i+1);

nextStep(j);

}

else

{

monkeygoto(1,i);

nextStep(j);

movebox(0,i);

nextStep(j);

climbonto(i);

reach(i+1);

nextStep(j);

}

}

/*endif*/

if(States[i].monkey==1)

{

if(States[i].box==1)

{

if(States[i].monbox==-1)

{

movebox(0,i);

nextStep(j);

climbonto(i);

reach(i+1);

nextStep(j);

}

else

{

climbdown(i);

nextStep(j);

movebox(0,i);

nextStep(j);

climbonto(i);

reach(i+1);

nextStep(j);

}

}

elseif(States[i].box==-1)

{

monkeygoto(-1,i);

nextStep(j);

movebox(0,i);

nextStep(j);

movebox(0,i);

nextStep(j);

climbonto(i);

reach(i+1);

nextStep(j);

}

else

{

monkeygoto(0,i);

nextStep(j);

movebox(0,i);

nextStep(j);

climbonto(i);

reach(i+1);

nextStep(j);

}

}

/*endif*/

}/*endnextStep*/

intmain()

{

States[0].monkey=-1;

States[0].box=1;

States[0].banana=0;

States[0].monbox=-1;

nextStep(0);

}

五、实验截图

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 其它语言学习

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2