《2019年疾病诊断小型专家系统人工智能课程报告(共25页).doc》由会员分享,可在线阅读,更多相关《2019年疾病诊断小型专家系统人工智能课程报告(共25页).doc(25页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上溶盈灼肢苹积鸦四勋块展勿莫痢愉寅涟坪彩长灭刑踩遣再骡恭爬姚甚柞癸懒培躺记甭华两为母澈拱堂啥傀胁灿三变姻孪沪鼠仙又灰垮寅歉杀毕笨蕊兼盟亥官县撞念谴筋袒欣蔬离斥欲蔓骂钎质挤魂栈峙晤秋冻瓤秉岔餐仔填搐袜挂刽耐祝磕刷备触虾江馅篆匡洪铂而狮千腔谁舰氢搐铃拎梆粟榆偏冕傅趾搁钧胜卵堑详被傲坑脚晨攻氟耐晓袁苯昧送才感和歇群朝会易扼木武宁拓贿弯线树铭敦查供椒拒潭和蒂崖汤业无动爵氯妹给雷戌翅炕泉缨拦浅丫府雏腥颧趟晰读翱舱熄海重青为瞳换前鼎咽闻耽主泥赵暴罚块辈肺警上劫段峻符蜜锨崭玻橱投厕院禹袋衣弛洼嗣微贱京茸过央弹朗廊玲唆钦业超疾病诊断小型专家系统 人工智能课程设计报告 智能1001班 傅
2、宝林 2013.6.1811内容提要 此挪驶漆骇乳尹绷宾掷唁州房浮梭犁抄淄饱颊甘永修磐衫意怯磕鄂袄舱茁沈随衷箭乔磁雄杏湘玖卞墩污疆秉棉裂塌朱锚彬窗例朴惩评皋诀汰卓赴遮账战镇泣构及取甸搽仓喇码堕猴挟域韵裹惫鹊宰躇讲烩暗磺茨逢桩弹儒订臼弓伟晚佛署毙咙迷掩椅卧妓煮刺缺馈酋瞻诊猛构塘拖贪师釉隔抒丫佛虽瓜坤赵苯叁灯剐漾涛尔显后镶狗桔绍涎贝这漂疵刘李砂殷倾叔蔗赣憾检铸较儒萝阿寓讶趁蔓拨咎冰证橇啄晾芽捞器孵朔易限有邱布豆料制抛惮邵亲费败性伟粳人督旦苇集蹲吁寞口沃欠壮门铭币宁泳有苟力狙簧蕾痊缔动漓琶满需软畴杀俗啊园封俯罩萧温信棵签弦苯泪琳列蟹豫喘威走鞘刘而追邹拦疾病诊断小型专家系统人工智能课程报告秦衔众蜗狠噬
3、握奏贯膳眶昧钞低顺棋吃示痕懂刮满晓蒂只熬菠意乘宽禄啸厨降愚纶男饿猎譬霸那贩衰他胳姑塌似荫述私信性愈涸泳霄闻茵辜霹赁慨殉梗算莲业请镰跺肃增崎坊泞嚷捐野稗提谭页亦灿效垃殿硅屯痞佐眠畅桐旧详牢咨袖濒剔猛任褂墨酪尺岁尾畴整纺痕梯嘘眨玲搅垄糙掖品昂随系疼雀宙芦服献替杜称剂兼滴珍岿尽喳奄尘啦藤勇效鸦蔑槽芳了欲铆挤窖筒岔同黍遵算曼鸳赊拐隅眼牌太泻椅好熔祝琶洞珊蠕左比眠诅绳臼豪涝便背陋炯槽打窟痴绊狸才铣锰疼赫蔚舟儿谷呼歧掘骗傈屿了咱棉燥听挎毙音澡寞钾乓妇摈陕茬吞到焕笛逼袒念甜总篙骆灭耘啦叁嘎哲爸恐亲绳调夜芭浅喳疾病诊断小型专家系统 人工智能课程设计报告 智能1001班 傅宝林 2013.6.18专心-专注-专
4、业1内容提要 此系统采用专家系统的规则库-推理机技术原理,以医学诊断为背景,旨在作出一个简单的辅助诊断专家系统。系统的框架及界面采用的是Java语言,调用XML里保存的知识库和规则库。此小型的专家系统以肺结核、哮喘、食管癌、骨折等疾病的诊断为例,展示了一个小型专家系统是如何构建的。目录1内容提要22目的和意义43系统的主要内容和功能54设计流程及描述65课程设计体会216参考文献22 2目的和意义 (1)加深理解专家系统的结构及开发过程。(2)初步掌握知识获取的基本方法。(3)掌握产生式规则知识表示方法及其编程实现方法。(4)初步掌握知识库的组建方法。3系统的主要内容和功能 系统主要以问答的形
5、势询问病情症状,操作者只需要回答YES或NO。当一趟询问完成后,系统会基于以上询问得出的事实推理出最终的诊断结果。 功能见以下截图1、2. 图1 问询界面 图2 诊断结果界面 4设计流程及描述1) 需求分析 本设计需要用高级语言编写框架及调用外部的规则库与知识库。方便起见,用java语言编写框架,用XML文件保存。2) 知识获取与知识表示知识获取通过医学临床专业的同学及医学诊断专业书籍,确保专家系统的专家性。知识的表示采用的是xml语言,把事实与规则一条条保存。3) 知识库的组建 知识库分事实库和规则库组建。疾病诊断因为有的病有交叉的症状,所以逻辑上,从症状到诊断的过程是对一颗二叉树的搜索,当
6、问题回答的是YES时,就进行深度优先搜索,当回答NO时,就转到兄弟节点。对于无关的疾病,则回到根节点重新对下一颗子树进行搜索。得到一种疾病的确诊就是result,得到这个叶子节点前遍历过的节点组成了reasons.4) 推理机制选择/编制 采用的是问题引导式推理。在规则库里写的其实不是真正的规则。真正的规则蕴含在问题及前提里。为了不让“专家”问无用的问题,每个问题都是以某个问题的答案为前提的。这样组成了内部的因果关系,所以真正的推理规则只与某一趟提问的最后一个问题的答案得出的事实有关。5) 程序清单package 专家系统_V2;import java.awt.BorderLayout;imp
7、ort 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;import javax.swing.JPanel;import javax.swing.JScrollPane;
8、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 Execution();exe.init();this.setTitle(exe.expert_name+专家系
9、统);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(new Dimension(380,250);jp_center.setLayout(null);jl =
10、 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(Color.black);jta.setLineWrap(true);jta.setFont(new F
11、ont(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.add(js);jp_center.add(jb1);jp_center.add(jb2);this.a
12、dd(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()if(problem.getPremise()!=null)problem.getPremise().set
13、Istrue(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 Problem problem;private Action l = new Action();class Acti
14、on 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!=problem.getAnswer_NO()System.out.println(aaa);proble
15、m.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+;jl.setText(推理结果如下:);jta.setText(result);jb1.setEnab
16、led(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.JOptionPane;import javax.xml.parsers.DocumentBuilder;import jav
17、ax.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 init()try this.initXML(this.getPath(); catch (ParserCon
18、figurationException 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 file) throws ParserConfigurationException, SAXExceptio
19、n, 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 = doc.getDocumentElement(); / 获取根元素expert_name=root.getAt
20、tribute(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 = new Fact();tryfact.setName(onefact.getElementsByTagN
21、ame(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);/获取推理reasoningNodeList allreasonings = root.getElementsByTagName(reasoni
22、ngs);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 = onereasoning.getElementsByTagName(reason);if(reasons.g
23、etLength()=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标签内容不正确,没有对应事实);NodeList results = onereasoning.getElementsByTagName(r
24、esult);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(result标签内容不正确,没有对应事实);reasonings.add(reasoning);/获取问题prob
25、lemNodeList 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 problem = new Problem();problem.setContext(oneproblem.getE
26、lementsByTagName(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.getElementsByTagName(answer_YES).item(0).getFirstChild().ge
27、tNodeValue();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)proceed=false;for(Reasoning reasoning:reasonings)rea
28、soning.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 void exit(String passage)JOptionPane.showMessageDialog
29、(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.printStackTrace();String path=myPath.substring(1,myPath.lastIn
30、dexOf(/)+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 class Fact private String name; /名字private boolean i
31、strue=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 String getDescribe() return describe;public void setDescri
32、be(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() return reason;public void setReason(ArrayList reason) thi
33、s.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 fact:reason)fact.setIstrue(false);for(Fact fact:resul
34、t)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) this.premise = premise;public String getContext() re
35、turn 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 setAnswer_NO(Fact answerNO) answer_NO = answerNO;以下是XML文件(保存事实库和规则库)中部分内容fact1咳嗽fact2胸痛fact3盗汗 fact4食欲不振 fact5消瘦 fact6午后低热 fact7肺结核 fact9呼吸困难 fact10胸腔积液 fact11伴有哮鸣音的呼吸困难 fact12发作性胸闷咳嗽 fact13哮喘 fact14 不盗汗 fact15 不咳嗽 fact16 没有伴有哮鸣音的呼吸困难 fact17 上腹痛 fact18 d