最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

实验一产生式系统

来源:动视网 责编:小OO 时间:2025-10-02 00:01:38
文档

实验一产生式系统

实验一产生式系统——动物识别系统一、实习目的和意义1、掌握人工智能的知识表示技术,能用产生式表示法表示知识;2、掌握基于规则推理的基本方法;3、掌握产生式系统的运行机制。二、实习内容参考教材规则库包含15条规则,开发一个专家系统可以识别老虎,金钱豹,斑马,长颈鹿,企鹅,鸵鸟等6种动物。三、实习要求1、本次实验语言MATLAB;2、系统能通过正向推理得到正确的动物识别结果。四、实习过程1.实验原理正向推理(事实驱动推理)1)从初始已知事实出发,在知识库KB中找出当前可适用的知识,构成可适用知识集
推荐度:
导读实验一产生式系统——动物识别系统一、实习目的和意义1、掌握人工智能的知识表示技术,能用产生式表示法表示知识;2、掌握基于规则推理的基本方法;3、掌握产生式系统的运行机制。二、实习内容参考教材规则库包含15条规则,开发一个专家系统可以识别老虎,金钱豹,斑马,长颈鹿,企鹅,鸵鸟等6种动物。三、实习要求1、本次实验语言MATLAB;2、系统能通过正向推理得到正确的动物识别结果。四、实习过程1.实验原理正向推理(事实驱动推理)1)从初始已知事实出发,在知识库KB中找出当前可适用的知识,构成可适用知识集
实验一  产生式系统——动物识别系统

一、实习目的和意义

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.算法

函数名函数说明
learnfunction learn(arr_category, arr_feature)主函数

checkRulefunction [arr_category,arr_feature,arr_rule,ifMore,mark]=

 checkRule(arr_category,arr_feature,arr_rule,ifMore,mark )

规则符合检测

showCategoryfunction  showCategory(  )

类别选项打印函数

showFeaturefunction showFeature()

特征选项打印函数

showResultfunction 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

                    

                    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

 

文档

实验一产生式系统

实验一产生式系统——动物识别系统一、实习目的和意义1、掌握人工智能的知识表示技术,能用产生式表示法表示知识;2、掌握基于规则推理的基本方法;3、掌握产生式系统的运行机制。二、实习内容参考教材规则库包含15条规则,开发一个专家系统可以识别老虎,金钱豹,斑马,长颈鹿,企鹅,鸵鸟等6种动物。三、实习要求1、本次实验语言MATLAB;2、系统能通过正向推理得到正确的动物识别结果。四、实习过程1.实验原理正向推理(事实驱动推理)1)从初始已知事实出发,在知识库KB中找出当前可适用的知识,构成可适用知识集
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top