您好,欢迎访问三七文档
机器人搬箱子问题设在房内c处有一机器人,在a及b处各有一张桌子,a桌子上有一个箱子。为了让机器人从c处出发把箱子从a处拿到b处的桌上,然后再回到c处,需要制定相应的行动规划。现在用一阶为此逻辑来描述机器人的行动过程。相关谓词定义TABLE(x):x是桌子EMPTY(y):y手中是空的AT(y,z):y在z附近HOLDS(y,w):y拿着wON(w,x):w在x上面问题初始状态TABLE(a)TABLE(b)EMPTY(robot)AT(robot,c)ON(box,a)问题目标状态TABLE(a)TABLE(b)EMPTY(robot)AT(y,z)ON(box,a)任务执行过程初始状态机器人在c处;机器人从c移动到a;在a处拿起了箱子;从a移动到b;在b处放下箱子;从b回到c。问题实现思路定义3个变量描述问题状态,robot_site表示机器人位置,取值为a,b,c;is_robot_block描述机器人手中是否拿着箱子,取值为Y、N;block_site描述箱子的位置取值为a,b。定义函数改变问题状态。运行结果实现程序#includestdio.h#includestdlib.h/***@authorlizm*///描述系统状态typedefstructProblem{charrobot_site;//描述机器人的位置charis_robot_block;//机器人手中是否拿着箱子charblock_site;//箱子所在位置}SProblem;//初始化系统初始状态和目标状态intinit_status(SProblem*obj,SProblem*p,int*status_number){obj-robot_site='c';obj-is_robot_block='N';obj-block_site='b';p-robot_site='c';p-is_robot_block='N';p-block_site='a';printf(状态%d:\n机器人当前所在位置:%c,机器人是否拿着箱子:%c,箱子所在位置:%c。\n\n,*status_number,p-robot_site,p-is_robot_block,p-block_site);*status_number+=1;}//机器人移动introbot_move(SProblem*p,charrobot_object_site,int*status_number){chartemp_robot_site=p-robot_site;p-robot_site=robot_object_site;printf(状态%d:\n机器人从%c移动到了%c。\n\n,*status_number,temp_robot_site,p-robot_site);*status_number+=1;}//机器人搬起箱子intpick_up_block(SProblem*p,charis_robot_block,charblock_site,int*status_number){p-is_robot_block=is_robot_block;p-block_site=block_site;if(p-is_robot_block=='Y'){printf(状态%d:\n机器人拿起了箱子。\n\n,*status_number);}*status_number+=1;}//机器人放下箱子intset_down_block(SProblem*p,charis_robot_block,charblock_site,int*status_number){p-is_robot_block=is_robot_block;p-block_site=block_site;if(p-is_robot_block=='N'){printf(状态%d:\n机器人将箱子放在了%c。\n\n,*status_number,p-block_site);}*status_number+=1;}//判断机器人是否完成任务intjudeg_obj(constSProblemobj,constSProblemp){if(obj.robot_site==p.robot_site&&obj.is_robot_block==p.is_robot_block&&obj.block_site==p.block_site){printf(机器人完成任务。\n);}}intmain(intargc,char*argv[]){SProblemsp;SProblemobj;intstatus_number=1;charrobot_object_site='a';charblock_site='r';charis_robot_block;//状态1:机器人位置c是否拿着箱子N箱子位置ainit_status(&obj,&sp,&status_number);//状态2:机器人位置a是否拿着箱子N箱子位置arobot_move(&sp,robot_object_site,&status_number);block_site='r';is_robot_block='Y';//状态3:机器人位置a是否拿着箱子Y箱子位置robotpick_up_block(&sp,is_robot_block,block_site,&status_number);robot_object_site='b';//状态4:机器人位置b是否拿着箱子Y箱子位置robotrobot_move(&sp,robot_object_site,&status_number);block_site='b';is_robot_block='N';//状态5:机器人位置b是否拿着箱子N箱子位置bset_down_block(&sp,is_robot_block,block_site,&status_number);robot_object_site='c';//状态5:机器人位置c是否拿着箱子N箱子位置brobot_move(&sp,robot_object_site,&status_number);//判断机器人是否完成任务judeg_obj(obj,sp);return0;}
本文标题:机器人搬箱子
链接地址:https://www.777doc.com/doc-1504961 .html