人工智能大作业任务实验.doc
,湖南中医药大学本科课程实验教学大纲人工智能计算机科学与技术专业执笔人:丁长松 审定人:*学院负责人:*湖南中医药大学教务处二一四年三月一、课程性质和教学目的人工智能是计算机专业本科生的一门专业必修课,适应于计算机科学与技术专业、医药信息工程专业。本课程是关于人工智能领域的引导性课程,通过本课程的学习,是使学生了解和掌握人工智能的基本概念、原理和方法,培养学生在计算机领域中应用人工智能技术提高分析和解决较复杂问题的能力,启发学生对人工智能的兴趣,培养知识创新和技术创新能力。人工智能主要研究智能信息处理技术、开发具有智能特性的各类应用系统的核心技术。本课程主要介绍人工智能的基本理论、方法和技术,主要包括常用的知识表示、逻辑推理和问题求解方法、人工智能发展学派以及主要理论。先修课程:高等数学、数据结构、数据库原理、算法设计与分析、数理逻辑二、课程目标人工智能实验应在一种为高效率开发专家系统而设计的高级程序系统或高级程序设计语言环境中进行。在目前开来,专家系统开发工具和环境可分为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<stdio.h>#include<malloc.h>typedef int datatype;/datatype定义struct seqque/队列结构体int maxnum;int f,r;/存放头尾下标datatype *q;typedef struct seqque *pseqque;/*创建一个新的队列*/pseqque createmptyqueue (int m)pseqque paqu=(pseqque)malloc(sizeof(struct seqque);/申请结构体动态空间if (paqu!=NULL)paqu->q=(datatype*)malloc(sizeof(datatype)*m);/申请datatype动态空间if (paqu->q)paqu->maxnum=m;paqu->f=0;/置头下标为0paqu->r=0;/置尾下标为0return paqu;else free(paqu);printf("超出存储空间!");return NULL;/*入队运算函数*/void enque(pseqque paqu,datatype x)if (paqu->r+1)%(paqu->maxnum)=paqu->f)printf("队列已满!");else paqu->qpaqu->r=x;paqu->r=(paqu->r+1)%(paqu->maxnum);/*出队运算函数*/void deque(pseqque paqu)if (paqu->f=paqu->r)printf("空队列!");elsepaqu->f=(paqu->f+1)%(paqu->maxnum);/*取队列头元素*/datatype frontque (pseqque paqu)if (paqu->f=paqu->r)printf("队列为空!");else return (paqu->qpaqu->f);/*判断是否为空队列函数*/int isemptyque(pseqque paqu)if (paqu->f=paqu->r)return 1;else return 0;/*判断农夫位置*/int farmer(int location)return(0!=(location&0x08);/*判断狼位置*/int wolf(int location)return(0!=(location&0x04);/*判断白菜位置*/int cabbage(int location)return(0!=(location&0x02);/*判断羊位置*/int goat(int location)return(0!=(location&0x01);/*安全状态的判断函数*/int safe(int location)if (goat(location)=cabbage(location)&&(goat(location)!=farmer(location)return 0;/羊吃白菜if (goat(location)=wolf(location)&&(wolf(location)!=farmer(location)return 0;/狼吃羊return 1;/*解决农夫问题函数*/void farmerproblem(void)int i,movers,location,newlocation;int route16;/记录已走过的步骤pseqque moveto;/存放安全的步骤moveto=createmptyqueue(16);/创建新队列enque(moveto,0x00);/置状态初值for (i=0;i<16;i+)/置已走过步骤初值routei=-1;route0=0;while(!isemptyque(moveto)&&(route15=-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)&&(routenewlocation=-1)/判断是否为安全状态routenewlocation=location;/将新的安全状态赋给locationenque(moveto,newlocation);/新的状态入队列if (route15!=-1)/到达最终状态printf("过程是:n");/输出过程和位置for (location=15;location>=0;location=routelocation)printf("位置是:%dn",location);if (location=0)exit(0);else printf("此问题无解!");/*主函数*/void main()farmerproblem();实验二:一个用于动物识别的产生式系统【实验内容】设计该系统,让其实现可以识别老虎、金钱豹、斑马、长颈鹿、企鹅、信天翁这6种动物。【实验目的】让学生进一步加深对产生式系统的认识和理解。【实验要求】其规则库中应包含至少15条规则,假设推理开始时综合数据库中存放有以下事实:动物有暗斑,有长脖子,有长腿,有奶,有蹄。【参考学时】6课时:上机实验6课时。设计如下:(1) IDENTIFIER产生式规则规则I1:如果该动物有毛发 那么它是哺乳动物规则I2:如果该动物有奶 那么它是哺乳动物规则I3:如果该动物有羽毛 那么它是鸟类动物规则I4:如果该动物能生蛋 它能飞行 那么它是鸟类动物给出的六种动物除了哺乳动物即是鸟类动物,故I1-I4这一组规则可用于区分这两类动物。规则I5:如果该动物是哺乳动物 它吃肉 那么它是肉食动物规则I6:如果该动物是哺乳动物 它长有爪子 它长有利齿 它眼睛前视 那么它是肉食动物规则I7:如果该动物是哺乳动物 它长有蹄 那么它是有蹄动物规则I8:如果该动物是哺乳动物 它反刍 那么它是有蹄动物,并且是偶蹄动物 I5-I8用于区分哺乳动物中的食肉动物和有蹄动物。规则I9:如果该动物是食肉动物 它有暗斑 那么它是金钱豹规则I10:如果该动物是食肉动物 它没有暗斑 它有黄色条纹 那么它是老虎I9-I10用于区分肉食动物。规则I11:如果该动物是有蹄动物 它有长脖子 那么它是长颈鹿规则I12:如果该动物是有蹄动物 它没有长脖子 它有黑白条纹 那么它是斑马I11-I12用于区分蹄型动物。规则I13:如果该动物是鸟类 它有能游水 那么他是会水鸟类规则I14:如果该动物是鸟类 它有长腿 它会飞 那么它是信天翁规则I15:如果该动物是会水鸟类 它不会飞 它是黑色和白色的 那么它是信企鹅 I13-I15用于区分鸟类动物。代码如下:#include<stdio.h>#include<stdlib.h>int main()int a5=0,0,0,0,0;printf("请输入该动物的特征 有的特征输入1 无的特征输入0nn");for(int k=0;k<5;k+)if(k=0)printf("该动物是否有奶?n");else if(k=1)printf("该动物是否有蹄?n");else if(k=2)printf("该动物是否有长腿?n");else if(k=3)printf("该动物是否有暗斑?n");else if(k=4)printf("该动物是否有长脖子?n");scanf("%d",&ak);printf("输入的序列为:");for(int j=0;j<5;j+)printf("%d",aj);printf("n");int b=-1;for(int i=0;i<5;i+)if(i=0)if(ai=1)printf("该动物是哺乳动物n");b=1;if(ai=0)printf("该动物不是哺乳动物n");b=0;if(i=1)if(ai=1&&b=1)printf("该动物是有蹄动物n");b=11;if(ai=0&&b=1)printf("该动物不是有蹄动物n");b=10;if(i=2)if(ai=1&&b=0)printf("该动物有长腿n");b=01;/信天翁if(ai=0&&b=0)printf("该动物没有长腿n");b=00;/企鹅if(i=3)if(ai=1&&b=10)printf("该动物有暗斑n");b=101;/猎豹if(ai=0&&b=10)printf("该动物无暗斑nn");b=100;/老虎if(i=4)if(ai=1&&b=11)printf("该动物有长脖子n");b=111;/长颈鹿if(ai=0&&b=11)printf("该动物没有长脖子n");b=110;/斑马if(b=01)printf("该动物是信天翁n");else if(b=00)printf("该动物是企鹅n");else if(b=101)printf("该动物是猎豹n");else if(b=100)printf("该动物是老虎n");else if(b=111)printf("该动物是长颈鹿n");else if(b=110)printf("该动物是斑马n");elseprintf("该动物不存在n");system("pause");return 0;实验三:子句消解代码如下#include<stdio.h>#include<iostream.h>#include<string.h>#include<stdlib.h>#define N 50#define M 50void ReplaceString(char *Src,char *a,char *b) char *ptr; int len = strlen(Src); ptr = (char*)malloc(sizeof(char)*len + 10); strcpy(ptr, Src); int subLen_a = strlen(a);int subLen_b=strlen(b);int j;int k=subLen_b-subLen_a; for ( int i=0; i<len; i+ ) if ( 0=strncmp(&ptri, a, subLen_a) )for(j=i+subLen_a;j<len;j+)ptrj+k=ptrj;strncpy(&ptri, b, subLen_b); ptrlen+k = 0;strcpy(Src,ptr);void xiaojie(char a,char b)char ANN,BNN;int n=0,m=0,i,j;int lenth_a=strlen(a),lenth_b=strlen(b);for(i=0;i<lenth_a;i+)if(ai!=V)Anm=ai;m+;elseAnm=0;m=0;n+;Anm=0;int k=n;/A的记录行数n=0,m=0;for(i=0;i<lenth_b;i+)if(bi!=V)Bnm=bi;m+;elseBnm=0;m=0;n+;Bnm=0;int r=n;/B的记录行数/检查两子句是否含有互补对for(n=0;n<=k;n+)for(m=0;m<=r;m+)if(Bm0=)&&(Bm1=An0)/出现互补对/置换char xNN,yNN;int g=0,h=0;lenth_a=strlen(An);lenth_b=strlen(Bm);for(i=2;i<lenth_a-1;i+)if(Ani!=,)xgh=Ani;h+;elsexgh=0;h=0;g+;xgh=0;g=0,h=0;for(i=3;i<lenth_b-1;i+)if(Bni!=,)ygh=Bni;h+;elseygh=0;h=0;g+;ygh=0;for(int i=0;i<=g;i+)/置换if(strlen(xi)>=strlen(yi)cout<<xi<<"/"<<yi<<endl; for(j=0;j<=r;j+)ReplaceString(Bj ,yi, xi); if(strlen(xi)<strlen(yi) cout<<yi<<"/"<<xi<<endl; for(j=0;j<=k;j+)ReplaceString(Aj ,xi, yi);for(i=n;i<=k;i+)/消去互补对strcpy(Ai,Ai+1);k=k-1;for(i=m;i<=r;i+)strcpy(Bi,Bi+1);r=r-1;else if(An0=)&&(An1=Bm0)char xNN,yNN;int g=0,h=0;lenth_a=strlen(An);lenth_b=strlen(Bm);for(i=3;i<lenth_a;i+)if(Ani!=,)xgh=Ani;h+;elsexgh=0;h=0;g+;xgh=0;g=0,h=0;for(i=2;i<lenth_b;i+)if(Bni!=,)ygh=Bni;h+;elseygh=0;h=0;g+;ygh=0;for(i=0;i<=g;i+)/置换 if(strlen(xi)>=strlen(yi)cout<<xi<<"/"<<yi<<endl; for(j=0;j<=r;j+) ReplaceString(Bj ,yi, xi); if(strlen(xi)<strlen(yi)cout<<"&&&&"<<endl; cout<<yi<<"/"<<xi<<endl; for(j=0;j<=k;j+)ReplaceString(Aj ,xi, yi);for(i=n;i<=k;i+)/消去互补对strcpy(Ai,Ai+1);k=k-1;for(i=m;i<=r;i+)strcpy(Bi,Bi+1);r=r-1;else continue;/输出结果cout<<"消解后的字句为:"<<endl;for(n=0;n<=k;n+)cout<<An<<"V"for(m=0;m<r;m+)cout<<Bm<<"V"cout<<Bm<<endl;void main()char aN,bN;cout<<"请输入所要消解的第一个子句:"<<endl;cin>>a;cout<<"请输入所要消解的第二个子句:"<<endl;cin>>b;xiaojie(a,b);运行结果:四、教材与教学资源选用教材:蔡自兴,徐光祐。人工智能及应用,第4版。清华大学出版社,2010.参考书目:1. 王万森. 人工智能原理及其应用(第2版),电子工业出版社,2007.1。普通高等教育“十一五”国家级规划教材, 北京市精品教材。书号:ISBN:978-7-121-03730-6.2. 人工智能基础教材,邵军力、张景等编著,电子工业出版社3. 人工智能引论美.丽奇著,李卫华等译,广东科技出版社4. 人工智能导论林尧瑞、马少平著,清华大学出版社。 五、教学时间分配序号实验名称内容提要每组人数实验时数实验类型所在实验室1用谓词表示农夫、狼、山羊、白菜问题试设计出一个确保农夫、狼、山羊、白菜都能过河的方案。34基础机房2设计一个动物识别的产生式系统设计让其实现可以识别老虎、金钱豹、斑马、长颈鹿、企鹅、信天翁这6种 动物的系统36设计机房3八数码难题在33的方格棋盘上,分别放置了标有数字1、2、3、4、5、6、7、8的八张牌, 初始状态S0按照规则移动到目标状态S836设计机房4讨论人工智能的发展趋势12讨论教室 六、大纲说明(一)适用对象与参考学时本课程适用于计算机专业本科学生,参考学时48学时,其中上机实验16学时,讨论2学时。(二)教学建议实践教学:在课程后半程安排适当的上机实验和课堂讨论,让学生应用人工智能的理论、方法,分组设计几个软件,使理论与实际相结合。测评:课程实验考试方式为考查;实验教学部分应占课程总成绩的比例20%:在课程考试笔试中,实验内容占考试内容的比例不超过5%。实验成绩中预习占0.1、操作占0.3、实验纪律占0.1、实验报告占0.5,以等级制(优=90、良=80、中=70、合格=60、差=50、零=0)记分并进行最终得分折算;本课程最后成绩=实验成绩*0.2+课程考试成绩*0.8。