疾病诊断小型专家系统人工智能课程设计报告.doc

上传人:文库蛋蛋多 文档编号:2302484 上传时间:2023-02-10 格式:DOC 页数:22 大小:89KB
返回 下载 相关 举报
疾病诊断小型专家系统人工智能课程设计报告.doc_第1页
第1页 / 共22页
疾病诊断小型专家系统人工智能课程设计报告.doc_第2页
第2页 / 共22页
疾病诊断小型专家系统人工智能课程设计报告.doc_第3页
第3页 / 共22页
疾病诊断小型专家系统人工智能课程设计报告.doc_第4页
第4页 / 共22页
疾病诊断小型专家系统人工智能课程设计报告.doc_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《疾病诊断小型专家系统人工智能课程设计报告.doc》由会员分享,可在线阅读,更多相关《疾病诊断小型专家系统人工智能课程设计报告.doc(22页珍藏版)》请在三一办公上搜索。

1、疾病诊断小型专家系统 人工智能课程设计报告 智能1001班 傅宝林 0909101217 2013.6.181内容提要 此系统采用专家系统的规则库-推理机技术原理,以医学诊断为背景,旨在作出一个简单的辅助诊断专家系统。系统的框架及界面采用的是Java语言,调用XML里保存的知识库和规则库。此小型的专家系统以肺结核、哮喘、食管癌、骨折等疾病的诊断为例,展示了一个小型专家系统是如何构建的。目录1内容提要22目的和意义43系统的主要内容和功能54设计流程及描述65课程设计体会216参考文献22 2目的和意义 (1)加深理解专家系统的结构及开发过程。(2)初步掌握知识获取的基本方法。(3)掌握产生式规

2、则知识表示方法及其编程实现方法。(4)初步掌握知识库的组建方法。3系统的主要内容和功能 系统主要以问答的形势询问病情症状,操作者只需要回答YES或NO。当一趟询问完成后,系统会基于以上询问得出的事实推理出最终的诊断结果。 功能见以下截图1、2. 图1 问询界面 图2 诊断结果界面 4设计流程及描述1) 需求分析 本设计需要用高级语言编写框架及调用外部的规则库与知识库。方便起见,用java语言编写框架,用XML文件保存。2) 知识获取与知识表示知识获取通过医学临床专业的同学及医学诊断专业书籍,确保专家系统的专家性。知识的表示采用的是xml语言,把事实与规则一条条保存。3) 知识库的组建 知识库分

3、事实库和规则库组建。疾病诊断因为有的病有交叉的症状,所以逻辑上,从症状到诊断的过程是对一颗二叉树的搜索,当问题回答的是YES时,就进行深度优先搜索,当回答NO时,就转到兄弟节点。对于无关的疾病,则回到根节点重新对下一颗子树进行搜索。得到一种疾病的确诊就是result,得到这个叶子节点前遍历过的节点组成了reasons.4) 推理机制选择/编制 采用的是问题引导式推理。在规则库里写的其实不是真正的规则。真正的规则蕴含在问题及前提里。为了不让“专家”问无用的问题,每个问题都是以某个问题的答案为前提的。这样组成了内部的因果关系,所以真正的推理规则只与某一趟提问的最后一个问题的答案得出的事实有关。5)

4、 程序清单package 专家系统_V2;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Dimension;import java.awt.Font;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.ArrayList;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;impo

5、rt javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTextArea;import javax.swing.border.LineBorder;public class MainFrame extends JFrame/* * 主界面类 * param args */public static void main(String args) MainFrame main = new MainFrame();main.myShow();private void myShow() exe = new Exe

6、cution();exe.init();this.setTitle(exe.expert_name+专家系统);this.setSize(380, 250);this.setDefaultCloseOperation(3);this.setResizable(false);this.setLocationRelativeTo(null);this.setLayout(new BorderLayout();JPanel jp_center = new JPanel();jp_center.setBackground(Color.white);jp_center.setPreferredSize(

7、new Dimension(380,250);jp_center.setLayout(null);jl = new JLabel();jl.setText(请回答下列问题:);jl.setFont(new Font(Font.DIALOG,Font.BOLD,25);jl.setForeground(Color.blue);jl.setBounds(10, 10, 200, 30);jta=new JTextArea();JScrollPane js=new JScrollPane(jta);jta.setEditable(false);jta.setBorder(new LineBorder

8、(Color.black);jta.setLineWrap(true);jta.setFont(new Font(Font.DIALOG,Font.BOLD,20);js.setBounds(20, 50, 330, 100);jb1 = new JButton(YES);jb1.setBounds(100, 170, 60, 30);jb1.addActionListener(l);jb2 = new JButton(NO);jb2.setBounds(200, 170, 60, 30);jb2.addActionListener(l);jp_center.add(jl);jp_center

9、.add(js);jp_center.add(jb1);jp_center.add(jb2);this.add(jp_center,BorderLayout.CENTER);problem=this.initProblem();this.setVisible(true);private Problem initProblem()for(int i=0;iexe.problems.size();i+)Problem problem = exe.problems.get(i);if(problem.getPremise()=null|problem.getPremise().isIstrue()i

10、f(problem.getPremise()!=null)problem.getPremise().setIstrue(false);jta.setText(problem.getContext();exe.problems.remove(problem);return problem;jb1.setEnabled(false);jb2.setEnabled(false);return null;private Execution exe;private JButton jb1,jb2;private JTextArea jta ;private JLabel jl;private Probl

11、em problem;private Action l = new Action();class Action implements ActionListenerpublic void actionPerformed(ActionEvent e) if(YES.equals(e.getActionCommand()if(null!=problem.getAnswer_YES()problem.getAnswer_YES().setIstrue(true);else if(NO.equals(e.getActionCommand()System.out.println(aaa);if(null!

12、=problem.getAnswer_NO()System.out.println(aaa);problem.getAnswer_NO().setIstrue(true);exe.allReasoning();problem=initProblem();if(problem=null)ArrayList facts=exe.start();String result=;for(int i=0,n=1;ifacts.size();i+)String des = facts.get(i).getDescribe();if(!null.equals(des)result+=i+1+.+des+n;n

13、+;jl.setText(推理结果如下:);jta.setText(result);jb1.setEnabled(false);jb2.setEnabled(false);return;package 专家系统_V2;import java.io.File;import java.io.IOException;import java.io.UnsupportedEncodingException;import .URLDecoder;import java.util.ArrayList;import java.util.HashMap;import javax.swing.JOptionPan

14、e;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.NodeList;import org.xml.sax.SAXException;public class Execution public boolean in

15、it()try this.initXML(this.getPath(); catch (ParserConfigurationException e) e.printStackTrace(); catch (SAXException e) this.exit(e.getMessage(); catch (IOException e) e.printStackTrace(); catch (NullPointerException e)this.exit(找不到相应的xml文件,请检查xml文件名是否符合规范);return false;private void initXML(String f

16、ile) throws ParserConfigurationException, SAXException, IOExceptionDocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();DocumentBuilder builder = dbf.newDocumentBuilder();Document doc=null;trydoc = builder.parse(new File(file);catch(Exception e)this.exit(e.getMessage();Element root = do

17、c.getDocumentElement(); / 获取根元素expert_name=root.getAttribute(name); /取得名字/获取事实factNodeList allfacts = root.getElementsByTagName(facts);NodeList onefacts = (Element)allfacts.item(0).getElementsByTagName(fact);for(int i=0;ionefacts.getLength();i+)Element onefact = (Element)onefacts.item(i);Fact fact =

18、 new Fact();tryfact.setName(onefact.getElementsByTagName(name).item(0).getFirstChild().getNodeValue();fact.setDescribe(onefact.getElementsByTagName(describe).item(0).getFirstChild().getNodeValue();catch(NullPointerException e)this.exit(fact中缺少相应标签);facts.put(fact.getName(), fact);/获取推理reasoningNodeL

19、ist allreasonings = root.getElementsByTagName(reasonings);NodeList onereasonings = (Element)allreasonings.item(0).getElementsByTagName(reasoning);for(int i=0;ionereasonings.getLength();i+)Element onereasoning = (Element)onereasonings.item(i);Reasoning reasoning = new Reasoning();NodeList reasons = o

20、nereasoning.getElementsByTagName(reason);if(reasons.getLength()=0)this.exit(reasoning中不可以缺少reason标签);for(int j=0;jreasons.getLength();j+)String name=reasons.item(j).getFirstChild().getNodeValue();if(facts.get(name)!=null)reasoning.getReason().add(facts.get(name);elsethis.exit(reason标签内容不正确,没有对应事实);N

21、odeList results = onereasoning.getElementsByTagName(result);if(results.getLength()=0)this.exit(reasoning中不可以缺少result标签);for(int j=0;jresults.getLength();j+)String name=results.item(j).getFirstChild().getNodeValue();if(facts.get(name)!=null)reasoning.getResult().add(facts.get(name);elsethis.exit(resu

22、lt标签内容不正确,没有对应事实);reasonings.add(reasoning);/获取问题problemNodeList allproblems = root.getElementsByTagName(problems);NodeList oneproblems = (Element)allproblems.item(0).getElementsByTagName(problem);for(int i=0;ioneproblems.getLength();i+)Element oneproblem = (Element)oneproblems.item(i);Problem probl

23、em = new Problem();problem.setContext(oneproblem.getElementsByTagName(context).item(0).getFirstChild().getNodeValue();tryproblem.setPremise(facts.get(oneproblem.getElementsByTagName(premise).item(0).getFirstChild().getNodeValue();catch(Exception e)tryproblem.setAnswer_YES(facts.get(oneproblem.getEle

24、mentsByTagName(answer_YES).item(0).getFirstChild().getNodeValue();catch(Exception e)tryproblem.setAnswer_NO(facts.get(oneproblem.getElementsByTagName(answer_NO).item(0).getFirstChild().getNodeValue();catch(Exception e)problems.add(problem);public void allReasoning()boolean proceed=true;while(proceed

25、)proceed=false;for(Reasoning reasoning:reasonings)reasoning.startReasoning();if(reasoning.startReasoning()proceed=true;public ArrayList start()/this.allReasoning();ArrayList reallyFacts = new ArrayList();for(Fact fact:facts.values()if(fact.isIstrue()reallyFacts.add(fact);return reallyFacts;private v

26、oid exit(String passage)JOptionPane.showMessageDialog(null, passage);System.exit(0);/查找当前路径private String getPath()String myPath=null;try myPath=URLDecoder.decode(Execution.class.getProtectionDomain().getCodeSource().getLocation().getFile(), UTF-8); catch (UnsupportedEncodingException e) e.printStac

27、kTrace();String path=myPath.substring(1,myPath.lastIndexOf(/)+1)+XML/配置文件.xml;return path;public HashMap facts = new HashMap ();public ArrayList reasonings = new ArrayList();public ArrayList problems = new ArrayList();public String expert_name;package 专家系统_V2;/* * 存放事实的类 * author liguanyi * */public

28、 class Fact private String name; /名字private boolean istrue=false; /是否成立private String describe; /事实相应表述public String getName() return name;public void setName(String name) this.name = name;public boolean isIstrue() return istrue;public void setIstrue(boolean istrue) this.istrue = istrue;public Strin

29、g getDescribe() return describe;public void setDescribe(String describe) this.describe = describe;package 专家系统_V2;import java.util.ArrayList;/表示推理public class Reasoning private ArrayList reason = new ArrayList(); /前提事实private ArrayList result = new ArrayList(); /结果事实public ArrayList getReason() retu

30、rn reason;public void setReason(ArrayList reason) this.reason = reason;public ArrayList getResult() return result;public void setResult(ArrayList result) this.result = result;public boolean startReasoning()if(reason.size()=0)return false;for(Fact fact:reason)if(!fact.isIstrue()return false;for(Fact

31、fact:reason)fact.setIstrue(false);for(Fact fact:result)fact.setIstrue(true);return true;package 专家系统_V2;public class Problem private Fact premise;private String context;private Fact answer_YES; /结果private Fact answer_NO; /结果public Fact getPremise() return premise;public void setPremise(Fact premise)

32、 this.premise = premise;public String getContext() return context;public void setContext(String context) this.context = context;public Fact getAnswer_YES() return answer_YES;public void setAnswer_YES(Fact answerYES) answer_YES = answerYES;public Fact getAnswer_NO() return answer_NO;public void setAn

33、swer_NO(Fact answerNO) answer_NO = answerNO;以下是XML文件(保存事实库和规则库)中部分内容fact1咳嗽fact2胸痛fact3盗汗 fact4食欲不振 fact5消瘦 fact6午后低热 fact7肺结核 fact9呼吸困难 fact10胸腔积液 fact11伴有哮鸣音的呼吸困难 fact12发作性胸闷咳嗽 fact13哮喘 fact14 不盗汗 fact15 不咳嗽 fact16 没有伴有哮鸣音的呼吸困难 fact17 上腹痛 fact18 节律性、周期性疼痛 fact19 灼疼 fact20 钝痛 fact21 消化性溃疡 fact22 上腹不痛 fact23 胸骨后不适 fact24 灼烧感 fact6fact7

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

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号