人工智能 卢童.doc_第1页
人工智能 卢童.doc_第2页
人工智能 卢童.doc_第3页
人工智能 卢童.doc_第4页
人工智能 卢童.doc_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

人工智能与专家系统教学实习设计题目:一个关于植物分类的专家型系统 系 名: 计算机科学与信息工程系 专 业: 信息管理与信息系统 班 级: 信息一班 姓 名: 卢童 学 号:0808044127 指导老师: 郭鹏 目录1. 设计任务1.1 设计题目31.2设计要求31.3设计任务32方案设计2.1原理32.2 具体设计方法33系统实施3.1 系统开发环境53.2系统主要功能介绍53.3处理流程图53.4 核心源程序63.5系统运行结果64开发心得4.1设计存在的问题74.2经验和体会85参考文献9 1.设计任务1.1 设计题目利用Prolog设计一个关于植物分类的专家型系统 1.2设计要求利用Prolog语言实现基于产生式规则的正向推理和反向推理,通过设计一个关于植物分类的专家型系统进一步熟悉和了解Prolog语言。并对人工智能技术有更加深入的了解。1.3设计任务 一个关于植物分类的小型专家系统,在植物分类系统中,要区分各种植物,可以对每种植物构造一条识别规则,其中规则右部为识别出的植物名,左部为该植物的特征。2方案设计2.1原理 本次实验采用的推理方法为正向推理,正向推理是从已知事实出发,通过规则库求的结论。这种推理方式是正向使用规则,即问题的初始状态作为初始数据库,仅当数据库中的事实满足某条规则的前提时,该规则才能被使用。正向推理的推理基础是逻辑演绎的推理链。从一组事实出发,使用一组规则,来证明目标的成立。正向推理的步骤步1 将初始事实置入动态数据库;步2 用动态数据库中的事实,匹配目标条件,若目标条件满足,则推理成功,结束。 步3 用规则库中各规则的前件匹配动态数据库中的事实,将匹配成功的规则组成冲突集;步4 若冲突集为空,则运行失败,退出。步5 对冲突集做冲突消解,对选择执行的各规则,将其结论加入动态数据库,或执行其动作,转步2。2.2 具体设计方法/* 比较两个字符串*/bool equals(char a255,char b255) int i; if(strlen(a) = strlen(b) for(i = 0; i (int)strlen(a); i+) if(ai != bi) return false;return true;return 0;/* 显示事实 */void showfact() int n;n=sizeof(fact)/4;cout事实:;for(int i=0;in;i+) coutfacti,;coutendl;/* 显示规则 */void showrule() int m;m=sizeof(rule)/4;cout规则库中的规则:endl;for(int k=0;km;k+) coutrulekendl;/* 第一次单条件匹配 */void one_match()char m255;char n255;char b255;coutm; coutn;int k; k=sizeof(fact)/4;int successCount=0;char c1255,c2255,c3255,c4255; memcpy(c1,fact20,strlen(fact20)+1); memcpy(c2,fact21,strlen(fact21)+1); memcpy(c3,fact22,strlen(fact22)+1); memcpy(c4,fact23,strlen(fact23)+1);if(equals(m,c1)=1)|(equals(m,c2)=1)|(equals(m,c3)=1)|(equals(m,c4)=1) for(int j=0;jk;j+) memcpy(b,factj,strlen(factj)+1); if(equals(n,b)=1) +successCount; if(successCount=1) cout匹配成功endl; else cout匹配失败,该条规则放弃endl;elsecout匹配无结果,该条规则加入待测试规则集endl;/* 第一次双条件(关系为或)匹配 */void two_or_match()char m255;char n255;char b255;coutm;coutOR;coutn;int k; k=sizeof(fact)/4;int successCount= 0;for(int j=0;jk;j+) memcpy(b,factj,strlen(factj)+1); if(equals(m,b)=1) +successCount; if(equals(n,b)=1) +successCount; if(successCount=1)|(successCount=2) cout匹配成功,加入冲突集endl;elsecout匹配无结果,该条规则加入待测试规则集endl;/* 第一次双条件(关系为与)匹配1(模糊条件不同) */void two_and_match1()char m255;char n255;char a255;char b255;char c255;coutm;coutn; couta;coutAND;coutb;int k; k=sizeof(fact)/4;int successCount= 0;char c1255,c2255,c3255,c4255; memcpy(c1,fact20,strlen(fact20)+1); memcpy(c2,fact21,strlen(fact21)+1); memcpy(c3,fact22,strlen(fact22)+1); memcpy(c4,fact23,strlen(fact23)+1);if(equals(m,c1)=1)|(equals(m,c2)=1)|(equals(m,c3)=1)|(equals(m,c4)=1)|(equals(n,c1)=1)|(equals(n,c2)=1)|(equals(n,c3)=1)|(equals(n,c4)=1) for(int j=0;jk;j+) memcpy(c,factj,strlen(factj)+1); if(equals(a,c)=1) +successCount; if(equals(b,c)=1) +successCount; if(successCount=1)cout匹配无结果,该条规则加入待测试规则集endl;else cout匹配失败,该条规则放弃endl; elsecout匹配无结果,该条规则加入待测试规则集endl;/* 第一次双条件(关系为与)匹配2(模糊条件相同) */void two_and_match2()char m255;char n255;char a255;char b255;char c255;coutm;coutn; couta;coutAND;coutb;int k; k=sizeof(fact)/4;int successCount= 0;char c1255,c2255,c3255,c4255; memcpy(c1,fact20,strlen(fact20)+1); memcpy(c2,fact21,strlen(fact21)+1); memcpy(c3,fact22,strlen(fact22)+1); memcpy(c4,fact23,strlen(fact23)+1);if(equals(m,c1)=1)|(equals(m,c2)=1)|(equals(m,c3)=1)|(equals(m,c4)=1)&(equals(n,c1)=1)|(equals(n,c2)=1)|(equals(n,c3)=1)|(equals(n,c4)=1) for(int j=0;jk;j+) memcpy(c,factj,strlen(factj)+1); if(equals(a,c)=1) +successCount; if(equals(b,c)=1) +successCount; if(successCount=0)|(successCount=1)cout匹配无结果,该条规则加入待测试规则集endl;else cout匹配失败,该条规则放弃endl; /* 添加新的规则集 */void addrule() int n=0;cout规则库中的规则:n;while(n15)coutrulenn;cout*新的规则集添加完成*endl;/* 添加新的事实 */void addfact()int m,n,k,j;char a255;char b255; k=sizeof(fact)/4;coutkendl;cout冲突集无冲突,则将后件加入动态数据库endl;coutn;couta;fact1n=new charstrlen(a)+1;memcpy(fact1n,a,strlen(a)+1);cout事实:;for(int i=0;in+1;i+) coutfact1i,;coutendl; j=sizeof(fact2)/4;coutjendl;coutm;coutb; fact3m=new charstrlen(b)+1;memcpy(fact3m,b,strlen(b)+1);/* 添加冲突集 */void addconf()int n;coutn;char a255;couta;confn=new charstrlen(a)+1;memcpy(confn,a,strlen(a)+1);cout冲突集:;for(int i=0;in+1;i+) coutconfi,;coutendl;3系统实施3.1 系统开发环境硬件设备:计算机局域网,服务器1台,软件系统: Windows XP操作系统、Prolog编程工具3.2系统主要功能介绍 了解状态空间的概念与方法,学会用该方法描述待求解的问题,并编写Prolog程序设计一个关于植物分类的专家型系统 3.3程序实现过程初始事实:它的果肉为乳黄色它的果实里无石细胞它的果实为梨果它的果实无毛它的花托呈杯形它种子的胚有两个子叶规则:R1:if它种子的胚有两个子叶它的叶脉为网状then它是双子叶植物R2:if它种子的胚只有一个子叶 then它是单子叶植物R3:if它的果肉为白色 then 它是梨R4:if它的叶脉平行 then 它是单子叶植物R5:if它是双子叶植物它的花托呈杯形then它是蔷薇科植物R6:if它的花托呈圆柱形它的花瓣有5枚then它是蔷薇科植物R7:if它是双子叶植物它的花托呈圆柱形then它是蔷薇科植物R8:if它是蔷薇科植物它的果实为核果then它是李亚科植物R9:if 它是蔷薇科植物它的果实为梨果then它是苹果亚科植物R10:if它是李亚科植物它的果实有毛then它是桃R11:if它是李亚科植物它的果实无毛then 它是李R12:if它的果实为扁圆形它的果实外有纵沟then它是桃R13:if它是苹果亚科植物它的果实里无石细胞then它是苹果R14:if它是苹果亚科植物它的果实里有石细胞then它是梨R15:if它的果肉为乳黄色它的果肉质脆then它是苹果推理过程:初始事实写入动态数据库 果肉为乳黄色,果实里无石细胞,果实为梨果,果实无毛,花托呈杯形,种子的胚有两个子叶第一次循环用动态数据库的事实匹配目标条件,目标条件不成立用规则库中的规则逐一与数据库匹配R1:if它种子的胚有两个子叶它的叶脉为网the它是双子叶植物 “双子叶胚”匹配成功,加入冲突集R2:if它种子的胚只有一个子叶 then它是单子叶植物 匹配失败,该条规则放弃R3:if它的果肉为白色 then 它是梨 匹配失败,该条规则放弃R4:if它的叶脉平行 then 它是单子叶植物 匹配无结果,该条规则加入待测试规则集R5:if它是双子叶植物它的花托呈杯形then它是蔷薇科植物 “双子叶植物”目前的动态数据库无法匹配,匹配无结果,该条规则加入待测试规则集R6:if它的花托呈圆柱形它的花瓣有5枚then它是蔷薇科植物 匹配失败,该条规则放弃R7:if它是双子叶植物它的花托呈圆柱形then它是蔷薇科植物 匹配失败,该条规则放弃R8:if它是蔷薇科植物它的果实为核果then它是李亚科植物 “果实为核果”匹配失败,该条规则放弃R9:if 它是蔷薇科植物它的果实为梨果then它是苹果亚科植物 “蔷薇科植物”目前的动态数据库无法匹配,匹配无结果,该条规则加入待测试规则集R10:if它是李亚科植物它的果实有毛then它是桃 “果实有毛”匹配失败,该条规则放弃R11:if它是李亚科植物它的果实无毛then 它是李 “李亚科植物”目前的动态数据库无法匹配,匹配无结果,该条规则加入待测试规则集R12:if它的果实为扁圆形它的果实外有纵沟then它是桃“果实为扁圆形”和“果实外有从纵沟”目前的动态数据库无法匹配,匹配无结果,该条规则加入待测试规则集R13:if它是苹果亚科植物它的果实里无石细胞then它是苹果“苹果亚科植物”目前的动态数据库无法匹配,匹配无结果,该条规则加入待测试规则集R14:if它是苹果亚科植物它的果实里有石细胞then它是梨“果实有石细胞” 匹配失败,该条规则放弃R15:if它的果肉为乳黄色它的果肉质脆then它是苹果“果肉质脆”目前的动态数据库无法匹配,匹配无结果,该条规则加入待测试规则集冲突消解 冲突集R1无冲突,则将后件加入动态数据库果肉为乳黄色,果实里无石细胞,果实为梨果,果实无毛,花托呈杯形,种子的胚有两个子叶,双子叶 第二次循环用动态数据库的事实匹配目标条件,目标条件不成立用待测试规则库中的规则与数据库匹配 R4,R5,R9,R11,R12,R13,R15 果肉为乳黄色,果实里无石细胞,果实为梨果,果实无毛,花托呈杯形,种子的胚有两个子叶,双子叶R5:if它是双子叶植物它的花托呈杯形then它是蔷薇科植物匹配成功,加入冲突集R4、R9、R11、R12、R13、R15 :匹配无结果,新待测试规则集 R4、R9、R11、R12、R13、R15冲突消解 冲突集R5无冲突,则将后件加入动态数据库果肉为乳黄色,果实里无石细胞,果实为梨果,果实无毛,花托呈杯形,种子的胚有两个子叶,双子叶,蔷薇科第三次循环用动态数据库的事实匹配目标条件,目标条件不成立用待测试规则库中的规则与数据库匹配R4,R9,R11,R12,R13,R15果肉为乳黄色,果实里无石细胞,果实为梨果,果实无毛,花托呈杯形,种子的胚有两个子叶,双子叶,蔷薇科R9:if 它是蔷薇科植物它的果实为梨果then它是苹果亚科植物匹配成功,加入冲突集R4、R11、R12、R13、R15 :匹配无结果,新待测试规则集R4、R11、R12、R13、R15冲突消解 冲突集R9无冲突,则将后件加入动态数据库 果肉为乳黄色, 果实里无石细胞, 果实为梨果, 果实无毛,花托呈杯形, 种子的胚有两个子叶, 双子叶, 蔷薇科, 苹果亚科第四次循环用动态数据库的事实匹配目标条件,目标条件不成立用待测试规则库中的规则与数据库匹配R4、R11、R12、R13、R15果肉为乳黄色, 果实里无石细胞, 果实为梨果, 果实无毛,花托呈杯形, 种子的胚有两个子叶, 双子叶, 蔷薇科, 苹果亚科R13:if它是苹果亚科植物它的果实里无石细胞then它是苹果 匹配成功,加入冲突集R4、R11、R12、R15:匹配无结果,新待测试规则集 R4、R11、R12、R15冲突消解 冲突集R13无冲突,则将后件加入动态数据库 果肉为乳黄色, 果实里无石细胞, 果实为梨果, 果实无毛,花托呈杯形, 种子的胚有两个子叶, 双子叶, 蔷薇科, 苹果亚科, 苹果第五次循环动态数据库

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论