《实验一产生式系统(14页).doc》由会员分享,可在线阅读,更多相关《实验一产生式系统(14页).doc(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-实验一产生式系统-第 14 页实验一 产生式系统动物识别系统一、实习目的和意义1、掌握人工智能的知识表示技术,能用产生式表示法表示知识;2、掌握基于规则推理的基本方法;3、掌握产生式系统的运行机制。二、实习内容参考教材规则库包含15条规则,开发一个专家系统可以识别老虎,金钱豹,斑马,长颈鹿,企鹅,鸵鸟等6种动物。三、实习要求1、本次实验语言MATLAB;2、系统能通过正向推理得到正确的动物识别结果。四、实习过程1. 实验原理正向推理(事实驱动推理)1) 从初始已知事实出发,在知识库KB中找出当前可适用的知识,构成可适用知识集KS;2) 按某种冲突消解策略,从KS中选出一条知识进行推理,并将推
2、出的新事实加入到数据库DB中,作为下一步推理的已知事实,再在KB中选取可适用知识构成KS;3) 重复步骤二,直到求得问题的解,或KB中再无可适用的知识。2. 问题背景根据课本P33的15调动物识别的专家知识,建立规则库。3. 算法设计主要利用数组下标和元素的0,1值表示知识,规则,及相关标记。4. Matlab实现a. 算法函数名函数说明learnfunction learn(arr_category, arr_feature)主函数checkRulefunction arr_category,arr_feature,arr_rule,ifMore,mark= checkRule(arr_ca
3、tegory,arr_feature,arr_rule,ifMore,mark )规则符合检测showCategoryfunction showCategory( )类别选项打印函数showFeaturefunction showFeature()特征选项打印函数showResultfunction showResult(mark)结果显示b. 测试测试数据一arr_category51 0 0 0 1arr_feature200 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0测试数据二arr_category50 0 0 0 0arr_feature201 0 0
4、 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(输入信
5、息:);%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=1 if mark-1 showResult(mark); break; end if ifMore=0 disp(无法判断具体是哪种动物!); break end ifMore=0; arr_category,arr_feature,arr_rule,ifMore,
6、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:15 if arr_rule(i)=0 switch i case 1 if arr_feature(1)0 arr_category
7、(1)=1; arr_rule(i)=1; ifMore=1; disp(根据规则,num2str(i); disp(新增信息:该动物是哺乳动物); end %break; case 2 if arr_feature(2)0 arr_category(1)=1; arr_rule(i)=1; ifMore=1; disp(根据规则,num2str(i); disp(新增信息:该动物是哺乳动物); end %break; case 3 if arr_feature(3)0 arr_category(2)=1; arr_rule(i)=1; ifMore=1; disp(根据规则,num2str(
8、i); disp(新增信息:该动物是鸟); end %break; case 4 if arr_feature(4)*arr_feature(5)0 arr_category(2)=1; arr_rule(i)=1; ifMore=1; disp(根据规则,num2str(i); disp(新增信息:该动物是鸟); end %break; case 5 if arr_feature(6)0 arr_category(3)=1; arr_rule(i)=1; ifMore=1; disp(根据规则,num2str(i); disp(新增信息:该动物是食肉动物); end %break; case
9、 6 if arr_feature(7)*arr_feature(8)*arr_feature(9)0 arr_category(3)=1; arr_rule(i)=1; ifMore=1; disp(根据规则,num2str(i); disp(新增信息:该动物是食肉动物); end %break; case 7 if arr_category(1)*arr_feature(10)0 arr_category(4)=1; arr_rule(i)=1; ifMore=1; disp(根据规则,num2str(i); disp(新增信息:该动物是有蹄类动物); end %break; case 8
10、 if arr_category(1)*arr_category(5)0 arr_category(4)=1; arr_rule(i)=1; ifMore=1; disp(根据规则,num2str(i); disp(新增信息:该动物是有蹄类动物); end %break; case 9 if arr_category(1)*arr_category(3)*arr_feature(11)*arr_feature(12)0 arr_animal(2)=1; arr_rule(i)=1; ifMore=1; mark=2; disp(根据规则,num2str(i); end %break; case
11、 10 if arr_category(1)*arr_category(3)*arr_feature(11)*arr_feature(13)0 arr_animal(1)=1; arr_rule(i)=1; ifMore=1; mark=1; disp(根据规则,num2str(i); end %break; case 11 if arr_category(4)*arr_feature(14)*arr_feature(15)*arr_feature(16)0 arr_animal(4)=1; arr_rule(i)=1; ifMore=1; mark=4; disp(根据规则,num2str(
12、i); end %break; case 12 if arr_category(4)*arr_feature(13)0 arr_animal(3)=1; arr_rule(i)=1; ifMore=1; mark=3; disp(根据规则,num2str(i); end %break; case 13 if arr_category(2)*arr_feature(14)*arr_feature(15)*arr_feature(17)*arr_feature(18)0 arr_animal(6)=1; arr_rule(i)=1; ifMore=1; mark=6; disp(根据规则,num2
13、str(i); end %break; case 14 if arr_category(2)*arr_feature(19)*arr_feature(17)*arr_feature(18)0 arr_animal(5)=1; arr_rule(i)=1; ifMore=1; mark=5; disp(根据规则,num2str(i); end %break; case 15 if arr_category(2)*arr_feature(20)0 arr_animal(7)=1; arr_rule(i)=1; ifMore=1; mark=7; disp(根据规则,num2str(i); end
14、end endendendfunction 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.眼盯前方)
15、;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 mark case 1 disp(虎); %break; case 2 disp(金钱豹); %break; case 3 disp(斑马); %break; case 4 disp(长颈鹿); %break; case 5 disp(企鹅); %break; case 6 disp(鸵鸟); %break; case 7 disp(信天翁); %break;endend