




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
人工智能实验报告二 班级:XXXX 姓名:XXXX 学号:XXXXX一 实验目的1. 理解并掌握基于规则系统的表示与推理。2. 学会编写小型的产生式系统,理解正向推理和反向推理的过3. 程以及两者的差别。4. 学会设计简单的人机交互界面。二 实验预习内容及实验环境:1. 了解动物识别系统问题;2. 产生式系统的组成部分,正向推理,逆向推理的算法和产生式系统的类型。三、实验内容和步骤:1 内容:结合第五章内容,以动物识别系统(或货物袋装系统)为例,实现基于规则的系统构造实验。2 要求:1 结果显示要求(1) 有若干选择动物特征的选择列表;(2) 表现判断动物时,使用了哪些规则;(3) 表现数据库的变化;(正向推理中表现每使用一次规则后,产生新事实。反向推理中表现新的目标事实有哪些需要证明,哪些已经得到证实);(4) 显示规则的调用次序;(5) 显示最后的结果,包含动物能识别出来和动物不能识别出来两种情况。(6) 至少检查两个例子实现正向推理和反向推理的区别;老虎的例子如上所示,以下为金钱豹的例子:正向推理:反向推理:2 指出综合数据库和规则库分别使用哪些函数实现的?综合数据库和规则库均采用数组完成。其中的综合数据库为一个string类型的数组,内容为事实的名称字符串,下标则为该事实的序号。数组长度为33,表示共有33个事实(最后7个为动物名称)。代码如下:string factsfactnum=有爪,有犬齿,有奶,有毛发,目视前方,吃肉,有蹄,有羽毛,会飞,生蛋,不会飞,黑白色,会游泳,善飞,不怕风浪,长腿,长脖子,有暗斑点,白色,黑色斑点,黑色条纹,黄褐色,食肉动物,鸟,哺乳动物,有蹄动物,老虎,金钱豹,长颈鹿,斑马,鸵鸟,企鹅,海燕;规则库为一个结构体数组。该结构体由一个int型数组(表示前提条件的序号集合)和一个int数据(表示由此前提推出的结果)表示。该数组长度为14,表明有14条规则。该规则库在建立时有一个内在要求:前提的规则(子规则)的序号必须在父规则之前。(便于正向推理的实现)代码如下:struct ruleint con10;int res;Rule rulesrulenum=2,-1,24,3,-1,24,7,-1,23,8,9,-1,23,24,0,1,4,-1,22 ,24,5,-1,22,24,6,-1,25,22,21,20,-1,26,22,21,19,-1,27,25,15,16,21,17,-1,28,25,18,20,-1,29,23,10,15,16,11,-1,30,23,10,12,11,-1,31,23,13,14,-1,32;3 规则库的匹配算法是什么?如何选用可用规则集中的规则?分别使用哪些函数实现的?用一个bool型的与数据库数组等长的enfact数组表示各事实是否已经满足(或已经推出)。要匹配一个规则的时候,只需查看其前提序号集数组中每个元素对应的enfact数组中的值是否为true,如果所有都为true则可由该规则推出相应结果。代码如下:bool enfactfactnum;memset(enfact,false,factnum);/每次输入时需对该数组进行初始化/以下为输入过程while(ti!=-1) if(ti=0&ti=notanimal) enfactti=true; else cout输入错误!请输入025之间的数字! ti;以上,则完成了输入,并对enfact数组进行了初始化。现在对正向推理和反向推理的匹配和具体推理过程进行简要说明。 正向推理 :从下向上的推理。由于建立规则库时的内在要求,即子规则必在父规则前,故进行正向推理的时候只要将规则库从前到后扫一遍看是否能由规则推出相应结果即可。如果能匹配推出结果则看该结果是否为动物,如果已经推出动物则推理成功。否则更新数据库,匹配下一个规则。代码如下:int obverse()outputf(1);int ti;int i,j;int tres;coutendl;for(i=0;irulenum;i+)j=0;ti=rulesi.conj; while(ti!=-1) /假设前提数不超过9个,必存在-1作为结束 if(enfactti=false) break; j+; ti=rulesi.conj; if(ti=-1) tres=rulesi.res; enfacttres=true; cout运用了规则i : ; j=0; while(rulesi.conj!=-1) coutfactsrulesi.conj ; j+; cout factstresendl; if(isAnimal(tres) if(noOtiose(tres)return tres; else return -1; return -1; 反向推理 :从上向下的推理。反向推理比正向推理要复杂一些。采用的算法是从事实数据库的动物开始从前往后进行匹配,看是否能成功推出,如果都推不出能识别失败,若能推出其中一个则中止搜索,识别成功。推某一个事实时,仍然是从该事实的前提出发,逐个匹配,若所有的前提满足,则该事实满足。不同的是,这里以该事实为结果的前提可能有很多,我采用了牺牲空间换时间的方法,即不是将规则库从头到尾搜一遍来查找以待查事实为结果的规则,而是事先将所有的先保存在一个结构体数组中,结构体中只有一个数组,表示能推出某个结果的规则序号。代码如下:struct factruleint rulen5;factrule factrulesfactnum=-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,5,-1,2,3,-1,0,1,-1,6,-1,7,-1,8,-1,9,-1,10,-1,11,-1,12,-1;故要看某个事实是否能推出的时候,只要将它对应的标号的factrules中的数组中的规则进行匹配即可,只要有一条规则满足,即可中止搜索,推出该事实可满足。另外,由于某个规则的前提可能是另一个规则的结果,这相当于规则的嵌套。所以在进行反向推理时必须用到递归技术,并且是一种回溯。整个反向推理的代码如下:bool achieve(int ri) /int j;int ti;coutendl当前验证目标为: factsrulesri.resendl;cout尝试规则ri : ;j=0;while(rulesri.conj!=-1)coutfactsrulesri.conj ;j+;cout factsrulesri.resendl; j=0;ti=rulesri.conj;while(ti!=-1)if(enfactti=false)int ki=0; if(factrulesti.rulenki=-1)cout条件factsti不满足!endl;cout使用规则ri : ;j=0;while(rulesri.conj!=-1)coutfactsrulesri.conj ;j+;cout factsrulesri.res 失败!endl;return false; elsecout条件factsti未知,继续推理.endl;bool ok=false;for(ki=0;factrulesti.rulenki!=-1&!ok;ki+)ok=achieve(factrulesti.rulenki);if(ok)cout条件factsti满足!endl;j+;ti=rulesri.conj;elsecout条件factsti不满足!endl;cout使用规则ri : ;j=0;while(rulesri.conj!=-1)coutfactsrulesri.conj ;j+;cout factsrulesri.res 失败!endlendl;return false;elsecout条件factsti满足!endl;j+;ti=rulesri.conj;cout使用规则ri : ;j=0;while(rulesri.conj!=-1)coutfactsrulesri.conj ;j+;cout factsrulesri.res 成功!endl;return true;int reverse()outputf(2); int i; for(i=animalfrom;irulenum;i+) coutendl-由动物目标:factsrulesi.res进行反向推理-endl; if(achieve(i) if(noOtiose(i+notanimal-animalfrom+1) return i+notanimal-animalfrom+1; else return -1; return -1;l 注:本系统对输入事实冗余的情况做出了处理。采用的算法是:仍然是空间换时间的思想,事先将所有动物可能有的特征做成一个与特征数等长的bool数组typefact,这样只需在推出某种动物后再将该动物对应的数组typefact与enfact数组进行匹配,看enfact中是否存在多余的错误特征即可。代码如下:bool typefactfactnum-notanimal-1factnum=1 ,1 ,1 ,1 ,1 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,1 ,1 ,1 ,0 ,1 ,0 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,1 ,1 ,1 ,1 ,1 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,1 ,0 ,1 ,1 ,0 ,1 ,0 ,0 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,1 ,1 ,0 ,0 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,1 ,1 ,1 ,0 ,0 ,0 ,1 ,0 ,0 ,1 ,1 ,0 ,0 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,1 ,1 ,0 ,0 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,1 ,0 ,1 ,0 ,0 ,0 ,1 ,1 ,0 ,0 ,0 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,1 ,1 ,1 ,1 ,1 ,0 ,0 ,0 ,1 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,1 ,1 ,1 ,1 ,1 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,1 ,1 ,1 ,0 ,0 ,0 ,1 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,1 ;bool noOtiose(int fi)int ki=fi-notanimal-1;bool ok=true;for(int i=1;ifactnum;i+)if(enfacti=true&typefactkii=false)ok= false;if(!ok)coutendl虽然需要的特征都满足,但有多余的特征!推理失败! endl多余的特征为: ;for(int i=1;ifactnum;i+)if(enfacti=true&typefactkii=false)coutfactsi ;ok= false;cout endl;cout 故该动物不是factsfi!endl;return false;elsereturn true;四、 实验总结及体会:1. 通过本次实践,对正向推理反向推理的过程可以说已经了如指掌了,对代码的控制能力也有了一定的提高,递归函数的设计,流程的控制
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025【合同范本】有限责任公司章程(合资公司)
- 中考病句秒改秘籍:6类标志词+口诀
- 2024年海南师范大学招聘专任教师真题
- 江西省新余市实验中学2024-2025学年高三下学期冲刺模拟(三)数学试题(解析)
- 2023-2024年亚太区装修成本指南-仲量联行
- 2025年二手交易电商平台信用评价体系与消费者信任度培养策略研究报告
- 非物质文化遗产展示中心企业制定与实施新质生产力项目商业计划书
- 发型美学塑造行业跨境出海项目商业计划书
- 2025年儿童健康监测可穿戴设备市场发展动态报告
- 大专数学基础题目及答案
- 浙江省杭州市文澜中学2025届初三第三次(4月)联考英语试题含答案
- 高血压危象的急救与护理
- 建筑工程行业项目成本控制方案
- 无线电管理一体化平台互联互通规范
- 合同范本之简易版劳动合同5篇
- 2025年中国第三方支付系统市场运行态势及行业发展前景预测报告
- 一年级下册语文课件统编版-11 浪花【新课标版】
- 新加坡专业服务公司指南 202502
- 大学物理上册总复习
- 《土壤与土壤改良》课件
- 儿科学知到智慧树章节测试课后答案2024年秋山东第一医科大学
评论
0/150
提交评论