实验一产生式系统

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档