人工智能-猴子香蕉问题.doc_第1页
人工智能-猴子香蕉问题.doc_第2页
人工智能-猴子香蕉问题.doc_第3页
人工智能-猴子香蕉问题.doc_第4页
人工智能-猴子香蕉问题.doc_第5页
免费预览已结束,剩余3页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1.问题描述 在一个房间内有一只猴子(可把这只猴子看做一个机器人)、一个箱子和一束香蕉。香蕉挂在天花板下方,但猴子的高度不足以碰到它。那么这只猴子怎样才能摘到香蕉呢?图1表示出猴子、香蕉和箱子在房间内的相对位置。用四元表列(W,x,Y,z)来表示这个问题的状态。其中,W猴子的水平位置x当猴子在箱子顶上时取x=1;否则取x=0Y箱子的水平位置z当猴子摘到香蕉时取z=1;否则取z=0这个问题中的操作(算符)如下:1、goto(U)猴子走到水平位置U,表示为 Goto (U)(W,0,Y,z) -(U ,0 ,Y ,z)即把状态(W,0,Y,z)变换为状态(U,0,Y,z)。2、pushbox(V)猴子把箱子推到水平位置V,即有 Pushbox (V) (W,0,W,z)-(V ,0 ,V ,z )条件:猴子与箱子必须在同一位置上,并且,猴子不是在箱子顶上。应当注意的是,要应用算符 pushbox(V),就要求 产生式规则的左边,猴子与箱子必须在同一位置上,并且,猴子不是在箱子顶上。这种强加于操作的适用性条件,叫做产生式规则的先决条件3、climbbox猴子爬上箱顶,即有 Climbbox (W,0,W,z)-(W,1,W,z) 条件:猴子和箱子应当在同一位置上,而且猴子不在箱顶上。4、grasp猴子摘到香蕉,即有 Grasp (c,1,c,0) -(c,1,c,1)条件:猴子和箱子都在位置c上,并且猴子已在箱子顶上。求解过程 令初始状态为(a,0,b,0)。这时,goto(U)是唯一适用的操作,并导致下一状态(U,0,b,0)。现在有3个适用的操作,即goto(U),pushbox(V)和climbbox(若U=b)。其中,c是香蕉正下方的地板位置,该初始状态变换为目标状态的操作序列为:goto(b),pushbox(c),climbbox,grasp应当说明的是,在这种情况下,算符(操作)的适用性及作用均由产生式规则表示。例如,对于规则(2),只有当算符pushbox(V)的先决条件,即猴子与箱子在同一位置上而且猴子不在箱顶上这些条件得到满足时,算符pushbox(V)才是适用的。这一操作算符的 作用是猴子把箱子推到位置。在这一表示中,目标状态的集合可由任何最后元素为1的表列来描述。2. 源代码#include#include#includeint W; /*W猴子的水平位置*/int x; /*x当猴子在箱子顶上时取x=1;否则取x=0*/int c; /*c-是香蕉正下方的地板位置*/int Y; /*Y箱子的水平位置*/int z; /*z当猴子摘到香蕉时取z=1;否则取z=0*/int ascll=25;void Goto()/*(W,0,Y,z)-(U,0,Y,z)*/ /*猴子从水平位置W走到箱子的水平位置Y1.猴子在箱子的左边(WY)3.猴子在箱子上(x=1时)*/int i;printf(n猴子从水平位置W(%d)走到箱子Y(%d)处.n,W,Y);printf(n W x Y zn);if(W=Y) for(i=W;i=Y;i-) if(i!=W)printf( %cn,ascll); printf(State(%d,%d,%d,%d)n,i,x,Y,z); void PushBox()/*猴子把箱子(箱子的水平位置Y)推到水平位置c处(香蕉正下方的地板位置)1.箱子在香蕉的左边(Yc)*/int i;if(Y=c) printf(n香蕉就在箱子的正上方.n);else printf(n猴子把箱子(箱子的水平位置Y(%d)推到香蕉正下方的地板位置c(%d)n,Y,c);printf(n W x Y zn);if(Y=c) for(i=Y;i=c;i-) if(i!=Y)printf( %cn,ascll); printf(State(%d,%d,%d,%d)n,i,x,Y,z); W=c;void ClimbBox()/*猴子爬上箱顶*/printf(n猴子爬上箱顶.n);printf(n W x Y zn);printf(State(%d,%d,%d,%d)n,W,x,Y,z);x=1;printf( %cn,ascll);printf(State(%d,%d,%d,%d)n,W,x,Y,z);void Grasp()/*猴子摘到香蕉*/printf(n猴子摘到香蕉.n);printf(n W x Y zn);printf(State(%d,%d,%d,%d)n,W,x,Y,z);z=1;printf( %cn,ascll);printf(State(%d,%d,%d,%d)n,W,x,Y,z);int main()int i=0,select,flag=0;while(true) x=0; z=0; if(i!=0) printf(n); system(Pause); system(cls); printf(*信电学院 计本二班 郁春菊 20060502103*nn); for(i=1;i=10;i+) if(i=1|i=10) printf(-n); else if(i=3) printf(| 人工智能之猴子与香蕉 |n); else if(i=6) printf(| 1.用户初始化参数 |n); printf(| 2.系统随机初始化参数 |n); printf(| 3.退出系统 |n); else if(i=9) printf(|* 人工智能算法 *|n); else printf(| |n); /* printf(State:初始状态state(W,x,Y,z);*/ printf(请选择(操作:1/2/3) :); scanf(%d,&select); if(select = 3) system(cls); return 0; printf(n); system(Pause); system(cls); if(select=1) printf(n-用户初始化参数-n); printf(n请输入猴子的水平位置 W: ); scanf(%d,&W); printf(n请输入箱子的水平位置 Y: ); scanf(%d,&Y); printf(n请输入香蕉正下方的地板位置 c: ); scanf(%d,&c); else if(select = 2) flag=1; srand(time(NULL); printf(n-系统随机初始化参数-n); W=rand()%10; printf(n猴子的水平位置 W: %dn,W); Y=rand()%10; printf(n箱子的水平位置 Y: %dn,Y); c=rand()%10; printf(n香蕉正下方的地板位置 c: %dn,c); if(W=Y) if(flag=0) printf(n猴子是否在箱子顶上?(x当猴子在箱子顶上时取x=1;否则取x=0) x= ); scanf(%d,&x); if(x!=0) x=1; else x=rand()%2; printf(n猴子是否在箱子顶上?(x当猴子在箱子顶上时取x=1;否则取x=0) x= %dn,x); if(x=1&W=c) /*猴子在箱子上(x=1),而且香蕉就在头顶(W=c)*/ printf(n猴子在箱子上(x=1),而且香蕉就在头顶(W=c).n); else if(x=1) /*猴子在箱子上(x=1),但香蕉不在头顶(W=c)*/ printf(n猴子从箱子上跳下.n); x=0; /*猴子与箱子必须在同一位置上,并且,猴子不是在箱子顶上*/ PushBox(); /*猴子和箱子应当在同一位置上,而且猴子不在箱顶上*/ ClimbBox(); else /*猴子从水平位置W走到箱子的水平位置Y*/ Goto(); /*猴子与箱子必须在同一位置上,并且,猴子不是在箱子顶上*/ PushBox(); /*猴子和箱子应当在同一位置上,而且猴子不在箱顶上*/ ClimbBox(); Grasp(); printf(n猴子正在吃香蕉

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论