基于产生式动物识别系统的设计.docx

上传人:11****ws 文档编号:2170825 上传时间:2019-05-01 格式:DOCX 页数:11 大小:203.90KB
下载 相关 举报
基于产生式动物识别系统的设计.docx_第1页
第1页 / 共11页
基于产生式动物识别系统的设计.docx_第2页
第2页 / 共11页
基于产生式动物识别系统的设计.docx_第3页
第3页 / 共11页
基于产生式动物识别系统的设计.docx_第4页
第4页 / 共11页
基于产生式动物识别系统的设计.docx_第5页
第5页 / 共11页
点击查看更多>>
资源描述

1、人工智能及其应用课程报告 基于产生式动物识别系统的设计学 生: 学 号: 教 师: 专 业: 重庆大学自动化学院二 O*年十一月2 / 11目 录一、实验目的 .3二、实验原理 .3三、设计过程 .41、设计思路 .42、设计过程 .41)建立规则库 .42)输入数据库 .53)推理过程 .53)问题求解基本过程 .5四、实验结果 .7五、实验心得 .7附 录 .83 / 11一、 实验目的理解和掌握产生式知识表示方法及产生式系统的基本过程,能够利用编程技术建立一个基于产生式知识表示的简单的智能系统。建立一个动物识别系统的规则库,用以识别虎、豹、斑马、长颈鹿、企鹅、鸵鸟、信天翁等 7种动物。二

2、、实验原理推理机的功能是根据一定的推理策略,从知识库中选择有关知识,对用户提供的证据进行推理,直到得出相应的结论为止。推理分为精确和不精确两种。精确推理是把相关领域的知识表示成必然的因果关系,推理的结论或是肯定的,或是否定的。而不精确推理是在“公理”的基础上,定义一组函数,求出“定理”的不确定性量度。常用的不确定推理模型有:带可信度的不确定推理、主观 Bayes 方法、模糊集理论。而此次课题动物分类专家系统可采用正向推理策略,用户给系统提供关于属性的原始信息,如给出“鸟” 、 “不会飞” 、 “会游泳” 、 “黑白色”几个属性。系统搜索知识库,找到这些属性,然后进一步搜索这些属性的相关整合属性

3、,得到最后的结论。产生式系统是把一组产生式放在一起,并让它们相互配合,协同作用,一个产生式的结论可以供另一个产生式作为已知事实使用,以求得问题的解决。产生式的基本形式为 P Q 或者 IF P THEN Q。动物识别系统的产生式规则分析如下:金钱豹嚼反刍动物黄褐色 肉食动物眼盯前方 有犬齿 吃肉 有爪有暗斑点 黑条纹 有蹄类动物有蹄哺乳动物有奶有毛发斑马图 1 动物识别系统的部分推理网络4 / 11三、设计过程1、设计思路根据上课老师的思路,本系统分为三个功能模块,分别是规则库、综合数据库和控制系统。根据产生式系统的三部分可以搭建动物识别系统。数据库的设计思想主要分为条件表和规则表。在推理过程

4、中,当规则表中某条规则的前提可以和综合数据库中的已知事实相匹配时,该规则被激活。由它推出的结论将被作为新的事实放入数据库,称为后面推理的已知事实。所以数据库系统结构如下:图 2 数据库系统结构此外,还需要包括连接数据库程序,添加规则和删除规则的规则库代码,整个系统设计跟自己所掌握的编程代码有所区别,所以没有采用老师的设计思路。2、设计过程1)建立规则库为了识别这些动物,可以根据动物识别的特征,建立下述规则的规则库: R1:if 动物有毛发 then 动物是哺乳动物R2:if 动物有奶 then 动物是哺乳动物R3:if 动物有羽毛 then 动物是鸟 R4:if 动物会飞 and 会生蛋 th

5、en 动物是鸟R5:if 动物吃肉 then 动物是食肉动物R6:if 动物有犀利牙齿 and 有爪 and 眼向前方 then 动物是食肉动物R7:if 动物是哺乳动物 and 有蹄 then 动物是有蹄类动物R8:if 动物是哺乳动物 and 反刍 then 动物是有蹄类动物R9:if 动物是哺乳动物 and 是食肉动物 and有黄褐色 and 有暗斑点 then 动物是豹 5 / 11R10:if 动物是哺乳动物 and是食肉动物 and 有黄褐色 and有黑色条纹 then 动物是虎R11:if 动物是有蹄类动物 and 有长脖子 and 有长腿 and 有暗斑点 then 动物是长颈

6、鹿R12:if 动物是有蹄类动物 and 有黑色条纹 then 动物是斑马R13:if 动物是鸟 and不会飞 and有长脖子 and有长腿 and有黑白二色 then 动物是鸵鸟R14:if 动物是鸟 and 不会飞 and 会游泳 and 有黑白二色 then 动物是企鹅R15:if 动物是鸟 and 善飞 then 动物是信天翁根据课本中规则库中的 15条规则,每一个规则会有一个结论,从而得到结论编号库数组为30,29,28,27,26,25,24,3,3,13,12,12,11,11,0。2)输入数据库假设数据库中放入一下事实:有暗斑点,有长脖子,有长腿,有奶,有蹄。求解目标:该动物是

7、什么动物?3)推理过程(1)先从规则库中取出第一条规则 r1,检查其前提是否可与综合数据库中的已知事实相匹配。r1 的前提是“有毛发” ,但事实库中无此事实,故匹配失败。然后取 r2,该前提与已知事实“有奶”相匹配,r2 被执行,并将其结论“该动物是哺乳动物”作为新的事实加入到综合数据库中。此时,综合数据库的内容变为:动物有暗斑,有长脖子,有长腿,有奶,有蹄,是哺乳动物。(2)再从规则库中取 r3,r4,r5,r6 进行匹配,均失败。接着取 r7,该前提与已知事实“是哺乳动物”相匹配,r7 被执行,并将其结论“该动物是有蹄类动物”作为新的事实加入到综合数据库中。此时,综合数据库的内容变为:动物

8、有暗斑,有长脖子,有长腿,有奶,有蹄,是哺乳动物,是有蹄类动物。(3)此后,r8,r9,r10 均匹配失败。接着取 r11,该前提“该动物是有蹄类动物 AND 有长脖子 AND 有长腿 AND 身上有暗斑” 与已知事实相匹配,r11 被执行,并推出“该动物是长颈鹿” 。由于“长颈鹿”已是目标集合中的一个结论,即已推出最终结果,故问题求解过程结束。4)问题求解基本过程(1) 初始化综合数据库,即把欲解决问题的已知事实送入综合数据库中;6 / 11(2) 检查规则库中是否有未使用过的规则,若无转 (7);(3) 检查规则库的未使用规则中是否有其前提可与综合数据库中已知事实相匹配的规则,若有,形成当

9、前可用规则集;否则转(6);(4) 按照冲突消解策略,从当前可用规则集中选择一个规则执行,并对该规则作上标记。把执行该规则后所得到的结论作为新的事实放入综合数据库;如果该规则的结论是一些操作,则执行这些操作;(5) 检查综合数据库中是否包含了该问题的解,若已包含,说明解已求出,问题求解过程结束;否则,转(2);(6) 当规则库中还有未使用规则,但均不能与综合数据库中的已有事实相匹配时,要求用户进一步提供关于该问题的已知事实,若能提供,则转(2);否则,执行下一步;(7) 若知识库中不再有未使用规则,也说明该问题无解,终止问题求解过程。7 / 11四、实验结果本实验基于 VS 2010 进行编程

10、实验,基本程序框架如下图所示图 3 实验框架按照数据库中存入的事实,在本系统中采用正向推理,得出结果,下面是长颈鹿的运行结果:图 4 运行结果五、实验心得通过此次实验理解了产生式知识表示方法,并体会到产生式表示法的自然性、模块性、有效性和清晰性的优点。掌握了构建产生式系统的基本过程,并能够利用编程建立一个基于产生式知识表示的简单的智能系统。8 / 11附录:#include #include #include “StdAfx.h“using namespace std;char *facts=“,“反刍“,“ 有蹄“,“哺乳类“,“ 眼向前方 “,“有爪“, “犬齿“,“ 吃肉“,“下蛋“,“

11、 能飞 “,“有羽毛“,“蹄类“,“ 食肉类“,“鸟类“,“ 有奶 “,“毛发“,“善飞“,“ 黑色白条纹“,“游泳 “,“长腿“,“长脖子“,“黑条纹“,“ 暗斑点“,“黄褐色 “;char *resultSet=“,“信天翁“,“ 企鹅“,“鸵鸟“,“ 斑马 “,“长颈鹿“,“ 虎“,“豹“ ;struct factDB /综合数据库中的已知事实int curNum;int fact30;int initNum;factDb;struct Rule /规则 结构体int factNum; int fact5;bool endResult; /是否为结果集int resultID; /推出的

12、结果 IDbool used; /已使用过标志bool possible; /是否可能标志,针对-9 (不能飞)若 Rule 中有 9,而综合数据库中有-9 则该规则标记不可能int needFactPos; /通过事实比较,记录下一个需要的事实位置,方便下次比较开始点后移和首先寻找该位置值是否新增即可*rule;bool findNeedFact(int factID,int pos) /寻找 needFactPos 位置值是否存在于综合事实库中int i=pos;for(;ifactDb.curNum)return 0; /已知事实还没有该规则事实多if(r.needFactPos)if(

13、!findNeedFact(r.factr.needFactPos,r.needFactPos)return 0; /需要的值还不存在else r.needFactPos+;if(cmpArray(r)r.used=true;if(r.endResult)return 1; /得到了最终结果10 / 11else return 2; /得到中间结果else return 0;int main()freopen(“in.txt“,“r“,stdin);int n;cinn;rule=(Rule *)malloc(sizeof(Rule)*n);int i,j;for(i=0;irulei.fac

14、tNum;for(j=0;jrulei.factj;sort(rulei.fact,rulei.fact+rulei.factNum);cinrulei.endResultrulei.resultID;rulei.used=false;rulei.possible=true;rulei.needFactPos=0;cinfactDb.initNum;factDb.curNum=factDb.initNum;coutfactDb.facti;coutfactsfactDb.facti“t“;coutendlendl;sort(factDb.fact,factDb.fact+factDb.curNum);int res;bool isEnd=false;while(!isEnd)isEnd=true;for(i=0;in;i+) if(rulei.used | !rulei.possible)continue;res=cmpFact(rulei); if(res=0)continue;/不匹配

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 实用文档资料库 > 策划方案

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。