1、建立静态规则库即建立产生式规则,本算法采用了产生中间事实的方法,便于建立和使用规则。为了便于设计,我们把要识别的动物限于7种,这样所需要的产生式规则就比较少。本算法共有15种规则,如下:R1: 如果动物有奶,则它是哺乳动物R2: 如果动物有毛发,则它是哺乳动物R3: 如果动物有羽毛,则它是鸟R4: 如果动物会飞且生蛋,则它是鸟R5: 吃肉的哺乳动物是食肉动物R6: 有爪有犬齿木钉前方的哺乳动物是食肉动物R7: 有蹄的哺乳动物是有蹄动物R8: 反刍食物的有蹄动物是偶蹄动物R9: 黄褐色有黑条纹的食肉动物是老虎R10:黄褐色有黑色斑点的食肉动物是金钱豹R11:长腿长脖子有黄褐色暗斑点的有蹄动物是长
2、颈鹿R12:有黑白条纹的有蹄动物是斑马R13:不会飞长腿长脖的鸟是鸵鸟R14:不会飞会游泳黑白色的鸟是企鹅R15:善飞不怕风浪的鸟是海燕具体表示如下: 1-24 2- 3-25 4*5- 6*7*8*24-26 9*24- 10*24-27 11*27-28 12*13*24-30 12*14*24-31 12*15*16*17*27-32 13*18*27-33 15*16*19*25-34 19*20*21*25-35 22*23*25-29正向推理过程从已知事实出发,通过规则库求得结论,或称数据驱动方式。推理过程是: 规则集中的规则前件与事实库中的事实进行匹配,得匹配的规则集合。 从匹配
3、规则集合中选择一条规则作为使用规则。 执行使用规则的后件,将该使用规则的后件送入事实库中。 重复这个过程直至达到目标。 如有多条匹配规则需从中选一条作为使用规则,本算法是根据规则的顺序依次选择,且规则中不存在同一组事实对应多条匹配规则。实验流程图实验结果及分析如输入如下事实:有羽毛、善飞、不怕风浪。系统的推理过程如下: 先从规则库中取出第一条规则R1,检查其前提是否可与事实库中的已知事实相匹配。 R1的前提是“有奶”,但事实库中无此事实,故匹配失败;然后取R2,匹配失败;接着取R3,该前提与已知事实“有羽毛”相匹配,故R3被执行,并将其结论“鸟”作为新的事实加入到事实库中。此时,事实库的内容变
4、为:有羽毛、善飞、不怕风浪、鸟;此后,R4R14均匹配失败,接着取R15,该前提“善飞+不怕风浪+鸟”与已知事实相匹配,R15被执行,并推出“该动物是海燕”。由于“海燕”已是目标集合中的一个结论,即已推出最终结果,故问题求解过程结束。下面是程序运行的结果:【实验程序】#include#define N 23void main() int i,j,k,a,b,c; int num; int factN,tempN; int flag=1; while(flag=1) printf(动物的特征如下:n);1有奶 2有毛发 3有羽毛 4会飞 5生蛋n6有爪 7有犬齿 8目盯前方 9吃肉 10有蹄n1
5、1反刍食物 12黄褐色 13黑色条纹 14黑色斑点 15长腿n16长脖子 17暗斑点 18白色 19不会飞 20黑白色n21会游泳 22善飞 23不怕风浪n请输入描述该动物特征的个数: scanf(%d,&num);请输入对这只动物的特征描述的序号(按序号由小到大): for(i=0;inum;i+) scanf(a); facti=a; /* for(i=0; if(facti=1) factnum=24; num+; printf(使用规则1,新增加的事实为: 哺乳动物n break; if(facti=2)使用规则2,新增加的事实为: if(facti=3) factnum=25;使用规
6、则3,新增加的事实为:鸟n /* k=0; if(facti=4) tempk=facti; k+; continue; if(facti=5) if(temp0=4&temp1=5) factnum=25; num+; printf(使用规则4,新增加的事实为: if(facti=6) if(facti=7) if(facti=8) if(facti=24) if(temp0=6&temp1=7&temp2=8&temp3=24) factnum=26;使用规则5,新增加的事实为:食肉动物n if(facti=9) if(temp0=9&temp1=24)使用规则6,新增加的事实为: if(
7、facti=10) if(temp0=10& factnum=27;使用规则7,新增加的事实为:有蹄动物n if(facti=11) if(facti=27) if(temp0=11&temp1=27) factnum=28;使用规则8,新增加的事实为:偶蹄动物n if(facti=12) if(facti=13) if(temp0=12&temp1=13&temp2=24) factnum=30; /num+;使用规则9,新增加的事实为:老虎n该动物为老虎n if(facti=14)temp1=14& factnum=31;使用规则10,新增加的事实为:金钱豹n该动物为金钱豹n if(fac
8、ti=15) if(facti=16) if(facti=17)temp1=15&temp2=16&temp3=17&temp4=27) factnum=32;使用规则11,新增加的事实为:长颈鹿n该动物为长颈鹿n if(facti=18) if(temp0=13&temp1=18&temp2=27) factnum=33;使用规则12,新增加的事实为:斑马n该动物为斑马n if(facti=19) if(facti=25) if(temp0=15&temp1=16&temp2=19&temp3=25) factnum=34;使用规则13,新增加的事实为:鸵鸟n该动物为鸵鸟n if(facti
9、=20) if(facti=21) if(temp0=19&temp1=20&temp2=21& factnum=35;使用规则14,新增加的事实为:企鹅n该动物为企鹅n if(facti=22) if(facti=23) if(temp0=22&temp1=23&temp2=25) factnum=29;使用规则15,新增加的事实为:海燕n该动物为海燕n /* if(factnum29)现有事实无法推断出结果!继续请按1,退出按其它数字键:c); if(c=1) flag=c; else break;【小结或讨论】本系统的规则库是静态的,不能动态增加新的规则。这使得在规则变化的情况下不能及时改变,但是该系统已经能基本满足需要,对输入的事实能给出相应的回答,判断出是何种动物。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1