人工智能猴子香蕉问题
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
x=0;
z=0;
if(i!=0){
prin tf("\n");
system(" Pause");
system("cls");
}
prin tf ("**********
for(i=1;i<=10;i++){
if(i==1||i==10){
printf("
else if(i==3){
状态(U,0,b,0)。现在有3个适用的操作,即goto(U),pushbox(V)和climbbox(若U=b)。其中,c是香蕉正下方的地板位置,该初始状态变换为目标状 态的操作序列为:{goto(b),pushbox(c),climbbox,grasp}
应当说明的是,在这种情况下,算符(操作)的适用性及作用均由产生式规则表 示。例如,对于规则(2),只有当算符Pushbox(V)的先决条件,即猴子与箱子 在同一位置上而且猴子不在箱顶上这些条件得到满足时,算符pushbox(V)才是适
if(i!=Y) prin tf(" %c\n",ascll); prin tf("State(%d,%d,%d,%d)\n",i,x,Y,z); }
}
W=c;
}
void ClimbBox(){
/*猴子爬上箱顶*/
printf("\n猴子爬上箱顶......\n"); printf("\n W x Y z\n");
1.问题描述
在一个房间内有一只猴子(可把这只猴子看做一个机器人)、一个箱子和一束香 蕉。香蕉挂在天花板下方,但猴子的高度不足以碰到它。那么这只猴子怎样才能 摘到香蕉呢?图1表示出猴子、香蕉和箱子在房间内的相对位置。用四元表列
(W,x,Y,z)来表示这个问题的状态。
其中,
W-猴子的水平位置
X—当猴子在箱子顶上时取x=1;否则取x=0
/*猴子把箱子(箱子的水平位置丫)推到水平位置c处(香蕉正下方的地板位置)
1.箱子在香蕉的左边(Y<c)
2.箱子在香蕉的右边(Y>c)
*/
int i;
if(Y==c){
printf("\n香蕉就在箱子的正上方......\n");
}
else{
printf("\n猴子把箱子(箱子的水平位置Y(%d))推到香蕉正下方的地板位置
prin tf("State(%d,%d,%d,%d)\n",W,x,Y,z); z=1;
prin tf(" %c\n",ascll);
prin tf("State(%d,%d,%d,%d)\n",W,x,Y,z); }
int mai n(){
int i=0,select,flag=0;
while(true){
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)是唯一适用的操作,并导致下一
c(%d)\n",Y,c);
}
prin tf("\n W x Y z\n");
if(Y<=c){
for(i=Y;i<=c;i++){
if(i!=Y) printf(" %c\n",ascll); prin tf("State(%d,%d,%d,%d)\n",i,x,Y,z); }
}
else{
for(i=Y;i>=c;i--){
int c; /*c-是香蕉正下方的地板位置*/
int Y; /*Y—箱子的水平位置*/
int乙/*z—当猴子摘到香蕉时取z=1;否则取z=0*/
int ascll=25;
void Goto(){
/*(W,0,Y,z)>(U,0,Y,z)*/
/*猴子从水平位置W走到箱子的水平位置丫
1.猴子在箱子的左边(W<Y)
(W,0,W,Z)>(V,0,V,Z)
条件:猴子与箱子必须在同一位置上,并且,猴子不是在箱子顶上。
应当注意的是,要应用算符Pushbox(V),就要求产生式规则的左边,猴子与 箱子必须在同一位置上,并且,猴子不是在箱子顶上。这种强加于操作的适用性 条件,叫做产生式规则的先决条件
3、climbbox猴子爬上箱顶,即有
prin tf("State(%d,%d,%d,%d)\n",W,x,Y,z); x=1;
prin tf(" %c\n",ascll);
prin tf("State(%d,%d,%d,%d)\n",W,x,Y,z); }
void Gras p(){
/*猴子摘到香蕉*/
printf("\n猴子摘到香蕉......\n"); printf("\n W x Y z\n");
用的。这一操作算符的 作用是猴子把箱子推到位置V。在这一表示中,目标状态 的集合可由任何最后元素为1的表列来描述。
2.源代码#i ncludevstdio.h>
#i ncludevstdlib.h>
#in clude<time.h>
int W; /*W—猴子的水平位置*/
int X;/*x—当猴子在箱子顶上时取x=1;否则取x=0*/
prin tf("State(%d,%d,%d,%d)\n",i,x,Y,z);
}
}
else{
for(i=W;i>=Y;i--){
if(i!=W) printf(" %c\n",ascll);
prin tf("State(%d,%d,%d,%d)\n",i,x,Y,z);
}
}
}
void P ushBox(){
丫-箱子的水平位置
Z—当猴子摘到香蕉时取z=1;否则取z=0
这个问题中的操作(算符)如下:
1、goto(U)猴子走到水平位置U,表示为
Goto (U)
(W,0,丫,Z)>(U,0,丫,Z)
即把状态(W,0,丫,Z)变换为状态(U,0,丫,Z)。
2、Pushbox(V)猴子把箱子推到水平位置V,即有
Pushbox(V)
2.猴子在箱子的右边(W>Y)
3.猴子在箱子上(x=1时)
*/
int i;
printf("\n猴子从水平位置W(%d)走到箱子Y(%d)处......\n",W,Yபைடு நூலகம்; printf("\n W x Y z\n");
if(W<=Y){
for(i=W;i<=Y;i++){
if(i!=W) prin tf(" %c\n",ascll);
z=0;
if(i!=0){
prin tf("\n");
system(" Pause");
system("cls");
}
prin tf ("**********
for(i=1;i<=10;i++){
if(i==1||i==10){
printf("
else if(i==3){
状态(U,0,b,0)。现在有3个适用的操作,即goto(U),pushbox(V)和climbbox(若U=b)。其中,c是香蕉正下方的地板位置,该初始状态变换为目标状 态的操作序列为:{goto(b),pushbox(c),climbbox,grasp}
应当说明的是,在这种情况下,算符(操作)的适用性及作用均由产生式规则表 示。例如,对于规则(2),只有当算符Pushbox(V)的先决条件,即猴子与箱子 在同一位置上而且猴子不在箱顶上这些条件得到满足时,算符pushbox(V)才是适
if(i!=Y) prin tf(" %c\n",ascll); prin tf("State(%d,%d,%d,%d)\n",i,x,Y,z); }
}
W=c;
}
void ClimbBox(){
/*猴子爬上箱顶*/
printf("\n猴子爬上箱顶......\n"); printf("\n W x Y z\n");
1.问题描述
在一个房间内有一只猴子(可把这只猴子看做一个机器人)、一个箱子和一束香 蕉。香蕉挂在天花板下方,但猴子的高度不足以碰到它。那么这只猴子怎样才能 摘到香蕉呢?图1表示出猴子、香蕉和箱子在房间内的相对位置。用四元表列
(W,x,Y,z)来表示这个问题的状态。
其中,
W-猴子的水平位置
X—当猴子在箱子顶上时取x=1;否则取x=0
/*猴子把箱子(箱子的水平位置丫)推到水平位置c处(香蕉正下方的地板位置)
1.箱子在香蕉的左边(Y<c)
2.箱子在香蕉的右边(Y>c)
*/
int i;
if(Y==c){
printf("\n香蕉就在箱子的正上方......\n");
}
else{
printf("\n猴子把箱子(箱子的水平位置Y(%d))推到香蕉正下方的地板位置
prin tf("State(%d,%d,%d,%d)\n",W,x,Y,z); z=1;
prin tf(" %c\n",ascll);
prin tf("State(%d,%d,%d,%d)\n",W,x,Y,z); }
int mai n(){
int i=0,select,flag=0;
while(true){
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)是唯一适用的操作,并导致下一
c(%d)\n",Y,c);
}
prin tf("\n W x Y z\n");
if(Y<=c){
for(i=Y;i<=c;i++){
if(i!=Y) printf(" %c\n",ascll); prin tf("State(%d,%d,%d,%d)\n",i,x,Y,z); }
}
else{
for(i=Y;i>=c;i--){
int c; /*c-是香蕉正下方的地板位置*/
int Y; /*Y—箱子的水平位置*/
int乙/*z—当猴子摘到香蕉时取z=1;否则取z=0*/
int ascll=25;
void Goto(){
/*(W,0,Y,z)>(U,0,Y,z)*/
/*猴子从水平位置W走到箱子的水平位置丫
1.猴子在箱子的左边(W<Y)
(W,0,W,Z)>(V,0,V,Z)
条件:猴子与箱子必须在同一位置上,并且,猴子不是在箱子顶上。
应当注意的是,要应用算符Pushbox(V),就要求产生式规则的左边,猴子与 箱子必须在同一位置上,并且,猴子不是在箱子顶上。这种强加于操作的适用性 条件,叫做产生式规则的先决条件
3、climbbox猴子爬上箱顶,即有
prin tf("State(%d,%d,%d,%d)\n",W,x,Y,z); x=1;
prin tf(" %c\n",ascll);
prin tf("State(%d,%d,%d,%d)\n",W,x,Y,z); }
void Gras p(){
/*猴子摘到香蕉*/
printf("\n猴子摘到香蕉......\n"); printf("\n W x Y z\n");
用的。这一操作算符的 作用是猴子把箱子推到位置V。在这一表示中,目标状态 的集合可由任何最后元素为1的表列来描述。
2.源代码#i ncludevstdio.h>
#i ncludevstdlib.h>
#in clude<time.h>
int W; /*W—猴子的水平位置*/
int X;/*x—当猴子在箱子顶上时取x=1;否则取x=0*/
prin tf("State(%d,%d,%d,%d)\n",i,x,Y,z);
}
}
else{
for(i=W;i>=Y;i--){
if(i!=W) printf(" %c\n",ascll);
prin tf("State(%d,%d,%d,%d)\n",i,x,Y,z);
}
}
}
void P ushBox(){
丫-箱子的水平位置
Z—当猴子摘到香蕉时取z=1;否则取z=0
这个问题中的操作(算符)如下:
1、goto(U)猴子走到水平位置U,表示为
Goto (U)
(W,0,丫,Z)>(U,0,丫,Z)
即把状态(W,0,丫,Z)变换为状态(U,0,丫,Z)。
2、Pushbox(V)猴子把箱子推到水平位置V,即有
Pushbox(V)
2.猴子在箱子的右边(W>Y)
3.猴子在箱子上(x=1时)
*/
int i;
printf("\n猴子从水平位置W(%d)走到箱子Y(%d)处......\n",W,Yபைடு நூலகம்; printf("\n W x Y z\n");
if(W<=Y){
for(i=W;i<=Y;i++){
if(i!=W) prin tf(" %c\n",ascll);