631306050123黄嘉城+谓词演算+启发式搜索

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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]))

相关文档
最新文档