欢迎来到天天文库
浏览记录
ID:38614042
大小:104.00 KB
页数:8页
时间:2019-06-16
《人工智能实验报告-产生式系统推理-动物识别》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、人工智能第二次实验报告产生式系统推理班级:姓名:学号:一、实验目的1.理解并掌握产生式系统的基本原理;2.掌握产生式系统的组成部分,以及正向推理和逆向推理过程。二、实验要求1.结合课本内容,以动物识别系统为例,实现小型产生式系统;2.要求:正向推理中能根据输入的初始事实,正确地识别所能识别的动物;逆向推理中能根据所给的动物给出动物的特征。三、实验算法1.如何表示事实和特征的知识;在本程序中,我将动物的特征写入data.txt,将规则记入rules.txt,将动物种类记为goal.txt。通过函数void
2、readFiles(){readGoal();readCod();readRule();}读入所有数据分别存放于goal[],rule[],cod[]自定义数组中。2.指出综合数据库和规则库分别使用哪些函数实现的?综合数据库(包括特征和目标)typedefstruct{intxuh;//存放编号charvalu[50];//存放具体内容}Node;Nodegoal[20];Nodecod[50];规则库typedefstruct{intrslt;intcodNum;//记载前提的个数intcod[10]
3、;//记载前提的序号intused;//记载是否已匹配成功}Nrule;Nrulerule[50];voidreadRule(){FILEfp;inti;inttempxuh,tempcodn;charch;if((fp=fopen("rules.txt","r"))==NULL){printf("cannotopendata");exit(0);}i=0;rule[i].codNum=0;while((ch=fgetc(fp))!=EOF){if(i==14)i=i;tempcodn=0;whil
4、e(ch!=''&&ch!=EOF)//每一条规则{tempxuh=0;while(ch<='9'&&ch>='0'){tempxuh=tempxuh10+ch-'0';ch=fgetc(fp);}rule[i].cod[tempcodn++]=tempxuh;tempxuh=0;if(ch=='-')//下一个是结论{ch=fgetc(fp);ch=fgetc(fp);while(ch<='9'&&ch>='0'){tempxuh=tempxuh10+ch-'0';ch=fgetc(fp);}ru
5、le[i].rslt=tempxuh;}//ifelseif(ch==''){ch=fgetc(fp);}rule[i].codNum++;}i++;}rulenum=i;fclose(fp);}3.规则库的匹配算法是什么?如何选用可用规则集中的规则?分别使用哪些函数实现的?程序中的正向与逆向搜索分别是在voidmain()中调用forwardFinger()和backFinger()来实现的。正向搜索从下向上的推理。由于建立规则库时的内在要求,即子规则必在父规则前,故进行正向推理的时候只要将规则库从前
6、到后扫一遍看是否能由规则推出相应结果即可。如果能匹配推出结果则看该结果是否为动物,如果已经推出动物则推理成功。否则更新事实库,匹配下一个规则。代码如下:voidforwardFinger(){intflag;//1:工作已完成0:还未完成intflagFit;intflagCNew;//记录本次循环有没有推出新事实intfitPart;//1:有部分符合条件inti,j,k;flag=0;flagCNew=1;while(!flag&&flagCNew==1){flagCNew=0;for(j=0;j<
7、rulenum&&rule[j].used!=1&&flag==0;j++)//一条规则{if(rule[j].codNum<=inpCod.curnum)//事实数不小于当前规则所要求的条件数{flagFit=1;for(i=0;i8、;}if(flagFit==1){flagCNew=1;fitOneRule(j,&flag);//有事实匹配时,就处理把结论加入事实库等事情flagFit=0;}}}//}//whileif(flagCNew==0){printf("条件不足,不能推出它是什么动物");}}逆向搜索反向推理比正向推理要复杂一些。采用的算法是从事实库的动物开始从前往后进行匹配,看是否能成功推出,如果都推不出能识别失败,若能推出其中一个则中止搜索,识别成功。推
8、;}if(flagFit==1){flagCNew=1;fitOneRule(j,&flag);//有事实匹配时,就处理把结论加入事实库等事情flagFit=0;}}}//}//whileif(flagCNew==0){printf("条件不足,不能推出它是什么动物");}}逆向搜索反向推理比正向推理要复杂一些。采用的算法是从事实库的动物开始从前往后进行匹配,看是否能成功推出,如果都推不出能识别失败,若能推出其中一个则中止搜索,识别成功。推
此文档下载收益归作者所有