1、人工智能导论实验报告题目基于产生式的动物识别专家系统java人工智能导论实验报告-题目-基于产生式的动物识别专家系统-java人工智能导论实验报告题目 基于产生式的动物识别专家系统 学院 信息科学与工程学院专业 计算机科学与技术实验题目:基于产生式的动物识别专家系统实验目的及要求:1.理解和掌握产生式知识表示方法及产生式系统的基本过程,能够利用编程技术建立一个基于产生式知识表示的简单的专家系统。2.建立一个动物识别系统的规则库(至少包含15条规则),用以识别虎、豹、斑马、长颈鹿、企鹅、鸵鸟、信天翁等7种动物 (至少7种动物,规则可增加)。3.初始事实可以任意给定,输入初始事实后能够得到推理结果
2、。三、小组成员及分工四、实验过程1.实验环境:Java;2.算法原理:基于产生式知识表示,采用前向推理的方式;3.系统设计:(1)人机接口 初始状态显示已知事实,用户可以勾选知识,进行推理,推理过程一步 一步显示出来;(2)知识获取机构 直接从写好的文本里获取;(3)知识库及其管理系统 知识库存放产生式规则,推理时用到的一般知识和领域知识,比如动物 的特征、动物的分类标准等,再具体地添加得到的具体动物;管理系统负责 将上次推理裁剪出去的规则重新加回来;(4)推理机 采用正向推理,推理机是动物识别的逻辑状态,它控制、协调系统的推 理,并利用知识库中的规则对综合数据库中的数据进行逻辑操作。 匹配每
3、一条规则的前件是否全部包含于用户输入的已知事实中,若匹配成功 则看该结论是否作为最终结论,如果是则结束,否则继续推理;(5)数据库及其管理系统 数据库用来存放用户回答的问题,存放初始状态、中间推理结果、最终 结果;管理系统负责查找新产生的结论是否已经存在于数据库中;(6)解释机构 通过输出匹配成功的产生式知识来表明推理的过程;1.实现流程: 开始选择动物特征 MainGui.java得出结论并shuchu Infer.java.getconclusion()结束5.关键代码:推理:public class Infer public static ArrayList ESARuleList =
4、new ArrayList(); public static ArrayList database = null; public static String fact =有毛发,有奶,有羽毛,会飞,会下蛋,吃肉, 有犬牙,有爪子,眼盯前方,有蹄, 反刍,黄褐色,暗斑点,黑色条纹,长脖子,不会飞,长腿,黑白两色,会游泳,善飞; public static void init() ESARuleList.add(new RuleMatch(哺乳动物, 有毛发); ESARuleList.add(new RuleMatch(哺乳动物, 有奶); ESARuleList.add(new RuleMat
5、ch(食肉动物, 吃肉); ESARuleList.add(new RuleMatch(食肉动物, 有犬牙, 有爪子, 眼盯前方); ESARuleList.add(new RuleMatch(蹄类动物, 哺乳动物, 有蹄); ESARuleList.add(new RuleMatch(蹄类动物, 哺乳动物, 反刍); ESARuleList.add(new RuleMatch(金钱豹, 哺乳动物, 食肉动物, 黄褐色, 暗斑点); ESARuleList.add(new RuleMatch(老虎, 哺乳动物, 食肉动物, 黄褐色, 黑色条纹); ESARuleList.add(new Rul
6、eMatch(长颈鹿, 蹄类动物, 长脖子, 长腿, 暗斑点); ESARuleList.add(new RuleMatch(斑马, 蹄类动物, 黑色条纹); ESARuleList.add(new RuleMatch(鸵鸟, 鸟类, 不会飞, 长脖子, 长腿, 黑白两色); ESARuleList.add(new RuleMatch(企鹅, 鸟类, 会游泳, 不会飞, 黑白两色); ESARuleList.add(new RuleMatch(信天翁, 鸟类, 善飞); ESARuleList.add(new RuleMatch(鸟类, 会飞, 会下蛋); ESARuleList.add(ne
7、w RuleMatch(鸟类, 有羽毛); public static String conclusions = 金钱豹,老虎,长颈鹿,斑马,鸵鸟,企鹅,信天翁; public static String tuili(ArrayList database) int databaseSize; databaseSize = database.size(); for(int z=0;z2;z+) for (int i = 0; i ESARuleList.size(); i+) if (ESARuleList.get(i).isMatch(database) StringBuffer sbuff
8、= new StringBuffer(); ArrayList database1=(ArrayList) database.clone(); addData(database, ESARuleList.get(i).conclusion); for(int k=0;k + ESARuleList.get(i).conclusion, 中间推断, JOptionPane.PLAIN_MESSAGE); System.out.println(ESARuleList.get(i).conclusion); if( (金钱豹.equals(ESARuleList.get(i).conclusion)
9、|(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; return getConclusion(database.get(database.size() - 1); private static void addD
10、ata(ArrayList list, String data) for (int i = 0; i list.size(); i+) if (list.get(i).equals(data) return; list.add(data); private static String getConclusion(String con) for (int i = 0; i conclusions.length; i+) if (con.equals(conclusionsi) return conclusionsi; return 未得到最终结论,请继续补充事实; 规则库:public clas
11、s RuleMatch public String conditions = null; public String conclusion = null; private Boolean isExist; public RuleMatch(String conclusionString, String. conditionStrings) conclusion = conclusionString; conditions = conditionStrings; public Boolean isMatch(ArrayList list) int size = list.size(); for
12、(String myCondition : conditions) isExist = false; for (int i = 0; i size; i+) if (list.get(i).equalsIgnoreCase(myCondition) isExist = true; break; if (!isExist) return false; return true; 五、实验结果与分析:1实验结果(截图):2 分析:(包括实验心得或体会,调试心得) 本次实验让我推理机和产生式系统有了更深的理解,特别是对正向推理和反向推理的理解,同时也明白了知识库对于系统的重要性对知识库进行合适的管理,可以检测并排除那些冗余及矛盾的知识,保持知识的一致性,提高规则库的质量。锻炼了我的编程能力,更提高了我的逻辑推理能力,该系统由规则库、综合数据库、控制系统三部分构成,但是该程序的缺点是只有正向推理的过程,没有反向推理的过程。通过这次课程设计我对专业课的学习有了更加深刻的认识,让我知道了学无止境的道理。我们每一个人永远不能满足于现有的成就,人生就像在爬山,一座峰的后面还有更高的山峰在等着你。挫折是一份财富,经历是一份拥有。这次课程设计必将成为我人生旅途上一段美好的回忆。以后我要更加努力学好每门专业课,让自己拥有更多的知识,才能解决更多问题。六、成绩评定:成绩:
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1