631306050123黄嘉城+谓词演算+启发式搜索
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
重庆交通大学计算机与信息学院验证性实验报告
班级:计软专业 13 级 1 班
学号: 631306050123
姓名:黄嘉城
实验项目名称:谓词演算
实验项目性质:验证性实验
实验所属课程:人工智能
实验室(中心):软件中心实验室(语音楼8楼)指导教师:朱振国
实验完成时间: 2016 年 6 月 10 日
一、实验目的
理解和掌握谓词演算
二、实验内容及要求
在一个空房间中,机器人将A桌子上的盒子搬移到B桌子上,用选定的编程语言编写程序,演示谓词演算过程。
三、实验设备及软件
visual studio
四、设计方案
㈠题目
机器人搬盒子
㈡设计的主要思路
设在房内c处有一个机器人,在a及b处各有一张桌子,
a桌上有一个盒子。为了让机器人从c处出发把盒子从a处
拿到b处的桌上,然后再回到c处,需要制订相应的行动规划。
现在用一阶谓词逻辑来描述机器人的行动过程。
㈢主要功能
实现机器人搬盒子移动
五、主要代码
#include "stdio.h"
//定义初始状态
char state[10][20]={"AT(robot,c)","EMPTY(robot)",
"ON(box,a)","TABLE(a)","TABLE(b)"};
//定义目标状态
char end_state[5][20]={"AT(robot,c)","EMPTY(robot)", "ON(box,b)","TABLE(a)","TABLE(b)"};
int state_num=5;
int number;//记录某字符串在总数据库中的位置
bool IsInState(char *S1) /*判断字符串(状态)是否在总数据库中*/ {
int i,j;
bool flag;
//printf("S1:%s\n state[0]: %s state[1]: %s\n",S1,state[0],state[1]);
//printf("%d\n",state_num);
for(i=0;i { j=0; flag=true; while(S1[j]!='\0') { if(S1[j]!=state[i][j]) { flag=false; break; } j++; } if(flag && state[i][j]=='\0') { //printf("%d\n",i); number=i; return true; } } return false; } void Delete(int k)/*删除总数据库中的第k个状态(字符串)*/ { if(k>=state_num) { printf("The appointed state is not in the state set!"); return; } int i,j; for(i=k;i { for(j=0;*(state[i+1]+j)!='\0';j++) state[i][j]=state[i+1][j]; state[i][j]='\0'; } state_num--; } void Insert(char *S)/*将状态(字符串S)插入到总数据库中*/ { if(state_num>=10) { printf("The state space is overwrited!"); return; } int j; for(j=0;S[j]!='\0';j++) state[state_num][j]=S[j]; state[state_num][j]='\0'; state_num++; } bool GoTo(char x,char y) { char S1[20]="AT(robot,x)",S2[20]="AT(robot,x)"; //printf("%s,%s\n",S1,S2); S1[9]=x; S2[9]=y; //printf("%s,%s\n",S1,S2); if(IsInState(S1)) { Delete(number); Insert(S2); return true; } else { printf("Cannot go from %c to %c\n",x,y); return false; } } bool PickUp(char x) { char S[5][20]={"ON(box,x)","TABLE(x)","AT(robot,x)","EMPTY(robot)","HOLDS(robot,box)"}; S[0][7]=x; S[1][6]=x; S[2][9]=x; if(IsInState(S[1]) && IsInState(S[2]))