人工智能大作业实验.docx
- 文档编号:1399489
- 上传时间:2022-10-22
- 格式:DOCX
- 页数:24
- 大小:85.06KB
人工智能大作业实验.docx
《人工智能大作业实验.docx》由会员分享,可在线阅读,更多相关《人工智能大作业实验.docx(24页珍藏版)》请在冰豆网上搜索。
人工智能大作业实验
湖南中医药大学本科课程实验教学大纲
《人工智能》
计算机科学与技术专业
执笔人:
丁长松
审定人:
***
学院负责人:
***
湖南中医药大学教务处
二○一四年三月
一、课程性质和教学目的
《人工智能》是计算机专业本科生的一门专业必修课,适应于计算机科学与技术专业、医药信息工程专业。
本课程是关于人工智能领域的引导性课程,通过本课程的学习,是使学生了解和掌握人工智能的基本概念、原理和方法,培养学生在计算机领域中应用人工智能技术提高分析和解决较复杂问题的能力,启发学生对人工智能的兴趣,培养知识创新和技术创新能力。
《人工智能》主要研究智能信息处理技术、开发具有智能特性的各类应用系统的核心技术。
本课程主要介绍人工智能的基本理论、方法和技术,主要包括常用的知识表示、逻辑推理和问题求解方法、人工智能发展学派以及主要理论。
先修课程:
高等数学、数据结构、数据库原理、算法设计与分析、数理逻辑
二、课程目标
人工智能实验应在一种为高效率开发专家系统而设计的高级程序系统或高级程序设计语言环境中进行。
在目前开来,专家系统开发工具和环境可分为5种主要类型:
程序设计语言、知识工程语言、辅助型工具、支持工具及开发环境。
在这里主要是要求学生能用相关术语描述、表示一些问题;用程序设计语言如:
C、C++、JAVA编程来实现一些基本的算法、推理、搜索等过程。
三、实验内容与要求
实验一:
谓词表示
【实验内容】
设农夫、狼、山羊、白菜都在河的左岸,现在要把它们运送到河的右岸去,农夫有条船,过河时,除农夫外船上至多能载狼、山羊、白菜中的一种。
狼要吃山羊,山羊要吃白菜,除非农夫在那里。
试设计出一个确保全部都能过河的方案。
【实验目的】
让学生加深对谓词逻辑和谓词知识表示的理解。
【实验要求】
写出所用谓词的定义,并给出每个谓词的功能及变量的个体域,然后编程来实现。
【参考学时】
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的个体域是{狼,羊,白菜}。
L-R:
农夫划船从左岸到右岸
条件:
AL(船),AL(农夫),¬AL(狼)∨¬AL(羊),¬AL(羊)∨¬AL(白菜)
动作:
删除表:
AL(船),AL(农夫)
添加表:
¬AL(船),¬AL(农夫)
L-R(狼):
农夫带着狼划船从左岸到右岸
条件:
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(农夫),¬AL(羊)
L-R(白菜):
农夫带着白菜划船从左岸到右岸
条件:
AL(船),AL(农夫),AL(白菜),¬AL(狼)
动作:
删除表:
AL(船),AL(农夫),AL(白菜)
添加表:
¬AL(船),¬AL(农夫),¬AL(白菜)
R-L:
农夫划船从右岸到左岸
条件:
¬AL(船),¬AL(农夫),AL(狼)∨AL(羊),AL(羊)∨AL(白菜)
或:
¬AL(船),¬AL(农夫),¬AL(狼),¬AL(白菜),AL(羊)
动作:
删除表:
¬AL(船),¬AL(农夫)
添加表:
AL(船),AL(农夫)
R-L(羊):
农夫带着羊划船从右岸到左岸
条件:
¬AL(船),¬AL(农夫),¬AL(羊),¬AL(狼),¬AL(羊),AL(白菜)
动作:
删除表:
¬AL(船),¬AL(农夫),¬AL(羊)
添加表:
AL(船),AL(农夫),AL(羊)
(3)问题求解过程
代码如下
#include
#include
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;
paqu->f=0;//置头下标为0
paqu->r=0;//置尾下标为0
returnpaqu;
}
elsefree(paqu);
}
printf("超出存储空间!
");
returnNULL;
}
/*入队运算函数*/
voidenque(pseqquepaqu,datatypex)
{
if((paqu->r+1)%(paqu->maxnum)==paqu->f)
printf("队列已满!
");
else
{
paqu->q[paqu->r]=x;
paqu->r=(paqu->r+1)%(paqu->maxnum);
}
}
/*出队运算函数*/
voiddeque(pseqquepaqu)
{
if(paqu->f==paqu->r)
printf("空队列!
");
else
paqu->f=(paqu->f+1)%(paqu->maxnum);
}
/*取队列头元素*/
datatypefrontque(pseqquepaqu)
{
if(paqu->f==paqu->r)
printf("队列为空!
");
else
return(paqu->q[paqu->f]);
}
/*判断是否为空队列函数*/
intisemptyque(pseqquepaqu)
{
if(paqu->f==paqu->r)
return1;
else
return0;
}
/*判断农夫位置*/
intfarmer(intlocation)
{
return(0!
=(location&0x08));
}
/*判断狼位置*/
intwolf(intlocation)
{
return(0!
=(location&0x04));
}
/*判断白菜位置*/
intcabbage(intlocation)
{
return(0!
=(location&0x02));
}
/*判断羊位置*/
intgoat(intlocation)
{
return(0!
=(location&0x01));
}
/*安全状态的判断函数*/
intsafe(intlocation)
{
if((goat(location)==cabbage(location))&&(goat(location)!
=farmer(location)))
return0;//羊吃白菜
if((goat(location)==wolf(location))&&(wolf(location)!
=farmer(location)))
return0;//狼吃羊
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;movers<<=1)//依次考虑羊、白菜、狼、农夫的移动
if((0!
=(location&0x08))==(0!
=(location&movers)))//判断是否和农夫同边
{
newlocation=location^(0x08|movers);//移动后的状态
if(safe(newlocation)&&(route[newlocation]==-1))//判断是否为安全状态
{
route[newlocation]=location;//将新的安全状态赋给location
enque(moveto,newlocation);//新的状态入队列
}
}
}
if(route[15]!
=-1)//到达最终状态
{
printf("过程是:
\n");//输出过程和位置
for(location=15;location>=0;location=route[location])
{
printf("位置是:
%d\n",location);
if(location==0)
exit(0);
}
}
elseprintf("此问题无解!
");
}
/*主函数*/
voidmain()
{
farmerproblem();
}
实验二:
一个用于动物识别的产生式系统
【实验内容】
设计该系统,让其实现可以识别老虎、金钱豹、斑马、长颈鹿、企鹅、信天翁这6种动物。
【实验目的】
让学生进一步加深对产生式系统的认识和理解。
【实验要求】
其规则库中应包含至少15条规则,假设推理开始时综合数据库中存放有以下事实:
动物有暗斑,有长脖子,有长腿,有奶,有蹄。
【参考学时】
6课时:
上机实验6课时。
设计如下:
(1)IDENTIFIER产生式规则
规则I1:
如果该动物有毛发
那
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 人工智能 作业 实验