人工智能大作业实验Word文件下载.doc

上传人:b****1 文档编号:13076775 上传时间:2022-10-04 格式:DOC 页数:20 大小:157KB
下载 相关 举报
人工智能大作业实验Word文件下载.doc_第1页
第1页 / 共20页
人工智能大作业实验Word文件下载.doc_第2页
第2页 / 共20页
人工智能大作业实验Word文件下载.doc_第3页
第3页 / 共20页
人工智能大作业实验Word文件下载.doc_第4页
第4页 / 共20页
人工智能大作业实验Word文件下载.doc_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

人工智能大作业实验Word文件下载.doc

《人工智能大作业实验Word文件下载.doc》由会员分享,可在线阅读,更多相关《人工智能大作业实验Word文件下载.doc(20页珍藏版)》请在冰豆网上搜索。

人工智能大作业实验Word文件下载.doc

实验一:

谓词表示

【实验内容】

设农夫、狼、山羊、白菜都在河的左岸,现在要把它们运送到河的右岸去,农夫有条船,过河时,除农夫外船上至多能载狼、山羊、白菜中的一种。

狼要吃山羊,山羊要吃白菜,除非农夫在那里。

试设计出一个确保全部都能过河的方案。

【实验目的】

让学生加深对谓词逻辑和谓词知识表示的理解。

【实验要求】

写出所用谓词的定义,并给出每个谓词的功能及变量的个体域,然后编程来实现。

【参考学时】

1.定义状态的谓词

2.定义变元的个体域

3.描述问题的初始和目标状态

4.定义动作

5.解释过程

解:

(1)先定义描述状态的谓词

AL(x):

x在左岸

¬

AL(x)表示x在右岸。

(2)定义个体域

x的个体域:

{农夫,船,狼,羊,白菜}。

(3)定义初始状态和目标状态

问题的初始状态:

AL(农夫),AL(船),AL(狼),AL(羊),AL(白菜),

问题的目标状态:

AL(农夫),¬

AL(船),¬

AL(狼),¬

AL(羊),¬

AL(白菜)

(4)定义动作

4个动作:

农夫不带来回

农夫带来回

L-R:

农夫自己划船从左岸到右岸

L-R(x):

农夫带着x划船从左岸到右岸

R-L:

农夫自己划船从右岸到左岸

R-L(x):

农夫带着x划船从右岸到左岸

x的个体域是{狼,羊,白菜}。

农夫划船从左岸到右岸

条件:

AL(船),AL(农夫),¬

AL(狼)∨¬

AL(羊)∨¬

动作:

删除表:

AL(船),AL(农夫)

添加表:

AL(农夫)

L-R(狼):

农夫带着狼划船从左岸到右岸

AL(船),AL(农夫),AL(狼),¬

AL(羊)

AL(船),AL(农夫),AL(狼)

AL(狼)

L-R(羊):

农夫带着羊划船从左岸到右岸

AL(船),AL(农夫),AL(羊),AL(狼),AL(白菜)

或:

AL(船),AL(农夫),AL(羊),¬

AL(船),AL(农夫),AL(羊)

L-R(白菜):

农夫带着白菜划船从左岸到右岸

AL(船),AL(农夫),AL(白菜),¬

AL(狼)

AL(船),AL(农夫),AL(白菜)

农夫划船从右岸到左岸

AL(农夫),AL(狼)∨AL(羊),AL(羊)∨AL(白菜)

或:

AL(农夫),¬

AL(白菜),AL(羊)

R-L(羊):

农夫带着羊划船从右岸到左岸

AL(羊),¬

AL(羊),AL(白菜)

(3)问题求解过程

代码如下

#include<

stdio.h>

malloc.h>

typedefintdatatype;

//datatype定义

structseqque //队列结构体

{

intmaxnum;

intf,r;

//存放头尾下标

datatype*q;

};

typedefstructseqque*pseqque;

/*创建一个新的队列*/

pseqquecreatemptyqueue(intm)

pseqquepaqu=(pseqque)malloc(sizeof(structseqque));

//申请结构体动态空间

if(paqu!

=NULL)

{

paqu->

q=(datatype*)malloc(sizeof(datatype)*m);

//申请datatype动态空间

if(paqu->

q)

{

paqu->

maxnum=m;

f=0;

//置头下标为0

r=0;

//置尾下标为0

returnpaqu;

}

elsefree(paqu);

}

printf("

超出存储空间!

"

);

returnNULL;

}

/*入队运算函数*/

voidenque(pseqquepaqu,datatypex)

if((paqu->

r+1)%(paqu->

maxnum)==paqu->

f)

printf("

队列已满!

else

q[paqu->

r]=x;

r=(paqu->

maxnum);

/*出队运算函数*/

voiddeque(pseqquepaqu)

if(paqu->

f==paqu->

r)

空队列!

else

f=(paqu->

f+1)%(paqu->

/*取队列头元素*/

datatypefrontque(pseqquepaqu)

队列为空!

return(paqu->

f]);

/*判断是否为空队列函数*/

intisemptyque(pseqquepaqu)

return1;

return0;

/*判断农夫位置*/

intfarmer(intlocation)

return(0!

=(location&

0x08));

/*判断狼位置*/

intwolf(intlocation)

0x04));

/*判断白菜位置*/

intcabbage(intlocation)

0x02));

/*判断羊位置*/

intgoat(intlocation)

0x01));

/*安全状态的判断函数*/

intsafe(intlocation)

if((goat(location)==cabbage(location))&

&

(goat(location)!

=farmer(location)))

//羊吃白菜

if((goat(location)==wolf(location))&

(wolf(location)!

//狼吃羊

return1;

/*解决农夫问题函数*/

voidfarmerproblem(void)

inti,movers,location,newlocation;

introute[16];

//记录已走过的步骤

pseqquemoveto;

//存放安全的步骤

moveto=createmptyqueue(16);

//创建新队列

enque(moveto,0x00);

//置状态初值

for(i=0;

i<

16;

i++) //置已走过步骤初值

route[i]=-1;

route[0]=0;

while(!

isemptyque(moveto)&

(route[15]==-1))

location=frontque(moveto);

//取头状态为当前状态

deque(moveto);

//删除队列头状态

for(movers=1;

movers<

=8;

<

=1) //依次考虑羊、白菜、狼、农夫的移动

if((0!

0x08))==(0!

movers))) //判断是否和农夫同边

{

newlocation=location^(0x08|movers);

//移动后的状态

if(safe(newlocation)&

(route[newlocation]==-1)) //判断是否为安全状态

{

route[newlocation]=location;

//将新的安全状态赋给location

enque(moveto,newlocation);

//新的状态入队列

}

}

if(route[15]!

=-1) //到达最终状态

过程是:

\n"

//输出过程和位置

for(location=15;

location>

=0;

location=route[location])

printf("

位置是:

%d\n"

location);

if(location==0)

exit(0);

elseprintf("

此问题无解!

/*主函数*/

voidmain()

farmerproblem();

实验二:

一个用于动物识别的产生式系统 

【实验内容】 

设计该系统,让其实现可以识别老虎、金钱豹、斑马、长颈鹿、企鹅、信天翁这6种动物。

让学生进一步加深对产

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 党团建设

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1