1、太原科技大学计算机科学与技术学院 042006Z 班 学号 2004200502311一个动物识别专家系统在 JAVA 语言下的实现姚 勇(太原科技大学计算机科学与技术学院,200420050231)摘要 :首先扼要分析了专家系统的基本工作原理,然后用 JAVA 语言语言实现 了一个简单的动物识别专家系统 关键词 :专家系统;动物识别;JAVA 语言1 引言自 1968 年 E AFeigenbaum、CDjerassi 以及 JLeberberg 等人研制出第一个专家系统 DENDRAL 以来,专家系统迅速发展 ,目前已经成为人工智能中一个最活跃、最有成效的研究领域。本文首先从专家系统的组成
2、原理框图着手 ,扼要介绍了专家系统的基本工作原理 ,然后用 JAVA 语言语言实现了一个基于产生式表示方法的动物识别专家系统。 2 专家系统的基本工作原理2.1 专家系统的定义尽管专家系统已经得到广泛的应用,但对于究竟什么是专家系统这个问题 ,目前尚无统一且精确的定义。EA Feigenbaum 认为 :“专家系统是一种智能的计算机程序 ,运用知识和推理步骤来解决只有专家才能解决的问题 。 ”Nils JNilsson 认为 :“All programs that achieve expert-level competence in solving problems by bring to b
3、ear body of knowledge are called knowledge-based systems or expert systems ”比较一致的观点是 :专家系统是一个具有大量的专门知识 ,并能够利用这些知识以专家水平去解决该领域中的困难问题的计算机智能程序。2.2 专家系统的基本工作原理尽管专家系统有众多类型,名称各异,但基本原理框图一致,如图 1 所示。 专家系统的核心是知识库和推理机,其基本工作过程为:系统根据知识库中的知识和用户提供的事实进行推理,不断地由已知前提推出一些初步结论 ,并将这些初步结论作为中间结果存放在数据库中,然后将其作为新的已知事实进行下一步推理 ,
4、往复循环 ,逐步逼近求解 目标。在这个过程中,系统可以通过人机接口不断地与用户交流,向用户提问,或对用户提出的问题做出解释。 知识库是专家系统的知识存储器,用来存放求解问题 的领域知识 (包括事实性知识和太原科技大学计算机科学与技术学院 042006Z 班 学号 2004200502312启发性知识 )。常见的知识表示法有 :一阶谓词逻辑表示法 、产生式规则表示法 、语义网络表示法、框架表示法、脚本表示法、过程表示法、状态图表示法 、面向对象表示法以及一些不确定知识的表示方法等。 推理机是专家系统中用来实现推理的程序。其主要功能是模拟领域专家的思维过程 ,控制并执行对问题的求解。它能根据当前已
5、知的事实 ,利用知识库中的知识,按一定的推理方法和控制策略进行推理,直到得出相应的结论为止。它包括推理方法和控制策略两个部分。推理方法可以采用精确推理或非精确推理。控制策略分为推理策略和搜索策略两个部分,其中,搜索策略是关键 ,它可以分为非启发式的搜索和启发式搜索 ,现代主要采用启发式搜索 。 数据库又称为“黑板”或“综合数据库” ,它主要用来存储有关领域问题的初始事实、问题描述 、推理过程 中得到的中间结果以及最终结果等信息。 解释机构由一组程序组成,它能够跟踪并记录推理过程,当用户提出的询问需要给出解释时 ,它将根据问题的要求做出相应的处理,最后把解答用约定的形式通过人机接口输出给用户。目
6、前,大多数专家系统都采用人机对话的交互式解释方法。 知识获取机构主要实现机器学习。 人机接口是领域专家、知识工程师、一般用户问进行交互的界面 ,由一组程序及相应的硬件组成 ,用于完成输入输出工作 。3 动物识别专家系统在 JAVA 语言下的实现为了更好地阐明专家系统的基本工作原理 ,我们用 JAVA 语言语言实现一个简单的动物识别专家系统。该系统可以识别老虎、金钱豹 、斑马、长颈鹿、鸵鸟、企鹅、信天翁这 7 种动物。3.1 知识库在本系统当中,知识库中的知识用产生式规则来表示。本系统能够识别 7 种动物,知识库中共有以下 15 条规则 。R1 IF 该动物有奶 THEN 该动物是哺乳动物 R2
7、 IF 该动物有毛发 THEN 该动物是哺乳动物 R3 IF 该动物有羽毛 THEN 该动物是鸟 R4 IF 该动物会飞 AND 会下蛋 THEN 该动物是鸟 太原科技大学计算机科学与技术学院 042006Z 班 学号 2004200502313R5 IF 该动物是哺乳动物 AND 有爪 AND 有犬齿 AND 目视前方 THEN 该动物是 肉食动物 R6 IF 该动物是哺乳动物 AND 吃肉 THEN 该 动物是肉食动物 R7 IF 该动物是哺乳动物 AND 有蹄 THEN 该动物是有蹄类动物 R8 IF 该动物是有蹄动物 AND 是反刍食物 THEN 该动物是偶蹄动物 R9 IF 该动物是
8、食肉动物 AND 是黄褐色 AND 身上有黑色条纹 THEN 该动物是老虎 R10 IF 该动物是肉食动物 AND 是黄褐色 AND 身上有黑色斑点 THEN 该动物是金钱豹 Rll IF 该动物是有蹄类动物 AND 有长脖子 AND 有长腿 AND 是黄褐色 AND 身上有暗斑点 THEN 该动物是长颈鹿 R12 IF 该动物是有蹄类动物 AND 是白色 AND 身上有黑色条纹 THEN 该动物是斑马 R13 IF 该动物是鸟 AND 有不会飞 AND 有长腿 AND 长脖子 AND 是黑白色 THEN 该动物 是鸵鸟 R14 IF 该动物是鸟 AND 不会飞 AND 会游泳 AND 是黑白
9、色 THEN 该动物是企鹅 R15 IF 该动物是鸟 AND 善飞 AND 不怕风浪 THEN 该动物是信天翁在知识库中,并非简单地给每一种动物一条规则。首先 ,将动物粗略地分为哺乳动物、鸟 、肉食动物 3 大类 。然后逐步缩小分类范围,最后给出识别 7 种动物的规则 。图 2给出了识别长颈鹿和斑马的推理网络。 3.2 数据库假设数据库中存放以下事实:动物有暗斑,有长脖子,有长腿,有奶,有蹄。 求解目标:该动物是什么动物?3.3 推理机在本系统中,我们采用正向推理 ,并且是精确推理。推理过程如图 3 所示。太原科技大学计算机科学与技术学院 042006Z 班 学号 20042005023143
10、.4 Java 语言源程序package AI;import java.awt.*; /包含用于创建用户界面和绘制图形图像的所有类import java.awt.event.*; /提供处理由 AWT 组件所激发的各类事件的接口和类public class MainFrame extends Frame implements ActionListener static MainFrame frm=new MainFrame();static Checkbox ckb1=new Checkbox(“有毛发“);static Checkbox ckb2=new Checkbox(“有奶“);sta
11、tic Checkbox ckb3=new Checkbox(“有羽毛“);static Checkbox ckb4=new Checkbox(“会飞生蛋“);static Checkbox ckb5=new Checkbox(“吃肉“);static Checkbox ckb6=new Checkbox(“有犬齿,有爪眼睛 ,紧盯着前方“);static Checkbox ckb7=new Checkbox(“反刍食物“);static Checkbox ckb8=new Checkbox(“黄褐色有黑的斑点 “);static Checkbox ckb9=new Checkbox(“黄褐色
12、有黑色条纹 “);static Checkbox ckb10=new Checkbox(“有长腿长脖子,黄褐色暗斑点 “);static Checkbox ckb11=new Checkbox(“白色有黑条纹 “);static Checkbox ckb12=new Checkbox(“不会飞,长腿长脖子,黑白色 “);static Checkbox ckb13=new Checkbox(“不会飞,黑白色,会游泳 “);static Checkbox ckb14=new Checkbox(“善飞“);太原科技大学计算机科学与技术学院 042006Z 班 学号 2004200502315stat
13、ic Checkbox ckb15=new Checkbox(“有蹄“);static Label lab=new Label(“显示动物名“);static Button but1=new Button(“确定“);static Button but2=new Button(“重设“);public static void main(String args) / TODO Auto-generated method stubfrm.setSize(400,300);frm.setTitle(“动物识别系统“);frm.setLayout(new FlowLayout(FlowLayout.L
14、EFT);lab.setBackground(Color.green);lab.setAlignment(Label.CENTER);but1.addActionListener(frm);but2.addActionListener(frm);frm.add(lab);frm.add(ckb1);frm.add(ckb2);frm.add(ckb3);frm.add(ckb4);frm.add(ckb6);frm.add(ckb8);frm.add(ckb9);frm.add(ckb11);frm.add(ckb12);frm.add(ckb14);frm.add(ckb5);frm.add
15、(ckb7);frm.add(ckb10);frm.add(ckb13);frm.add(ckb15);frm.add(but1);frm.add(but2);frm.setVisible(true);frm.addWindowListener(new WindowAdapter()public void windowClosing(WindowEvent e)System.exit(0);); public void itemStateChanged( ItemEvent e) /这个是推理机if(ckb1.getState()=true|ckb2.getState()=true)else
16、if(ckb1.getState()=true|ckb2.getState()=true)else if(ckb1.getState()=true|ckb2.getState()=true)else if(ckb1.getState()=true|ckb2.getState()=true)else if(ckb3.getState()=true|ckb4.getState()=true)else if(ckb3.getState()=true|ckb4.getState()=true)else lab.setText(“sorry“);public void actionPerformed(A
17、ctionEvent e) /这部分是结果的显示Button but=(Button)e.getSource();if(but=but1)else if(but=but1)else if(but=but1)else if(but=but1)else if(but=but1)else if(but=but1)else if(but=but2)/*设置初始的状态为未选定 */ckb1.setState(false);ckb2.setState(false);ckb3.setState(false);ckb4.setState(false);ckb5.setState(false);ckb6.set
18、State(false);ckb7.setState(false);ckb8.setState(false);ckb9.setState(false);ckb10.setState(false);ckb11.setState(false);ckb12.setState(false);ckb13.setState(false);ckb14.setState(false);ckb15.setState(false);lab.setText(“显示动物名 “);else lab.setText(“sorry“);3.5 运行环境硬件环境:Inter Celeron(R) 2.80GHz 512MB软
19、件环境:Microsoft Windows XP Professional SP2JCreator Pro 4.00.028JavaTM 2 Platform Standard Edition Development Kit 5.0 (JDK5.0)太原科技大学计算机科学与技术学院 042006Z 班 学号 20042005023183.6 运行结果图 4首先从规则库中取出第一条规则 R1,检查其前提是否可与数据库中的已知事实相匹配。R1 的前提是“有毛发” ,但事实库中没有这一事实 ,故匹配失败。接着取规则 R2,它的前提可以与事实库中的已知事实“有奶”相匹配,R2 被执行 ,并将其结论“该
20、动物是哺乳动物”作为新的事实加入到数据库中。此时,数据库的内容变为:动物有暗斑 ,有长脖子 ,有长腿 ,有奶,有蹄 ,是哺乳动物。 再从规则库 中取 R2,R3,R4,R5 ,R6 进行匹配,结果都匹配失败。接着取 R7,其前提与事实库中的已知事实“是哺乳动物”和“有蹄”相匹配,因此 R7 被执行,并将其结论“该动物是有蹄类动物”作为新的事实加入到数据库中。此时,数据库中内容变为:动物有暗斑,有长脖子 ,有长腿 ,有奶 ,有蹄,是哺乳动物 ,是有蹄类动物。 最后 ,规则 R8,R9,R10 均匹配失败。取 Rll,其前提 “该动物是有蹄类 动物 AND 有长脖子 AND 有长腿 AND 身上有
21、暗斑点”与事实库中的已知事实相匹配 ,Rll 被执行,并推出“该动物是长颈鹿” 。由于“长颈鹿”已经是目标集合中的一个结论 ,即已推出最终结果 ,故问题求解过程结束。4 总结从专家系统的原理框图出发,简单阐述了专家系统的基本工作原理。并在此基础上,采用精确推理的方法,运用 JAVA 语言语言实现了一个简单的动物识别专家系统。参考文献 :1 廉师友人工智能技术导论(第二版) 西安 西安电子科技大学出版社 ,2002 2 雍俊海Java 程序设计北京 清华大学出版社 ,2004 3 叶核亚,陈立Java 程序设计实用教程北京 电子工业出版社,2003.5 4 武波,马玉祥专家系统M 北京:北京理工大学出版社, 2001