实验一产生式系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一产生式系统——动物识别系统
一、实习目的和意义
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.测试
测试数据一
arr_category[5] 1 0 0 0 1
arr_feature[20]0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0
测试数据二
arr_category[5]0 0 0 0 0
arr_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==1
if mark>-1
showResult(mark);
break;
end
if ifMore==0
disp('无法判断具体是哪种动物!');
break
end
ifMore=0;
[arr_category,arr_feature,arr_rule,ifMore,mark]= checkRule(arr_category,arr_feature,arr_rule,ifMore,mark); end
end
function [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(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