资源预览内容
第1页 / 共23页
第2页 / 共23页
第3页 / 共23页
第4页 / 共23页
第5页 / 共23页
第6页 / 共23页
第7页 / 共23页
第8页 / 共23页
第9页 / 共23页
第10页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
人工智能与专家系统教学实习设计题目:一个关于植物分类的专家型系统 系 名: 计算机科学与信息工程系 专 业: 信息管理与信息系统 班 级: 信息一班 姓 名: 卢童 学 号: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)|(eq
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号