人工智能实验报告-产生式系统推理-动物识别

上传人:桔**** 文档编号:507033003 上传时间:2022-11-13 格式:DOC 页数:10 大小:151KB
返回 下载 相关 举报
人工智能实验报告-产生式系统推理-动物识别_第1页
第1页 / 共10页
人工智能实验报告-产生式系统推理-动物识别_第2页
第2页 / 共10页
人工智能实验报告-产生式系统推理-动物识别_第3页
第3页 / 共10页
人工智能实验报告-产生式系统推理-动物识别_第4页
第4页 / 共10页
人工智能实验报告-产生式系统推理-动物识别_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《人工智能实验报告-产生式系统推理-动物识别》由会员分享,可在线阅读,更多相关《人工智能实验报告-产生式系统推理-动物识别(10页珍藏版)》请在金锄头文库上搜索。

1、人工智能第二次实验报告产生式系统推理班级: 姓名:学号:一、实验目的1. 理解并掌握产生式系统的基本原理;2. 掌握产生式系统的组成部分,以及正向推理和逆向推理过程。二、实验要求1. 结合课本内容,以动物识别系统为例,实现小型产生式系统;逆向推理中2. 要求:正向推理中能根据输入的初始事实,正确地识别所能识别的动物;能根据所给的动物给出动物的特征。三、实验算法1. 如何表示事实和特征的知识;,将动物在本程序中,我将动物的特征写入data.txt ,将规则记入rules.txt种类记为goal.txt 。虎钱颈马鸟鹅燕老金长斑駝企海1234567通过函数 void readFiles()read

2、Goal();readCod();readRule();读入所有数据分别存放于goal,rule,co d自定义数组中。2. 指出综合数据库和规则库分别使用哪些函数实现的? 综合数据库(包括特征和目标)typedef structint xuh;存放编号char valu50;存放具体内容Node;Node goal20;Node cod50;vc id readCodFILE +fp;int i;if C (fp=fopen C dat a* txt t r) )=NULL;printf C cannot open datanr,):ezit CO):1ifhile (f scanf (fp

3、, tcod i. xuhj 4codi-H-. valu) I =EOF):fclose (fp);/readCod规则库typedef structint rslt;int codNum;/记载前提的个数int cod10; 记载前提的序号int used;/ 记载是否已匹配成功Nrule;Nrule rule50;void readRule()FILE *fp;int i;int tempxuh,tempcod n;char ch;if(fp=fope n( rules.txt,r)=NULL) prin tf(ca nnot ope n datan); exit(0);i=0;rule

4、i.codNum=0;while(ch=fgetc(fp)!=EOF)if(i=14)i=i;tempcod n=0;/每一条规则while(ch!=n&ch!=EOF)tempxuh=0;while(ch=0) tempxuh=tempxuh*10+ch-0;ch=fgetc(fp);rulei.codtempcod n+=tempxuh;tempxuh=O;if(ch=-)下一个是结论ch=fgetc(fp);ch=fgetc(fp);while(ch=0)tempxuh=tempxuh*1O+ch-O: ch=fgetc(fp);rulei.rslt=tempxuh;/ifelse if

5、(ch=*)ch=fgetc(fp);rulei.codNum+; i+;rule num=i; fclose(fp);3. 规则库的匹配算法是什么?如何选用可用规则集中的规则?分别使用哪些函数实现 的?程序中的正向与逆向搜索分别是在void main()中调用forwardFinger()和backFinger()来实现的。正向搜索从下向上的推理。 由于建立规则库时的内在要求,即子规则必在父规则前, 故进行正向推理的时候只要将规则库从前到后扫一遍看是否能由规则推出相应结果即可。如果能匹配推出结果则看该结果是否为动物,如果已经推出动物则推理成功。否则更新事实库,匹配下一个规则。代码如下:voi

6、d forward Finger()int flag;/1:工作已完成0 :还未完成int flagFit;int flagCNew;/记录本次循环有没有推出新事实有部分符合条件int fitPart;/1:int i,j,k;flag=O;flagCNew=1;while(!flag &flagCNew=1)flagCNew=0;for(j=0;jrule num&rulej.used!=1 & flag=O;j+)一条规则if(rulej.codNum=i npCod.curnum)/事实数不小于当前规则所要求的条件数flagFit=1;for(i=0;irulej.codNu m&fla

7、gFit=1;i+)fitPart=0;for(k=0;k in pCod.cur nu m;k+)if(rulej.codi=i npCod.codk.xuh)fitPart=1;flagFit=fitPart;if(flagFit=1)flagCNew=1;fitOneRule(j,&flag);有事实匹配时,就处理把结论加入事实库等事情flagFit=0;/whileif(flagCNew=O)printf(条件不足,不能推出它是什么动物);逆向搜索反向推理比正向推理要复杂一些。采用的算法是从事实库的动物开始从前往后进行匹配,看是否能成功推出,如果都推不出能识别失败,若能推出其中一个则中

8、止搜索,识别成功。推某一个事实时,仍然是从该事实的前提出发,逐个匹配,若所有的前提满足,则该事 实满足。代码如下:void backF in ger()int i;bQueueNode markdCodMAXNUM;/stat 字段用来存它的结论的序号int flagFitAll;int markdCodNum;double fitDegree;int flagExistA ns;flagFitAll=0;flagExistA ns=0;for(i=0;i1e-5)if(StillCodNoUseA ndCo ntradict(i+cod nu m)printf(它不是 s n,goali.v

9、alu);elsebDisplayResult(fitDegree,i, &flagFitAII);elseprintf(它不是 %s n,goali.valu);if(flagFitAll=1)flagExistA ns=1;/forif(flagExistAn s=0)printf(”综上所述:没有完全符合这些特征的动物。n);/backFi nger()四、实验结果1.要求有实验运行结果截图,以及必要的说明;(1) 有若干选择动物特征的选择列表;1视飞乳已m 7丄5寺15 9 112 21束结I-1点物点 斑色动号 犬皐飞暗褐蹄序 有H善毒th食囱动物0 4 8 22 6 1112占E

10、发毛色BJI 毛羽白聲15 9 33 7 1112(2)输入特征后,询问使用者采用何种搜索方式(0 :正向1 :逆向)请输入己知的动物的特征的序号以-十结束:2 5 20 21 -1请输入序号正向咁 反向江:(3)正向搜索成功找到目标后,程序显示该动物名称,否则“显示条件不足无法判断”。情输入已知的动物的特征的序号以亠结束:2 5 20 21 -1请输入序号f正向=0反向它是老虎(4 )逆向搜索结果:请输入已知的动物的特征的序号力-结束19 21 22 -1请输入序号正向=0反向二:J 5 10 11 -1青输入序号正向咱 反向:1:1鼠 有 曇颈马 老金长斑鸵企畫 曰習習習習皆習帝2.对所实现的产生式系统进行性能分析。在数据量小的情况下识别速度较快。但是我觉得这种识别用处不够广泛。所有的规 则必须人工输入不够灵活,不能适应突发状况(如白虎)。五、实验总结及体会虽然还没有具体学习过产生式算法,但是通过本次实践, 对正向推理反向推理的过程可以说已经有了大概的了解喝一些自己的看法,对代码的控制能力也有了一定的提高,递归函数的设计,流程的控制都得到了一定的强化。我觉得本次实验的算法还是比较简单的,关键是数据结构的设计,我运用了很多自定义的结构体想使程序显得简单一些,但是效果并不好,别人很难分清那些结构体,太多了。

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

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号