ImageVerifierCode 换一换
格式:DOCX , 页数:10 ,大小:151.83KB ,
资源ID:20982804      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/20982804.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(产生式动物识别系统设计文档格式.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

产生式动物识别系统设计文档格式.docx

1、1、设计思路根据上课老师的思路,本系统分为三个功能模块,分别是规则库、综合数据库和控制系统。根据产生式系统的三部分可以搭建动物识别系统。数据库的设计思想主要分为条件表和规则表。在推理过程中,当规则表中某条规则的前提可以和综合数据库中的已知事实相匹配时,该规则被激活。由它推出的结论将被作为新的事实放入数据库,称为后面推理的已知事实。所以数据库系统结构如下:图2 数据库系统结构此外,还需要包括连接数据库程序,添加规则和删除规则的规则库代码,整个系统设计跟自己所掌握的编程代码有所区别,所以没有采用老师的设计思路。2、设计过程1)建立规则库为了识别这些动物,可以根据动物识别的特征,建立下述规则的规则库

2、: R1:if 动物有毛发 then 动物是哺乳动物 R2:if 动物有奶 then 动物是哺乳动物 R3:if 动物有羽毛 then 动物是鸟 R4:if 动物会飞 and 会生蛋 then 动物是鸟 R5:if 动物吃肉 then 动物是食肉动物 R6:if 动物有犀利牙齿 and 有爪 and 眼向前方then 动物是食肉动物 R7:if 动物是哺乳动物 and 有蹄 then 动物是有蹄类动物 R8:if 动物是哺乳动物and 反刍 then 动物是有蹄类动物 R9:if 动物是哺乳动物 and 是食肉动物and有黄褐色 and 有暗斑点 then 动物是豹 R10:if 动物是哺乳动

3、物 and是食肉动物and 有黄褐色 and有黑色条纹 then 动物是虎 R11:if动物是有蹄类动物 and 有长脖子and 有长腿and 有暗斑点 then 动物是长颈鹿 R12:if 动物是有蹄类动物 and 有黑色条纹 then 动物是斑马 R13:if 动物是鸟and不会飞 and有长脖子and有长腿 and有黑白二色 then 动物是鸵鸟 R14:if 动物是鸟 and 不会飞 and 会游泳 and 有黑白二色then 动物是企鹅 R15:if 动物是鸟 and 善飞 then 动物是信天翁根据课本中规则库中的15条规则,每一个规则会有一个结论,从而得到结论编号库数组为30,2

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

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

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

7、识库中不再有未使用规则,也说明该问题无解,终止问题求解过程。四、实验结果本实验基于VS 2010进行编程实验,基本程序框架如下图所示图3 实验框架按照数据库中存入的事实,在本系统中采用正向推理,得出结果,下面是长颈鹿的运行结果:图4 运行结果五、实验心得通过此次实验理解了产生式知识表示方法,并体会到产生式表示法的自然性、模块性、有效性和清晰性的优点。掌握了构建产生式系统的基本过程,并能够利用编程建立一个基于产生式知识表示的简单的智能系统。附录:#include algorithm#include StdAfx.husing namespace std;char *facts=, 反刍,有蹄哺乳

8、类眼向前方有爪, 犬齿吃肉下蛋能飞有羽毛蹄类食肉类鸟类有奶毛发善飞黑色白条纹游泳长腿长脖子黑条纹暗斑点黄褐色;char *resultSet=信天翁企鹅鸵鸟斑马长颈鹿虎豹struct factDB /综合数据库中的已知事实 int curNum; int fact30; int initNum;factDb;struct Rule /规则 结构体 int factNum; int fact5; bool endResult; /是否为结果集 int resultID; /推出的结果ID bool used; /已使用过标志 bool possible; /是否可能标志,针对-9(不能飞)若Ru

9、le中有9,而综合数据库中有-9 则该规则标记不可能 int needFactPos; /通过事实比较,记录下一个需要的事实位置,方便下次比较开始点后移和首先寻找该位置值是否新增即可*rule;bool findNeedFact(int factID,int pos) /寻找needFactPos位置值是否存在于综合事实库中 int i=pos; for(;ifactDb.curNum;i+) if(factID=factDb.facti)return true; if(factIDfactDb.facti)return false; return false;bool cmpArray(Ru

10、le &r) /两个数组的事实比较 int i,j; i=r.needFactPos; j=i; while(ir.factNum) while(jfactDb.curNum) if(r.facti=factDb.factj) i+; if(i=r.factNum)return true; else if(r.factifactDb.factj) if(r.facti0 & findNeedFact(-r.facti,i)r.possible=false; /当存在相反情况时,标记不可能 r.needFactPos=i; return false; j+; if(ifactDb.curNum)

11、return 0; /已知事实还没有该规则事实多 if(r.needFactPos) if(!findNeedFact(r.factr.needFactPos,r.needFactPos)return 0; /需要的值还不存在 else r.needFactPos+; if(cmpArray(r) r.used=true; if(r.endResult)return 1; /得到了最终结果 else return 2; /得到中间结果 else return 0;int main() freopen(in.txtr,stdin); int n; cinn; rule=(Rule *)mallo

12、c(sizeof(Rule)*n); for(i=0;i+) cinrulei.factNum; for(j=0;jrulei.factj; sort(rulei.fact,rulei.fact+rulei.factNum);rulei.endResultrulei.resultID; rulei.used=false; rulei.possible=true; rulei.needFactPos=0;factDb.initNum; factDb.curNum=factDb.initNum; cout原始事实综合数据库:endl;factDb.facti; coutfactsfactDb.fa

13、ctit;endl sort(factDb.fact,factDb.fact+factDb.curNum); int res; bool isEnd=false; while(!isEnd) isEnd=true; for(i=0; if(rulei.used | !rulei.possible)continue; res=cmpFact(rulei); if(res=0)continue;/不匹配 else if(res=1) /匹配成功,得到最终结果 cout得到最终结果:resultSetrulei.resultID return 0; else if(res=2)/匹配成功,得到中间结果得到中间结果:factsrulei.resultIDt将其加入到现有的事实数据库中。 factDb.factfactDb.curNum=rulei.resultID; factDb.curNum+; sort(factDb.fact,factDb.fact+factDb.curNum); /这里是在有序数组里插入,应使用插入排序为宜 isEnd=false;现有事实无法推断出结果! return 0;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1