您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > AI人工智能 > 人工智能产生式系统实验报告
1实验报告【实验名称】______________产生式系统_______________________【实验目的】1.理解产生式系统的结构原理与实际应用。2.掌握产生式规则表示及规则库组建的实现方法。3.熟悉和掌握产生式系统的运行机制,掌握基于规则推理的基本方法。【实验原理】产生式系统用来描述若干个不同的以一个基本概念为基础的系统,这个基本概念就是产生式规则或产生式条件和操作对。在产生式系统中,论域的知识分为两部分:用事实表示静态知识;用产生式规则表示推理过程和行为。【实验内容】1.自己建造产生式系统(包括规则库和事实库),然后进行推理,即可以自己输入任何的事实,并基于原有的规则和输入的事实进行推理。2.建造动物识别系统,能根据输入的动物特征判断是那种动物或给出相应的回答。3.算法设计①首先建立事实库事实库是在程序的开始直接输入的,用户根据需要选择,即要求用户先输入特征个数,然后输入动物的特征,进行识别。如果未识别出来,则可以重新选择,或者退出。动物的特征如下:1有奶2有毛发3有羽毛4会飞5生蛋6有爪7有犬齿8目盯前方9吃肉10有蹄11反刍食物12黄褐色13黑色条纹14黑色斑点15长腿16长脖子17暗斑点18白色19不会飞20黑白色21会游泳22善飞23不怕风浪24哺乳动物25鸟26食肉动物27有蹄动物28偶蹄动物229海燕30老虎31金钱豹32长颈鹿33斑马34鸵鸟35企鹅②建立静态规则库即建立产生式规则,本算法采用了产生中间事实的方法,便于建立和使用规则。为了便于设计,我们把要识别的动物限于7种,这样所需要的产生式规则就比较少。本算法共有15种规则,如下:R1:如果动物有奶,则它是哺乳动物R2:如果动物有毛发,则它是哺乳动物R3:如果动物有羽毛,则它是鸟R4:如果动物会飞且生蛋,则它是鸟R5:吃肉的哺乳动物是食肉动物R6:有爪有犬齿木钉前方的哺乳动物是食肉动物R7:有蹄的哺乳动物是有蹄动物R8:反刍食物的有蹄动物是偶蹄动物R9:黄褐色有黑条纹的食肉动物是老虎R10:黄褐色有黑色斑点的食肉动物是金钱豹R11:长腿长脖子有黄褐色暗斑点的有蹄动物是长颈鹿R12:有黑白条纹的有蹄动物是斑马R13:不会飞长腿长脖的鸟是鸵鸟R14:不会飞会游泳黑白色的鸟是企鹅R15:善飞不怕风浪的鸟是海燕具体表示如下:R1:1-24R2:2-24R3:3-25R4:4*5-25R5:6*7*8*24-26R6:9*24-26R7:10*24-27R8:11*27-28R9:12*13*24-30R10:12*14*24-31R11:12*15*16*17*27-32R12:13*18*27-33R13:15*16*19*25-34R14:19*20*21*25-35R15:22*23*25-29③正向推理过程从已知事实出发,通过规则库求得结论,或称数据驱动方式。推理过程是:规则集中的规则前件与事实库中的事实进行匹配,得匹配的规则集合。从匹配规则集合中选择一条规则作为使用规则。执行使用规则的后件,将该使用规则的后件送入事实库中。重复这个过程直至达到目标。如有多条匹配规则需从中选一条作为使用规则,本算法是根据规则的顺序依次选择,且规则中不存在同一组事实对应多条匹配规则。3④实验流程图开始初始化欲加入的事实的个数及事实令i=1取出规则i的前提条件部分事实库中有相应的事实取出规则i结论部分结论为新事实将该规则加入到事实库中该事实是结论性事实将该规则的结论作为最终的结论结束YYYi=i+1NNN⑤实验结果及分析如输入如下事实:有羽毛、善飞、不怕风浪。系统的推理过程如下:先从规则库中取出第一条规则R1,检查其前提是否可与事实库中的已知事实相匹配。R1的前提是“有奶”,但事实库中无此事实,故匹配失败;然后取R2,匹配失败;接着取R3,该前提与已知事实“有羽毛”相匹配,故R3被执行,并将其结论“鸟”作为新的事实加入到事实库中。此时,事实库的内容变为:有羽毛、善飞、不怕风浪、鸟;此后,R4~R14均匹配失败,接着取R15,该前提“善飞+不怕风浪+鸟”与已知事实相匹配,R15被执行,并推出“该动物是海燕”。由于“海燕”已是目标集合中的一个结论,即已推出最终结果,故问题求解过程结束。下面是程序运行的结果:4【实验程序】#includestdio.h#defineN23voidmain(){inti,j,k,a,b,c;intnum;intfact[N],temp[N];intflag=1;while(flag==1){printf(动物的特征如下:\n);printf(1有奶2有毛发3有羽毛4会飞5生蛋\n6有爪7有犬齿8目盯前方9吃肉10有蹄\n11反刍食物12黄褐色13黑色条纹14黑色斑点15长腿\n16长脖子17暗斑点18白色19不会飞20黑白色\n21会游泳22善飞23不怕风浪\n);printf(请输入描述该动物特征的个数:);scanf(%d,&num);printf(请输入对这只动物的特征描述的序号(按序号由小到大):\n);for(i=0;inum;i++){scanf(%d,&a);fact[i]=a;}//********************************for(i=0;inum;i++){if(fact[i]==1)5{fact[num]=24;num++;printf(使用规则1,新增加的事实为:哺乳动物\n);break;}}//********************************for(i=0;inum;i++){if(fact[i]==2){fact[num]=24;num++;printf(使用规则2,新增加的事实为:哺乳动物\n);break;}}//********************************for(i=0;inum;i++){if(fact[i]==3){fact[num]=25;num++;printf(使用规则3,新增加的事实为:鸟\n);break;}}//********************************k=0;for(i=0;inum;i++){if(fact[i]==4){temp[k]=fact[i];k++;continue;}if(fact[i]==5){temp[k]=fact[i];break;}}if(temp[0]==4&&temp[1]==5){fact[num]=25;num++;printf(使用规则4,新增加的事实为:鸟\n);}//********************************k=0;for(i=0;inum;i++){if(fact[i]==6)6{temp[k]=fact[i];k++;continue;}if(fact[i]==7){temp[k]=fact[i];k++;continue;}if(fact[i]==8){temp[k]=fact[i];k++;continue;}if(fact[i]==24){temp[k]=fact[i];break;}}if(temp[0]==6&&temp[1]==7&&temp[2]==8&&temp[3]==24){fact[num]=26;num++;printf(使用规则5,新增加的事实为:食肉动物\n);}//********************************k=0;for(i=0;inum;i++){if(fact[i]==9){temp[k]=fact[i];k++;continue;}if(fact[i]==24){temp[k]=fact[i];break;}}if(temp[0]==9&&temp[1]==24){fact[num]=26;num++;printf(使用规则6,新增加的事实为:食肉动物\n);}//********************************k=0;for(i=0;inum;i++){if(fact[i]==10){7temp[k]=fact[i];k++;continue;}if(fact[i]==24){temp[k]=fact[i];break;}}if(temp[0]==10&&temp[1]==24){fact[num]=27;num++;printf(使用规则7,新增加的事实为:有蹄动物\n);}//********************************k=0;for(i=0;inum;i++){if(fact[i]==11){temp[k]=fact[i];k++;continue;}if(fact[i]==27){temp[k]=fact[i];break;}}if(temp[0]==11&&temp[1]==27){fact[num]=28;num++;printf(使用规则8,新增加的事实为:偶蹄动物\n);}//********************************k=0;for(i=0;inum;i++){if(fact[i]==12){temp[k]=fact[i];k++;continue;}if(fact[i]==13){temp[k]=fact[i];k++;continue;}if(fact[i]==24){temp[k]=fact[i];break;8}}if(temp[0]==12&&temp[1]==13&&temp[2]==24){fact[num]=30;//num++;printf(使用规则9,新增加的事实为:老虎\n该动物为老虎\n);}//********************************k=0;for(i=0;inum;i++){if(fact[i]==12){temp[k]=fact[i];k++;continue;}if(fact[i]==14){temp[k]=fact[i];k++;continue;}if(fact[i]==24){temp[k]=fact[i];break;}}if(temp[0]==12&&temp[1]==14&&temp[2]==24){fact[num]=31;//num++;printf(使用规则10,新增加的事实为:金钱豹\n该动物为金钱豹\n);}//********************************k=0;for(i=0;inum;i++){if(fact[i]==12){temp[k]=fact[i];k++;continue;}if(fact[i]==15){temp[k]=fact[i];k++;continue;}if(fact[i]==16){temp[k]=fact[i];k++;9continue;}if(fact[i]==17){temp[k]=fact[i];k++;continue;}if(fact[i]==27){temp[k]=fact[i];break;}}if(temp[0]==12&&temp[1]==15&&temp[2]==16&&temp[3]==17&&temp[4]==27){fact[num]=32;//num++;printf(使用规则11,新增加的事实为:长颈鹿\n该动物为长颈鹿\n);}//********************************k=0;for(i=0;inum;i++){if(fact[i]==13){temp[k]=fact[i];k++;continue;}if(fact[i]==18){temp[k]=fact[i];k++;continue;}if(fact[i]==27){temp[k]=fact[i];break;}}if(temp[0]==13&&temp[1]==18&&temp[2]==27){fact[num]=33;//num++;printf(使用规则12,新增加的事实为:斑马\n
本文标题:人工智能产生式系统实验报告
链接地址:https://www.777doc.com/doc-2704004 .html