当前位置:文档之家› 实验一产生式系统

实验一产生式系统

实验一产生式系统——动物识别系统一、实习目的和意义1、掌握人工智能的知识表示技术,能用产生式表示法表示知识;2、掌握基于规则推理的基本方法;3、掌握产生式系统的运行机制。

二、实习内容参考教材规则库包含15条规则,开发一个专家系统可以识别老虎,金钱豹,斑马,长颈鹿,企鹅,鸵鸟等6种动物。

三、实习要求1、本次实验语言MATLAB;2、系统能通过正向推理得到正确的动物识别结果。

四、实习过程1.实验原理正向推理(事实驱动推理)1)从初始已知事实出发,在知识库KB中找出当前可适用的知识,构成可适用知识集KS;2)按某种冲突消解策略,从KS中选出一条知识进行推理,并将推出的新事实加入到数据库DB中,作为下一步推理的已知事实,再在KB中选取可适用知识构成KS;3)重复步骤二,直到求得问题的解,或KB中再无可适用的知识。

2.问题背景根据课本P33的15调动物识别的专家知识,建立规则库。

3.算法设计主要利用数组下标和元素的0,1值表示知识,规则,及相关标记。

4.Matlab实现a.算法函数名函数说明learn function learn(arr_category, arr_feature)主函数checkRule function[arr_category,arr_feature,arr_rule,ifMore,mark]=checkRule(arr_category,arr_feature,arr_rule,ifMore,mark )规则符合检测showCategory function showCategory( )类别选项打印函数showFeature function showFeature()特征选项打印函数showResult function showResult(mark)结果显示b.测试测试数据一1 0 0 0 1arr_category[5]arr_feature[20 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 00]测试数据二arr_category[5]0 0 0 0 0arr_feature[20]1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0五、实习总结1.实习总结本次实验主要复习了产生式规则,利用正向推理和15条规则,建立简单的动物识别专家系统,并具有一定的容错性。

2.附录:代码MATLAB代码:function learn(arr_category, arr_feature)%产生式规则-正向推理-主函数% 标记函数初始化,规则函数调用arr_rule=zeros(1,15);mark=-1;ifMore=0;disp(arr_category);disp(arr_feature);%showCategory();%arr_category=input('输入信息:');%showFeature();%arr_feature=input('输入信息');[arr_category,arr_feature,arr_rule,ifMore,mark]= checkRule(arr_category,arr_feature,arr_rule,ifMore,mark);busy=1;while busy==1if mark>-1showResult(mark);break;endif ifMore==0disp('无法判断具体是哪种动物!');breakendifMore=0;[arr_category,arr_feature,arr_rule,ifMore,mark]= checkRule(arr_category,arr_feature,arr_rule,ifMore,mark); endendfunction [arr_category,arr_feature,arr_rule,ifMore,mark]= checkRule(arr_category,arr_feature,arr_rule,ifMore,mark ) %正向推理函数% 逐条检查规则是否满足,若满足,则增加新信息ifMore=0;for i = 1:1:15if arr_rule(i)==0switch icase 1if arr_feature(1)>0arr_category(1)=1;arr_rule(i)=1;ifMore=1;disp(['根据规则',num2str(i)]);disp('新增信息:该动物是哺乳动物');end%break;case 2if arr_feature(2)>0arr_category(1)=1;arr_rule(i)=1;ifMore=1;disp(['根据规则',num2str(i)]);disp('新增信息:该动物是哺乳动物');end%break;case 3if arr_feature(3)>0arr_category(2)=1;arr_rule(i)=1;ifMore=1;disp(['根据规则',num2str(i)]);disp('新增信息:该动物是鸟');end%break;case 4if arr_feature(4)*arr_feature(5)>0arr_category(2)=1;arr_rule(i)=1;ifMore=1;disp(['根据规则',num2str(i)]);disp('新增信息:该动物是鸟');end%break;case 5if arr_feature(6)>0arr_category(3)=1;arr_rule(i)=1;ifMore=1;disp(['根据规则',num2str(i)]);disp('新增信息:该动物是食肉动物');end%break;case 6if arr_feature(7)*arr_feature(8)*arr_feature(9)>0arr_category(3)=1;arr_rule(i)=1;ifMore=1;disp(['根据规则',num2str(i)]);disp('新增信息:该动物是食肉动物');end%break;case 7if arr_category(1)*arr_feature(10)>0arr_category(4)=1;arr_rule(i)=1;ifMore=1;disp(['根据规则',num2str(i)]);disp('新增信息:该动物是有蹄类动物');end%break;case 8if arr_category(1)*arr_category(5)>0arr_category(4)=1;arr_rule(i)=1;ifMore=1;disp(['根据规则',num2str(i)]);disp('新增信息:该动物是有蹄类动物');end%break;case 9ifarr_category(1)*arr_category(3)*arr_feature(11)*arr_feature(12)>0arr_animal(2)=1;arr_rule(i)=1;ifMore=1;mark=2;disp(['根据规则',num2str(i)]);end%break;case 10ifarr_category(1)*arr_category(3)*arr_feature(11)*arr_feature(13)>0arr_animal(1)=1;arr_rule(i)=1;ifMore=1;mark=1;disp(['根据规则',num2str(i)]);end%break;case 11ifarr_category(4)*arr_feature(14)*arr_feature(15)*arr_feature(16)>0arr_animal(4)=1;arr_rule(i)=1;ifMore=1;mark=4;disp(['根据规则',num2str(i)]);end%break;case 12if arr_category(4)*arr_feature(13)>0arr_animal(3)=1;arr_rule(i)=1;ifMore=1;mark=3;disp(['根据规则',num2str(i)]);end%break;case 13ifarr_category(2)*arr_feature(14)*arr_feature(15)*arr_feature(17)*arr_feature(18) >0arr_animal(6)=1;arr_rule(i)=1;ifMore=1;mark=6;disp(['根据规则',num2str(i)]);end%break;case 14ifarr_category(2)*arr_feature(19)*arr_feature(17)*arr_feature(18)>0arr_animal(5)=1;arr_rule(i)=1;ifMore=1;mark=5;disp(['根据规则',num2str(i)]);end%break;case 15if arr_category(2)*arr_feature(20)>0arr_animal(7)=1;arr_rule(i)=1;ifMore=1;mark=7;disp(['根据规则',num2str(i)]);endendendendendfunction showCategory( )%类别选项显示%disp('请选择分类(1:是,0:其他):');disp('0.哺乳动物');disp('1.鸟');disp('2.食肉动物');disp('3.蹄类动物');disp('4.反刍动物');endfunction showFeature()%具体特征列表% 此处显示详细说明disp('请选择具体特征(1:是,0:其他):');disp('0.有毛发');disp('1.有奶');disp('2.有羽毛');disp('3.会飞');disp('4.会下蛋');disp('5.吃肉');disp('6.有犬齿');disp('7.有爪');disp('8.眼盯前方');disp('9.有蹄');disp('10.黄褐色');disp('11.身上有斑点'); disp('12.身上有黑色条纹'); disp('13.有长脖子');disp('14.有长腿');disp('15.身上有暗斑点'); disp('16.不会飞');disp('17.有黑白两色'); disp('18.会游泳');disp('19.擅飞');endfunction showResult(mark) %结果显示% 此处显示详细说明disp('****识别结果****'); disp('该动物是:');switch markcase 1disp('虎');%break;case 2disp('金钱豹');%break;case 3disp('斑马');%break;case 4disp('长颈鹿');%break;case 5disp('企鹅');%break;case 6disp('鸵鸟');%break;case 7disp('信天翁');%break; endend。

相关主题