欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

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

    • 资源ID:2540994       资源大小:113.50KB        全文页数:16页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    华中科技大学人工智能与模式识别 实验报告 院 系: 电子与信息工程系 班 级: 姓 名: 同 组 人: 指导老师: 电 话: 邮 箱: 日 期: 2013年12月24日 一、 实验内容利用一阶谓词逻辑求解猴子摘香蕉问题:房内有一个猴子,一个箱子,天花板上挂了一串香蕉,其位置如图所示,猴子为了拿到香蕉,它必须把箱子搬到香蕉下面,然后再爬到箱子上。请定义必要的谓词,列出问题的初始化状态(即下图所示状态),目标状态(猴子拿到了香蕉,站在箱子上,箱子位于位置b)。(附加:从初始状态到目标状态的谓词演算过程。)二、 实验平台VC6.0三、 实验分析1. 定义描述环境状态的谓词。AT(x,w):x在t处,个体域:xmonkey,wa,b,c,box;HOLD(x,t):x手中拿着t,个体域:tbox,banana;EMPTY(x):x手中是空的;ON(t,y):t在y处,个体域:yb,c,ceiling;CLEAR(y):y上是空的;BOX(u):u是箱子,个体域:ubox;BANANA(v):v是香蕉,个体域:vbanana;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,na,b,c;CARRY(s,r):猴子在r处拿到s,个体域:rc,ceiling,sbox,banana;CLIMB(u,b):猴子在b处爬上u;这3个操作也可分别用条件和动作来表示。条件直接用谓词公式表示,是为完成相应操作所必须具备的条件;当条件中的事实使其均为真时,则可激活操作规则,于是可执行该规则中的动作部分。动作通过前后状态的变化表示,即通过从动作前删除或增加谓词公式来描述动作后的状态。WALK(m,n):猴子从m走到n处条件:AT(monkey,m)动作:CARRY(s,r):猴子在r处拿到s条件:AT(monkey,r)EMPTY(monkey)ON(s,r)BOX(box)BANANA(banana)动作:CLIMB(u,b):猴子在b处爬上u条件:AT(monkey,b)HOLD(monkey,u)CLEAR(b)BOX(box)BANANA(banana)动作:4. 按照行动计划, 一步步进行状态替换, 直至目标状态。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 <stdio.h>struct Stateint 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;*/;struct State States 150;char* routesave150; /*function monkeygoto,it makes the monkey goto the other place*/void monkeygoto(int b,int i) int a;a=b;if (a=-1)routesavei="Monkey go to A"Statesi+1=Statesi;Statesi+1.monkey=-1;else if(a=0)routesavei="Monkey go to B"Statesi+1=Statesi;Statesi+1.monkey=0;else if(a=1)routesavei="Monkey go to C"Statesi+1=Statesi;Statesi+1.monkey=1;else printf("parameter is wrong");/*end function monkeyygoto*/ /*function movebox,the monkey move the box to the other place*/void movebox(int a,int i) int B;B=a;if(B=-1)routesavei="monkey move box to A"Statesi+1=Statesi;Statesi+1.monkey=-1;Statesi+1.box=-1;else if(B=0)routesavei = "monkey move box to B"Statesi+1=Statesi;Statesi+1.monkey=0;Statesi+1.box=0;else if(B=1)routesavei = "monkey move box to C"Statesi+1=Statesi;Statesi+1.monkey=1;Statesi+1.box=1;elseprintf("parameter is wrong");/*end function movebox*/ /*function climbonto,the monkey climb onto the box*/void climbonto(int i)routesavei="Monkey climb onto the box"Statesi+1=Statesi;Statesi+1.monbox=1;/*function climbdown,monkey climb down from the box*/void climbdown(int i) routesavei="Monkey climb down from the box"Statesi+1=Statesi;Statesi+1.monbox=-1;/*function reach,if the monkey,box,and banana are at the same place,the monkey reach banana*/void reach(int i) routesavei="Monkey reach the banana"/*output the solution to the problem*/void showSolution(int i) int c; printf ("%s n", "Result to problem:"); for(c=0; c<i+1; c+) printf ("Step %d : %s n",c+1,routesavec); printf("n"); /*perform next step*/void nextStep(int i)int c; int j; if(i>=150) printf("%s n", "steplength reached 150,have problem "); return; for (c=0; c<i; c+) /*if the current state is same to previous,retrospect*/ if(Statesc.monkey=Statesi.monkey&&Statesc.box=Statesi.box&&Statesc.banana=Statesi.banana&&Statesc.monbox=Statesi.monbox) return; if(Statesi.monbox=1&&Statesi.monkey=0&&Statesi.banana=0&&Statesi.box=0) showSolution(i);printf("Press any key to continue n");getchar();/*to save screen for user,press any key to continue*/return; j=i+1; if(Statesi.monkey=0) if(Statesi.box=0)if(Statesi.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);*/elsereach(i+1);nextStep(j);/*climbdown(i);nextStep(j);*/ else if(Statesi.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); /*end if*/if(Statesi.monkey=-1) if(Statesi.box=-1)if(Statesi.monbox=-1) movebox(0,i);nextStep(j);climbonto(i);reach(i+1);nextStep(j);elseclimbdown(i);nextStep(j);movebox(0,i);nextStep(j);climbonto(i);reach(i+1);nextStep(j);else if(Statesi.box=0) monkeygoto(0,i);nextStep(j);climbonto(i);reach(i+1);nextStep(j);elsemonkeygoto(1,i);nextStep(j);movebox(0,i);nextStep(j);climbonto(i);reach(i+1);nextStep(j);/*end if*/if(Statesi.monkey=1) if (Statesi.box=1)if(Statesi.monbox=-1) movebox(0,i);nextStep(j);climbonto(i);reach(i+1);nextStep(j);elseclimbdown(i);nextStep(j);movebox(0,i);nextStep(j);climbonto(i);reach(i+1);nextStep(j); else if(Statesi.box=-1) monkeygoto(-1,i);nextStep(j);movebox(0,i);nextStep(j); movebox(0,i);nextStep(j);climbonto(i);reach(i+1);nextStep(j);elsemonkeygoto(0,i);nextStep(j);movebox(0,i);nextStep(j);climbonto(i);reach(i+1);nextStep(j); /*end if*/*end nextStep*/ int main() States0.monkey=-1; States0.box=1; States0.banana=0; States0.monbox=-1; nextStep(0);五、 实验截图

    注意事项

    本文(猴子摘香蕉实验报告(含代码).doc)为本站会员(仙人指路1688)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开