631306050123黄嘉城 谓词演算 启发式搜索
重庆交通大学计算机与信息学院
验证性实验报告
班 级: 计软 专业 13 级 1 班
学 号: 631306050123
姓 名: 黄嘉城
实验项目名称: 谓词演算
实验项目性质: 验证性实验
实验所属课程: 人工智能
实验室(中心):软件中心实验室,语音楼8楼,
指 导 教 师 : 朱振国
实验完成时间: 2016 年 6 月 10 日
评阅意见:
实验成绩: 签名: 年 月 日
一、实验目的
理解和掌握谓词演算
二、实验内容及要求
在一个空房间中,机器人将A桌子上的盒子搬移到B桌子上,用选定的编程语言编写
程序,演示谓词演算过程。
三、实验设备及软件
visual studio
四、设计方案
? 题目
机器人搬盒子
? 设计的主要思路
设在房内c处有一个机器人,在a及b处各有一张桌子,
a桌上有一个盒子。为了让机器人从c处出发把盒子从a处
拿到b处的桌上,然后再回到c处,需要制订相应的行动规划。
现在用一阶谓词逻辑来描述机器人的行动过程。
? 主要功能
实现机器人搬盒子移动
五、主要代码
#include ""
//定义初始状态
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<state_num;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<state_num;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);
retu
黄嘉城谓词演算启发式搜索 来自淘豆网m.daumloan.com转载请标明出处.