人工智能导论实验报告题目基于产生式的动物识别专家系统java.docx

上传人:b****6 文档编号:7563562 上传时间:2023-01-25 格式:DOCX 页数:12 大小:95.19KB
下载 相关 举报
人工智能导论实验报告题目基于产生式的动物识别专家系统java.docx_第1页
第1页 / 共12页
人工智能导论实验报告题目基于产生式的动物识别专家系统java.docx_第2页
第2页 / 共12页
人工智能导论实验报告题目基于产生式的动物识别专家系统java.docx_第3页
第3页 / 共12页
人工智能导论实验报告题目基于产生式的动物识别专家系统java.docx_第4页
第4页 / 共12页
人工智能导论实验报告题目基于产生式的动物识别专家系统java.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

人工智能导论实验报告题目基于产生式的动物识别专家系统java.docx

《人工智能导论实验报告题目基于产生式的动物识别专家系统java.docx》由会员分享,可在线阅读,更多相关《人工智能导论实验报告题目基于产生式的动物识别专家系统java.docx(12页珍藏版)》请在冰豆网上搜索。

人工智能导论实验报告题目基于产生式的动物识别专家系统java.docx

人工智能导论实验报告题目基于产生式的动物识别专家系统java

人工智能导论实验报告------题目-基于产生式的动物识别专家系统--java

人工智能导论实验报告

题目基于产生式的动物识别专家系统

学院信息科学与工程学院

专业计算机科学与技术

∙实验题目:

基于产生式的动物识别专家系统

∙实验目的及要求:

1.理解和掌握产生式知识表示方法及产生式系统的基本过程,能够利用编程技术建立一个基于产生式知识表示的简单的专家系统。

2.建立一个动物识别系统的规则库(至少包含15条规则),用以识别虎、豹、斑马、长颈鹿、企鹅、鸵鸟、信天翁等7种动物(至少7种动物,规则可增加)。

3.初始事实可以任意给定,输入初始事实后能够得到推理结果。

三、小组成员及分工

四、实验过程

1.实验环境:

Java;

2.算法原理:

基于产生式知识表示,采用前向推理的方式;

3.系统设计:

(1)人机接口

初始状态显示已知事实,用户可以勾选知识,进行推理,推理过程一步一步显示出来;

(2)知识获取机构

直接从写好的文本里获取;

(3)知识库及其管理系统

知识库存放产生式规则,推理时用到的一般知识和领域知识,比如动物的特征、动物的分类标准等,再具体地添加得到的具体动物;管理系统负责将上次推理裁剪出去的规则重新加回来;

(4)推理机

采用正向推理,推理机是动物识别的逻辑状态,它控制、协调系统的推理,并利用知识库中的规则对综合数据库中的数据进行逻辑操作。

匹配每一条规则的前件是否全部包含于用户输入的已知事实中,若匹配成功则看该结论是否作为最终结论,如果是则结束,否则继续推理;

(5)数据库及其管理系统

数据库用来存放用户回答的问题,存放初始状态、中间推理结果、最终结果;管理系统负责查找新产生的结论是否已经存在于数据库中;

(6)解释机构

通过输出匹配成功的产生式知识来表明推理的过程;

1.实现流程:

开始

选择动物特征MainGui.java

得出结论并shuchuInfer.java.getconclusion()

结束

5.关键代码:

推理:

publicclassInfer{

publicstaticArrayListESARuleList=newArrayList();

publicstaticArrayListdatabase=null;

publicstaticString[]fact={"有毛发","有奶","有羽毛","会飞","会下蛋","吃肉","有犬牙","有爪子","眼盯前方","有蹄",

"反刍","黄褐色","暗斑点","黑色条纹","长脖子","不会飞","长腿","黑白两色","会游泳","善飞"};

publicstaticvoidinit(){

ESARuleList.add(newRuleMatch("哺乳动物","有毛发"));

ESARuleList.add(newRuleMatch("哺乳动物","有奶"));

ESARuleList.add(newRuleMatch("食肉动物","吃肉"));

ESARuleList.add(newRuleMatch("食肉动物","有犬牙","有爪子",

"眼盯前方"));

ESARuleList.add(newRuleMatch("蹄类动物","哺乳动物","有蹄"));

ESARuleList.add(newRuleMatch("蹄类动物","哺乳动物","反刍"));

ESARuleList.add(newRuleMatch("金钱豹","哺乳动物","食肉动物",

"黄褐色","暗斑点"));

ESARuleList.add(newRuleMatch("老虎","哺乳动物","食肉动物",

"黄褐色","黑色条纹"));

ESARuleList.add(newRuleMatch("长颈鹿","蹄类动物","长脖子",

"长腿","暗斑点"));

ESARuleList.add(newRuleMatch("斑马","蹄类动物","黑色条纹"));

ESARuleList.add(newRuleMatch("鸵鸟","鸟类","不会飞","长脖子",

"长腿","黑白两色"));

ESARuleList.add(newRuleMatch("企鹅","鸟类","会游泳","不会飞",

"黑白两色"));

ESARuleList.add(newRuleMatch("信天翁","鸟类","善飞"));

ESARuleList.add(newRuleMatch("鸟类","会飞","会下蛋"));

ESARuleList.add(newRuleMatch("鸟类","有羽毛"));

}

publicstaticString[]conclusions={"金钱豹","老虎","长颈鹿","斑马","鸵鸟","企鹅","信天翁"};

publicstaticStringtuili(ArrayListdatabase){

intdatabaseSize;

databaseSize=database.size();

for(intz=0;z<2;z++)

for(inti=0;i

if(ESARuleList.get(i).isMatch(database)){

StringBuffersbuff=newStringBuffer();

ArrayListdatabase1=(ArrayList)database.clone();

addData(database,ESARuleList.get(i).conclusion);

for(intk=0;k

sbuff.append(ESARuleList.get(i).conditions[k]+'');

JOptionPane.showMessageDialog(null,sbuff+"\n=>"+ESARuleList.get(i).conclusion,"中间推断",JOptionPane.PLAIN_MESSAGE);

System.out.println(ESARuleList.get(i).conclusion);

if(("金钱豹".equals(ESARuleList.get(i).conclusion))||(ESARuleList.get(i).conclusion=="老虎")||(ESARuleList.get(i).conclusion=="长颈鹿")||(ESARuleList.get(i).conclusion=="斑马")||(ESARuleList.get(i).conclusion=="鸵鸟")||(ESARuleList.get(i).conclusion=="企鹅")||(ESARuleList.get(i).conclusion=="信天翁"))

break;

}

}

returngetConclusion(database.get(database.size()-1));

}

privatestaticvoidaddData(ArrayListlist,Stringdata){

for(inti=0;i

if(list.get(i).equals(data))

return;

}

list.add(data);

}

privatestaticStringgetConclusion(Stringcon){

for(inti=0;i

if(con.equals(conclusions[i])){

returnconclusions[i];

}

}

return"未得到最终结论,请继续补充事实";

}

}

规则库:

publicclassRuleMatch{

publicString[]conditions=null;

publicStringconclusion=null;

privateBooleanisExist;

publicRuleMatch(StringconclusionString,String...conditionStrings){

conclusion=conclusionString;

conditions=conditionStrings;

}

publicBooleanisMatch(ArrayListlist){

intsize=list.size();

for(StringmyCondition:

conditions){

isExist=false;

for(inti=0;i

if(list.get(i).equalsIgnoreCase(myCondition)){

isExist=true;

break;

}

}

if(!

isExist){

returnfalse;

}

}

returntrue;

}

}

五、实验结果与分析:

1实验结果(截图):

2分析:

(包括实验心得或体会,调试心得)

本次实验让我推理机和产生式系统有了更深的理解,特别是对正向推理和反向推理的理解,同时也明白了知识库对于系统的重要性——对知识库进行合适的管理,可以检测并排除那些冗余及矛盾的知识,保持知识的一致性,提高规则库的质量。

锻炼了我的编程能力,更提高了我的逻辑推理能力,该系统由规则库、综合数据库、控制系统三部分构成,但是该程序的缺点是只有正向推理的过程,没有反向推理的过程。

通过这次课程设计我对专业课的学习有了更加深刻的认识,让我知道了学无止境的道理。

我们每一个人永远不能满足于现有的成就,人生就像在爬山,一座峰的后面还有更高的山峰在等着你。

挫折是一份财富,经历是一份拥有。

这次课程设计必将成为我人生旅途上一段美好的回忆。

以后我要更加努力学好每门专业课,让自己拥有更多的知识,才能解决更多问题。

六、成绩评定:

成绩:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 交规考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1