资源描述:
《机器人搬箱子》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、...机器人搬箱子问题设在房内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)任务执行过程初
2、始状态机器人在c处;机器人从c移动到a;在a处拿起了箱子;从a移动到b;在b处放下箱子;从b回到c。问题实现思路定义3个变量描述问题状态,robot_site表示机器人位置,取值为a,b,c;is_robot_block描述机器人手中是否拿着箱子,取值为Y、N;block_site描述箱子的位置取值为a,b。定义函数改变问题状态。运行结果......实现程序#include#include/***@authorlizm*///描述系统状态typedefstructProblem{charrobot_site;//描述机器人的位置charis_robo
3、t_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:机器人当前所在位置:%c,机器人是否拿着箱子:%c,箱子所在位置
4、:%c。",*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:机器人从%c移动到了%c。",*status_number,temp_robot_site,p-
5、>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:机器人拿起了箱子。",*status_number);......}*status_number+=1;}//机器人放下箱子intset_do
6、wn_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:机器人将箱子放在了%c。",*status_number,p->block_site);}*status_number+=1;}//判断机器人是否完成任务intjudeg_obj(constSProblemobj,constSProblem
7、p){if(obj.robot_site==p.robot_site&&obj.is_robot_block==p.is_robot_block&&obj.block_site==p.block_site){printf("机器人完成任务。");}}intmain(intargc,char*argv[]){SProblemsp;SProblemobj;intstatus_number=1;charrobot_object_sit