实验一产生式系统

更新时间:2024-06-27 09:12:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验一 产生式系统——动物识别系统

一、实习目的和意义

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 checkRule

函数说明

function learn(arr_category, arr_feature)主函数

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] arr_feature[20]

1 0 0 0 1

0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0

测试数据二

arr_category[5] arr_feature[20]

0 0 0 0 0

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

arr_category(2)=1; arr_rule(i)=1; ifMore=1;

disp(['根据规则',num2str(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 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

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 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(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(['根据规则',num2str(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 end end end end

function showCategory( ) %类别选项显示 %

disp('请选择分类(1:是,0:其他):'); disp('0.哺乳动物'); disp('1.鸟');

disp('2.食肉动物'); disp('3.蹄类动物'); disp('4.反刍动物'); end

function 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.擅飞'); end

function 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; end end

本文来源:https://www.bwwdw.com/article/w483.html

Top