人工智能小型动物分类专家系统的设计与实现PPT
人工智能作业——动物识别系统
人工智能作业——动物识别系统动物识别专家系统-------胡沧粟—20131313058动物识别系统由多种规则来判别,首先原则是根据是哺乳动物还是鸟类来区别大类。
然后根据在哺乳动物类里建立规则:食肉动物,非食肉,黄褐色,有斑点,长脖子,黑白两色来区分老虎,金钱豹,长颈鹿和斑马。
鸟类里面建议规则:会飞,不会飞,长腿,黑白两色来区分信天翁,企鹅和鸵鸟。
将书本上的规则适当进行了简化,并利用界面的人性化来诱导人们更好的使用软件。
程序由c#语言编写。
本程序系统在考虑到整体结构相同的结构下,将规则进行了优化。
先将哺乳动物与非哺乳动物进行了区分,从而在选取完第一条规则后可以筛选掉很多不用的规则。
在哺乳动物里,规则如下:1.老虎=食肉+黄褐色2.金钱豹=食肉+有斑点3.长颈鹿=非食肉+长脖子4.斑马=非食肉+黑白两色鸟类动物里面,规则如下:1.信天翁=会飞2.企鹅=不会飞+黑白两色3.鸵鸟=不会飞+长腿程序实际操作图:1.程序界面通过选取哺乳动物和鸟类可以筛选掉很多不需要的信息。
2.当按以上的规则描述时可以通过下面的显示栏显示判定的动物。
3.当错误输入或者选取规则过多时则会显示错误提醒。
部分程序代码:using System;using System.Collections.Generic; using ponentModel; using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms; namespace人工智能作业;{public partial class form1 : Form {public form1(){InitializeComponent();panel1.Visible = true;panel2.Visible = false;bel3.Text = str1;radioButton1.Checked = true;}private void button1_Click(object sender, EventArgs e){//bel3.Text = str1;this.button1.Enabled = false;if ((checkBox01.Checked == true) && (checkBox03.Checked == true) && (checkBox02.Checked == false) && (checkBox04.Checked == false) && (checkBox05.Checked == false) && (checkBox06.Checked == false))bel3.Text = str1 + "老虎";if ((checkBox01.Checked == true) && (checkBox02.Checked == true) && (checkBox03.Checked == false) && (checkBox04.Checked == false) && (checkBox05.Checked == false) && (checkBox06.Checked == false)){bel3.Text = str1 + "金钱豹";}if ((checkBox04.Checked == true) && (checkBox05.Checked == true) && (checkBox02.Checked == false) && (checkBox01.Checked == false) && (checkBox03.Checked == false) && (checkBox06.Checked == false)){bel3.Text = str1 + "长颈鹿";if ((checkBox04.Checked == true) && (checkBox06.Checked == true) && (checkBox02.Checked == false) && (checkBox01.Checked == false) && (checkBox05.Checked == false) && (checkBox03.Checked == false))bel3.Text = str1 + "斑马";if ((checkBox07.Checked == true) && (checkBox08.Checked == false) && (checkBox09.Checked == false) && (checkBox10.Checked == false) ){bel3.Text = str1 + "信天翁";}if ((checkBox09.Checked == true) && (checkBox08.Checked == true) && (checkBox07.Checked == false) && (checkBox10.Checked == false)){bel3.Text = str1 + "鸵鸟";}if ((checkBox09.Checked == true) && (checkBox10.Checked == true) && (checkBox08.Checked == false) && (checkBox07.Checked == false)){bel3.Text = str1 + "企鹅";}if ((bel3.Text == str1)){MessageBox.Show("动物类型描述错误,请重新输入!");this.button1.Enabled = true;}}private void radioButton1_CheckedChanged(object sender, EventArgs e){if (radioButton1.Checked == true){panel1.Visible = true;panel2.Visible = false;}}private void radioButton2_CheckedChanged(object sender, EventArgs e){if (radioButton2.Checked == true){panel2.Visible = true;panel1.Visible = false;}private void button2_Click(object sender, EventArgs e) {bel3.Text = str1;this.button1.Enabled = true;checkBox01.Checked = false;checkBox02.Checked = false;checkBox03.Checked = false;checkBox04.Checked = false;checkBox05.Checked = false;checkBox06.Checked = false;checkBox07.Checked = false;checkBox08.Checked = false;checkBox09.Checked = false;checkBox10.Checked = false;}}}。
专家系统实例
专家系统实例
专家系统是一种基于知识推理的智能信息系统,用于解决特定领域的问题。
它们利用专家知识和推理规则,通过询问用户的问题来识别问题的本质,然后提供相应的解决方案。
以下是一些专家系统实例: 1. 动物识别专家系统:该实例是一个基于人工智能技术的专家系统,用于识别动物物种。
它利用了计算机视觉和自然语言处理技术,通过询问用户有关动物的特征和属性来识别动物。
2. 医学诊断专家系统:该实例是一个用于医学诊断的专家系统,它利用医学知识和推理规则,通过对用户提供的症状和疾病特征进行分析,从而作出准确的医学诊断。
3. 工业控制专家系统:该实例是一个用于工业控制的专家系统,它利用控制理论和推理技术,通过对用户提供的控制命令进行分析和优化,以实现更高效、更安全的工业控制。
4. 农业施肥专家系统:该实例是一个用于农业施肥的专家系统,它利用植物营养知识和推理规则,通过对用户提供的肥料信息和植物需求进行分析,从而提供最佳的施肥方案。
这些专家系统实例展示了人工智能技术在各个领域的应用,可以帮助用户解决各种复杂问题。
用VB实现的小型动物识别专家系统
中国石油大学(北京)实验报告实验课程:人工智能导论实验名称:小型专家系统的设计与实现班级:自动化09-1 学号:姓名:实验台号:成绩:实验日期:2012年01月03 日一、实验目的1、掌握专家系统的基本构成;2、掌握用人工智能程序设计语言编制智能程序的方法。
二、实验内容建造一个完整的专家系统。
本次设计需完成的内容:1、用户界面:可采用菜单方式或问答方式。
2、知识库(规则库):存放产生式规则,库中的规则可以增删。
3、数据库:用来存放用户回答的问题、已知事实、推理得到的中间事实。
4、推理机:如何运用知识库中的规则进行问题的推理控制,建议用正向推理。
5、知识库中的规则可以随意增减。
三、实验结果起始运行界面:查询:1.知道种类,点选鸟类或哺乳类,再点击查询鸟类界面:哺乳类界面:2.不知道种类:点选“不知道”,进入种类识别界面点击查询后进入该动物相应的种类的查询界面3.查询结果:若没有符合条件的内容,则询问是否添加新信息添加:选择种类点击添加进入添加界面鸟类添加界面:哺乳类添加界面:添加的动物可以查询删除:单击删除按钮,进入删除界面,输入需要删除的动物名称,点击确定,右侧的表中显示出需要删除的动物,选中它,再点击删除则删除完成,已经删除的内容不可再查询到。
退出:点击主界面的退出按钮即可四、程序主界面:Private Sub Command1_Click()If Option1.Value = True Then ’选择鸟类,出现鸟类查询界面Form1.Show动物库.HideEnd IfIf Option2.Value = True Then ’选择哺乳类,出现哺乳类查询界面Form2.Show动物库.HideEnd IfIf Option3.Value = True Then ’选择不知道,出现种类识别界面Form3.Show动物库.HideEnd IfIf Option1.Value = Option2.Value = Option3.V alue = False Then ’若没有选择,出现提示框intmsgin = MsgBox("请至少选择一项!", vbOKOnly, "提示")End IfEnd SubPrivate Sub Command2_Click() ’退出程序EndEnd SubPrivate Sub Command3_Click()If Option1.Value = True Then ’选择添加鸟类,进入鸟类添加界面Form5.Show动物库.HideEnd IfIf Option2.Value = True Then ’选择添加哺乳类,进入哺乳类添加界面Form6.Show动物库.HideEnd IfIf Option3.Value = True Then ’选择不知道,出现提示框intmsgin = MsgBox("请选择确切种类!", vbOKOnly, "提示")End IfIf Option1.Value = Option2.Value = Option3.V alue = False Then ’没有选择,出现提示框intmsgin = MsgBox("请至少选择一项!", vbOKOnly, "提示")End IfEnd SubPrivate Sub Command4_Click() ’选择删除,进入删除界面动物库.HideForm7.ShowEnd Sub鸟类识别界面:(哺乳类识别的程序与此相似)Private Sub Command1_Click()Dim str As StringAdodc1.RecordSource = "select 动物名称from 动物种类库where 颜色like'" & Combo1.Text & "' and 飞行能力like '" & Combo2.Text & "' and 其他特征like '" & Text1.Text & "'" ’查询符合输入内容的项mandType = adCmdTextAdodc1.RefreshDataGrid1.RefreshIf Adodc1.Recordset.EOF Then ’若没有符合条件的,显示添加信息询问框Form4.ShowUnload MeElsestr = Adodc1.Recordset.Fields("动物名称") ’显示符合条件的结果intmsgin = MsgBox(str, vbOKOnly, "查询结果")End IfEnd SubPrivate Sub Command2_Click() ’返回主界面动物库.ShowUnload MeEnd Sub种类识别:Private Sub Command1_Click()If Option1.Value = True ThenForm2.ShowForm3.HideEnd IfIf Option2.Value = True ThenForm2.ShowForm3.HideEnd IfIf Option3.Value = True ThenForm1.ShowForm3.HideEnd IfIf Option4.Value = True ThenForm1.ShowForm3.HideEnd IfEnd Sub鸟类添加:(哺乳类添加程序与此相似)Private Sub Command1_Click()Adodc1.Recordset.AddNewAdodc1.Recordset.Fields("动物名称") = Trim(Text1.Text)Adodc1.Recordset.Fields("动物种类") = "鸟类"Adodc1.Recordset.Fields("颜色") = Trim(Text2.Text)Adodc1.Recordset.Fields("飞行能力") = Trim(Text3.Text)Adodc1.Recordset.Fields("其他特征") = Trim(Text4.Text)Adodc1.Recordset.UpdateAdodc1.RefreshUnload Me动物库.ShowMsgBox "添加成功", 0 + 64, "提示"End Sub五、实验结论1.对人工智能的产生式系统有了进一步的认识,特别是对正向推理有更深的了解。
人工智能 动物专家系统
规则9: 如果:动物是哺乳动物,且是食肉动物,且是黄褐色的,且有暗斑点 则 :该动物是豹
规则10: 如果:如果:动物是黄褐色的,且是哺乳动物,且是食肉,且有黑条纹 则 :该动物是虎
规则11: 如果:动物有暗斑点,且有长腿,且有长脖子,且是有蹄类 则 :该动物是长颈鹿
规则12: 如果:动物有黑条纹,且是有蹄类动物 则 :该动物是斑马
规则13: 如果:动物有长腿,且有长脖子,且是黑色的,且是鸟,且不会飞 则 :该动物是鸵鸟
规则14: 如果:动物是鸟,且不会飞,且会游泳,且是黑色的 则 :该动物是企鹅
规则15: 如果:动物是鸟,且善飞 则 :该动物是信天翁
该系统使用来识别7种动物。首先将动物粗略分成哺 乳动物,鸟,食肉动物3大类。然后逐步缩小分类范围,最 后识别出7中动物。
实验原理: 动物识别专家系统是流行的专家系统实验模型,它用产生式规则来表示 知识,共15条规则、可以识别七种动物,这些规则既少又简单,可以改 造他们,也可以加进新的规则,还可以用来识别其他东西的新规则来取 代这些规则。动物识别15条规则的中 规则1: 如果:动物有毛发 则 :该动物是哺乳动物 规则2:
如果:动物有奶 则 :该单位是哺乳动物 规则3: 如果:该动物有羽毛 则 :该动物是鸟 规则4: 如果:动物会飞,且会下蛋 则 :该动物是鸟 规则5: 如果:动物吃肉 则 :该动物是肉食动物 规则6: 如果:动物有犬齿,且有爪,且眼盯前方 则 :该动物是食肉动物
规则7: 如果:动物是哺乳动物,且有蹄 则 :该动物是有蹄动物
int e; printf("************************************************ *******************\n"); printf("1、该动物有黑白条纹\n2、该动物有暗斑点,且有长腿, 且有长脖子。\n3、无上述特点。\n"); printf("************************************************ *******************\n"); printf("请选择该动物的特点:");scanf_s("%d",&e); switch(e)
《人工智能》课程设计报告--动物识别系统
计算机科学与技术学院《人工智能》课程设计报告设计题目:动物识别系统设计人员:学号:学号:学号:学号:学号:学号:指导教师:2015年7月目录目录 (1)摘要 (3)Abstract (4)一、专家系统基本知识 (5)1.1专家系统实际应用 (5)1.2专家系统的开发 (5)二、设计基本思路 (5)2.1知识库 (5)2.2.1知识库作用 (5)2.1.2 知识库建立 (6)2.1.3 知识库获取 (7)2.2 数据库 (7)2.2.1数据库作用 (7)2.2.2数据库建立 (7)三、推理机构 (8)3.1推理机介绍 (8)3.1.1 推理机作用原理 (8)3.1.2推理网络 (8)3.2 正向推理 (9)3.2.1 正向推理基本思想 (9)3.2.2 正向推理示意图 (10)3.2.3 正向推理机所要具有功能 (10)3.3反向推理 (11)3.3.1反向推理基本思想 (11)3.3.2 反向推理示意图 (11)3.3.3反向推理机所要具有功能 (11)四、实例系统实现 (12)4.1系统介绍 (12)4.2基本思路 (12)4.3程序主要代码 (12)4.4系统执行结果 (13)五、结论 (13)参考文献: (14)附录一 (15)附录二 (24)摘要动物识别专家系统是将人的思维过程转化为计算机语言的逻辑过程,其关键在于知识和信息的表示,智能推理或求解的基础——知识库的创建和管理,以及基于某种知识和信息表示的智能推理或求解过程。
使动物识别具有一定的智能性、良好的交互性和可视化效果。
本论文也主要以识别七种动物的设计思路和程序为例所写的。
动物识别专家系统是人工智能中一个比较基础的规则演绎系统,是人工智能领域里的一个大模块的专家系统的一个特定例子。
是集知识表与推理为一体的,以规则为基础对用户提供的事实进行向前、逆向或双向的推理得出结论的一种产生式系统。
如果通过良好的分析、精确地设计和细致的规划会创设出高度灵活和快速有效的识别系统,再加上良好的界面供用户添加新的事实和规则,反馈详细的错误或信息的话,那就是一个相当完整的识别系统了。
人工智能 动物专家系统PPT
3:printf("该动物是信天翁 该动物是信天翁\ case 3:printf("该动物是信天翁\n");break; case 4:printf("我们将会尽快升级系统,谢谢使用。\n");break; 4:printf("我们将会尽快升级系统,谢谢使用。 我们将会尽快升级系统 default:printf("错误的选择 错误的选择! default:printf("错误的选择!");break; } } void Carnivore()//食肉动物识别 Carnivore()//食肉动物识别 { int d; printf("*********************************************************** ********\ ********\n"); printf("1、该动物黄褐色且有暗斑点\n2、该动物黄褐色且有黑条纹\n3、无 printf("1、该动物黄褐色且有暗斑点\n2、该动物黄褐色且有黑条纹\n3、 上述特点\ 上述特点\n"); printf("*********************************************************** ********\ ********\n"); printf("请选择该动物的特点 请选择该动物的特点: printf("请选择该动物的特点:"); scanf_s("%d",&d); switch(d)
计科0901 计科0901 0304090133 0304090133 李承腾
动物识别系统的实质是将人的思维过程转 化为计算机语言的逻辑过程,其关键在于知识和信 息的表示,智能推理或求解的基础—知识库的创建 和管理,以及基于某种知识和信息表示的智能推理 或求解过程。 该系统的知识表示采用产生式表示法。产 生式系统由条件和规则数据库、控制系统、界面三 个部分构成。数据库中规则表、条件表分别对应数 据库系统中的动物库表,动物特征询问序列表。动 物库表放入推理规则,包括动物的各种属性和所应 推出的动物名称。动物特征询问序列表放入要选择 的各种动物的属性。
动物识别专家系统17页PPT
谢谢!
51、 天 下 之 事 常成 于困约 ,而败 于奢靡 。——陆 游 52、 生 命 不 等 于是呼 吸,生 命是活 动。——卢 梭
53、 伟 大 的 事 业,需 要决心 ,能力 ,组织 和责任 感。 ——易 卜 生 54、 唯 书 籍 不 朽。——乔 特
55、 为 中 华 之 崛起而 读书。 ห้องสมุดไป่ตู้—周 恩来
动物识别专家系统
11、获得的成功越大,就越令人高兴 。野心 是使人 勤奋的 原因, 节制使 人枯萎 。 12、不问收获,只问耕耘。如同种树 ,先有 根茎, 再有枝 叶,尔 后花实 ,好好 劳动, 不要想 太多, 那样只 会使人 胆孝懒 惰,因 为不实 践,甚 至不接 触社会 ,难道 你是野 人。(名 言网) 13、不怕,不悔(虽然只有四个字,但 常看常 新。 14、我在心里默默地为每一个人祝福 。我爱 自己, 我用清 洁与节 制来珍 惜我的 身体, 我用智 慧和知 识充实 我的头 脑。 15、这世上的一切都借希望而完成。 农夫不 会播下 一粒玉 米,如 果他不 曾希望 它长成 种籽; 单身汉 不会娶 妻,如 果他不 曾希望 有小孩 ;商人 或手艺 人不会 工作, 如果他 不曾希 望因此 而有收 益。-- 马钉路 德。
动物识别专家系统设计文档
动物识别专家系统设计文档一、设计目的1.理解并掌握基于规则系统的表示与推理2.学会编写小型的生产式系统,理解正向推理和反向推理的过程以及两者的区别二、系统描述这是一个用来识别老虎(tiger)、金钱豹(cheetah)、斑马(zebra)、长颈鹿(giraffe)、企鹅(penguin)、鸵鸟(ostrich)和信天翁(albatross)等七种动物的产生式ES。
共15条规则、可以识别七种动物,这些规则既少又简单,可以改造他们,也可以加进新的规则,还可以用来识别其他东西的新规则来取代这些规则。
三、运行环境PC机、Visual prolog四、系统分析由上述规则可看出,虽然该系统是用来识别七种动物的,但在规则库中并没有简单地只设计七条规则,而是设计了15条,其基本方法是,首先根据一些比较简单的条件,如“有毛发”、“有羽毛”、“会飞”等条件将动物粗略分成哺乳动物、鸟、食肉动物三大类,然后随着条件的增加,逐步缩小分类范围,最后给出分别识别七种动物的规则。
用此规则可形成各种动物的推理网络。
图1为有关“长颈鹿”的规则形成的正向推理网络,同理可画出其它动物的推理网络。
图1 有关“长颈鹿”的规则形成的(正向)推理网络在推理网络中,最高节点如“长颈鹿”为结论(正向推理)或假设(反向推理)节点。
在正向推理情况下,该节点没有输出线,当推理到本节点时,推理就结束;中间节点既有输入线,又有输出线,如节点“哺乳动物”,当推理到中间节点时,系统会自动将此中间结果存入综合数据库;终端节点也称为事实节点,如节点“长脖子”、“有毛发”等,这些节点没有输入线,该事实是否为真可通过人机接口询问用户,然后加入综合数据库中。
图2 动物识别系统的推理链结构五、系统结构图3 专家系统原理图善方R9 R10 R11 R12 R13 R14 R15本系统采用产生式结构,它包含三个主要部分:知识库、综合数据库和推理机。
⑴知识库。
在本系统当中,知识库中的知识用产生式规则来表示。
小型专家系统
实验八小型专家系统设计与实现一、实验原理专家系统是人工智能最重要的应用之一,它的目的是让电脑在某种程度上帮助或者替代某个领域的专家解决问题。
例如医疗诊断系统、投资风险分析系统、家居设计系统等等。
专家系统是一个含有大量的某个领域专家水平的知识与经验智能计算机程序系统,能够利用人类专家的知识和解决问题的方法来处理该领域问题。
简而言之,专家系统是一种模拟人类专家解决领域问题的计算机程序系统。
二、实验目的1. 加深理解专家系统的结构原理与实际应用。
2. 初步掌握知识获取的基本方法。
3. 掌握产生式规则知识表示方法及其编程实现方法。
4. 初步掌握知识库的组建方法。
5. 加深理解推理机的算法原理并初步掌握其编程实现方法。
三、实验内容运用所学知识,设计并编程实现一个小型专家系统(如分类、诊断、预测等类型)。
四、实验设计小型动物分类专家系统1. 动物分类规则集(1)若某动物有奶milk,则它是哺乳动物mammal。
(2)若某动物有毛发hair,则它是哺乳动物。
(3)若某动物有羽毛feather,则它是鸟bird。
(4)若某动物会飞fly且生to produce蛋egg,则它是鸟。
(5)若某动物是哺乳动物且有爪claw且有犬齿cuspid目盯stare前方frontage,则它是食肉动物carnivore。
(6)若某动物是哺乳动物且吃肉meat,则它是食肉动物。
(7)若某动物是哺乳动物且有蹄hoof,则它是有蹄动物ungulate_animal。
(8)若某动物是有蹄动物且反刍ruminate食物,则它是偶蹄动物artiodacty。
(9)若某动物是食肉动物carnivore且黄褐色filemot且有黑色black 条纹list,则它是老虎tiger。
(10)若某动物是食肉动物且黄褐色且有黑色black斑点fleck,则它是金钱豹leopard。
(11)若某动物是有蹄动物且长腿leg且长脖子neck且黄褐色filemot 且有暗dark斑点fleck,则它是长颈鹿giraffe。
动物分类ai 流程说明
动物分类ai 流程说明动物分类 AI 流程说明在当今科技飞速发展的时代,AI(人工智能)在各个领域都展现出了强大的能力,动物分类也不例外。
动物分类是一项复杂而重要的任务,通过 AI 技术可以更加高效和准确地完成。
下面就让我们来详细了解一下动物分类 AI 的流程。
首先,数据采集是整个流程的基础。
为了让 AI 能够学习和识别不同的动物,我们需要收集大量的动物相关数据。
这些数据的来源非常广泛,包括但不限于动物学书籍、学术论文、在线数据库、野生动物观察记录以及动物园和保护区的资料等。
数据的类型也是多种多样的,有动物的图片、视频、形态特征描述、生活习性、地理分布等信息。
在采集到数据后,需要对数据进行预处理。
这一步骤主要是为了将原始数据整理成适合 AI 学习的格式。
比如,对于图片数据,可能需要进行裁剪、调整大小、增强对比度等操作,以便 AI 能够更好地提取特征。
对于文本数据,则需要进行清理、分词、标记化等处理,去除噪声和无关信息。
接下来是特征提取。
特征提取是整个流程中的关键环节之一,它直接影响着 AI 分类的准确性。
在动物分类中,可以提取的特征包括动物的外形特征(如体型、毛色、斑纹、肢体比例等)、行为特征(如行走方式、飞行姿态、捕食动作等)、声音特征(如叫声的频率、节奏、音色等)以及生态特征(如栖息地、食性、繁殖方式等)。
这些特征可以通过图像处理技术、音频分析技术以及自然语言处理技术等手段来获取。
有了特征数据后,就可以开始构建模型进行训练了。
在动物分类中,常用的模型包括卷积神经网络(CNN)用于图像分类、循环神经网络(RNN)或长短时记忆网络(LSTM)用于处理序列数据(如动物的行为序列)、决策树、随机森林等用于分类任务。
在训练模型时,将预处理和提取特征后的数据输入到模型中,通过不断调整模型的参数,使得模型能够准确地预测动物的类别。
训练完成后,需要对模型进行评估。
评估指标通常包括准确率、召回率、F1 值等。
人工智能-动物识别专家系统算法Python+Pyqt实现
⼈⼯智能-动物识别专家系统算法Python+Pyqt实现⼀、基础知识库有⽑发哺乳动物 -有奶哺乳动物 -有⽻⽑鸟 -会飞会下蛋鸟 -吃⾁⾷⾁动物 -有⽝齿有⽖眼盯前⽅⾷⾁动物 -哺乳动物有蹄有蹄类动物 -哺乳动物反刍动物有蹄类动物 -哺乳动物⾷⾁动物黄褐⾊⾝上有暗斑点⾦钱豹 *哺乳动物⾷⾁动物黄褐⾊⾝上有⿊⾊条纹虎 *有蹄类动物长脖⼦有长腿⾝上有暗斑点长颈⿅ *有蹄类动物⾝上有⿊⾊条纹斑马 *鸟长脖⼦有长腿不会飞有⿊⽩⼆⾊鸵鸟 *鸟会游泳不会飞有⿊⽩⼆⾊企鹅 *鸟善飞信天翁 *最后⼀个字符为 - 表⽰结论为中间结果为 * 表⽰为⼀种动物⼆、QT界⾯源码# -*- coding: utf-8 -*-# Form implementation generated from reading ui file '动物识别专家系统.ui'## Created by: PyQt5 UI code generator 5.9.2## WARNING! All changes made in this file will be lost!from PyQt5 import QtCore, QtGui, QtWidgetsfrom PyQt5.QtGui import QFontclass Ui_Animals(object):def setupUi(self, Animals):Animals.setObjectName("Animals")Animals.resize(1127, 710)Animals.setAutoFillBackground(True)self.TL = QtWidgets.QTextEdit(Animals)self.TL.setGeometry(QtCore.QRect(670, 200, 251, 211))self.TL.setObjectName("TL")self.input = QtWidgets.QTextEdit(Animals)self.input.setGeometry(QtCore.QRect(240, 100, 151, 321))self.input.setAutoFillBackground(False)self.input.setObjectName("input")self.result = QtWidgets.QTextEdit(Animals)self.result.setGeometry(QtCore.QRect(670, 100, 251, 51))self.result.setObjectName("result")self.result.setReadOnly(True)self.input_lable = QtWidgets.QLabel(Animals)self.input_lable.setGeometry(QtCore.QRect(100, 80, 141, 41))self.input_lable.setObjectName("input_lable")self.input_lable.setFont(QFont("Roman times", 10, QFont.Bold))self.TL_label = QtWidgets.QLabel(Animals)self.TL_label.setGeometry(QtCore.QRect(750, 150, 101, 61))self.TL_label.setObjectName("TL_label")self.TL_label.setFont(QFont("Roman times", 10, QFont.Bold))self.result_label = QtWidgets.QLabel(Animals)self.result_label.setGeometry(QtCore.QRect(750, 70, 111, 31))self.result_label.setObjectName("result_label")self.result_label.setFont(QFont("Roman times", 10, QFont.Bold))self.scrollArea = QtWidgets.QScrollArea(Animals)self.scrollArea.setGeometry(QtCore.QRect(90, 120, 141, 20))self.scrollArea.setWidgetResizable(True)self.scrollArea.setObjectName("scrollArea")self.scrollAreaWidgetContents = QtWidgets.QWidget()self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 139, 18))self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")boBox = QtWidgets.QComboBox(self.scrollAreaWidgetContents)boBox.setGeometry(QtCore.QRect(0, 0, 141, 21))boBox.setObjectName("comboBox")self.scrollArea.setWidget(self.scrollAreaWidgetContents)self.pushButton = QtWidgets.QPushButton(Animals)self.pushButton.setGeometry(QtCore.QRect(500, 240, 93, 28))self.pushButton.setObjectName("pushButton")self.pushButton.setFont(QFont("Roman times", 10, QFont.Bold))self.checkBox = QtWidgets.QCheckBox(Animals)self.checkBox.setGeometry(QtCore.QRect(500, 190, 91, 19))self.checkBox.setObjectName("checkBox")self.checkBox.setFont(QFont("Roman times", 10, QFont.Bold))self.pushButton_2 = QtWidgets.QPushButton(Animals)self.pushButton_2.setGeometry(QtCore.QRect(10, 120, 61, 21))self.pushButton_2.setObjectName("pushButton_2")self.pushButton_2.setFont(QFont("Roman times", 10, QFont.Bold)) self.pushButton_3 = QtWidgets.QPushButton(Animals)self.pushButton_3.setGeometry(QtCore.QRect(500, 300, 91, 31)) self.pushButton_3.setObjectName("pushButton_3")self.pushButton_3.setFont(QFont("Roman times", 10, QFont.Bold)) self.retranslateUi(Animals)self.pushButton.clicked.connect(Animals.test)boBox.activated['int'].connect(Animals.selectChange)self.checkBox.stateChanged['int'].connect(Animals.checkChange) self.pushButton_2.clicked.connect(Animals.selectInit)self.pushButton_3.clicked.connect(Animals.rules)QtCore.QMetaObject.connectSlotsByName(Animals)def retranslateUi(self, Animals):_translate = QtCore.QCoreApplication.translateAnimals.setWindowTitle(_translate("Animals", "Form"))self.input_lable.setText(_translate("Animals", "请输⼊已知事实")) self.TL_label.setText(_translate("Animals", "推理过程"))self.result_label.setText(_translate("Animals", "专家分析结果"))self.pushButton.setText(_translate("Animals", "推理"))self.checkBox.setText(_translate("Animals", "反向推理"))self.pushButton_2.setText(_translate("Animals", "初始化"))self.pushButton_3.setText(_translate("Animals", "修改规则库")) View Code三、后端处理 Python源码# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'animal.py'## Created by: PyQt5 UI code generator 5.9.2## WARNING! All changes made in this file will be lost!from动物识别专家系统import Ui_Animalsfrom PyQt5 import QtWidgetsfrom PyQt5 import QtGuiimport sysimport osimport tkinterfrom tkinter import messageboxdef IsEvidence(x):for i in mywindow.fact:if x == i[-2]:return Falsereturn Truedef getData(x):data = []for i in mywindow.fact:tr = []if x == i[-2]:for j in range(0, len(i) - 1):tr.append(i[j])data.append(tr)return datadef backs(data):c = 0flag = Falsefor i in data:d = "if "for s in range(0, len(i)):if s == len(i)-2:d = d + str(i[s]) + " then "else:d = d + str(i[s]) + ""window.TL.append(d)for j in range(0, len(i) - 1):if (IsEvidence(i[j])):root = ()root.withdraw()a= messagebox.askquestion("提⽰", i[j]+"吗")#print(i[j] + "吗?")#r = input()print(a)if a == "yes":c = c + 1else:temp = getData(i[j])if (backs(temp)):c = c + 1if c >= i.__len__() - 1:flag = Trueprint(i[-1])print("验证成功")breakelse:flag = Falseprint(i[-1])print("验证失败")if (flag):return Trueelse:return Falseclass mywindow(QtWidgets.QWidget,Ui_Animals):fact = []conditions = set("")res = set("")def__init__(self):super(mywindow, self).__init__()f = open("rules.txt", "r")for line in f:ls = line.strip('\n').split("")mywindow.fact.append(ls)f.close()for i in mywindow.fact:for j in range(0,len(i)-2):mywindow.conditions.add(i[j])mywindow.res.add(i[-2])self.setupUi(self)def resizeEvent(self, event):palette = QtGui.QPalette()pix = QtGui.QPixmap('images/3.jpg')pix = pix.scaled(self.width(), self.height())palette.setBrush(QtGui.QPalette.Background, QtGui.QBrush(pix)) self.setPalette(palette)def test(self):if self.checkBox.isChecked():#逆向推理i = boBox.currentIndex()s = boBox.itemText(i)print(s)data=getData(s)print(data)if (backs(data)):root = ()root.withdraw()a = messagebox.showinfo("提⽰", "该动物是" + data[0][-1]) self.result.setText("专家分析该动物是"+data[0][-1])else:root = ()root.withdraw()self.result.setText("专家分析该动物不是" + data[0][-1])a = messagebox.showinfo("提⽰", "该动物不是" + data[0][-1])else: #正向推理s= self.input.toPlainText()tl =""description = s.split("\n")print("des")print(description)line = 0for i in mywindow.fact:same = 0for j in range(0, len(i)):if j >= len(i) - 2:breakfor k in range(0, len(description)):if i[j] == description[k]:same = same + 1breakif k == len(description):breakif same == i.__len__() - 2:print("same=i")line = 1if i[-1] == "*": # 是结论d = "if "for s in range(0,len(i)-1) :if s == len(i)-3:d=d+str(i[s])+" then "else:d=d+str(i[s])+""tl = tl + d + "\n"self.TL.setText(tl)self.result.setText("专家分析该动物是"+i[-2])print(i[-2])else:line = 1d = "if "for s in range(0, len(i) - 1):if s == len(i) - 3:d = d + str(i[s]) + " then "else:d = d + str(i[s]) + ""tl = tl + d +"\n"self.TL.setText(tl)self.result.setText("专家也不知道具体是什么动物,⼤概率推测是"+i[-2]) # print(i[-1])description.append(i[-2])if line ==0:self.result.setText("专家也不知道具体是什么动物")def selectInit(self):mywindow.fact.clear()mywindow.conditions.clear()mywindow.res.clear()f = open("rules.txt", "r")for line in f:ls = line.strip('\n').split("")mywindow.fact.append(ls)f.close()for i in mywindow.fact:for j in range(0, len(i) - 2):mywindow.conditions.add(i[j])mywindow.res.add(i[-2])boBox.clear()self.input.clear()self.result.clear()self.TL.clear()if(self.checkBox.isChecked()):for x in mywindow.res:boBox.addItem(str(x))else:for x in mywindow.conditions:boBox.addItem(str(x))def selectChange(self):if self.checkBox.isChecked():self.input.clear()i = boBox.currentIndex()s = boBox.itemText(i)self.input.append(s)else:i = boBox.currentIndex()s = boBox.itemText(i)self.input.append(s)def checkChange(self):boBox.clear()if self.checkBox.isChecked():for x in mywindow.res:boBox.addItem(str(x))else:for x in mywindow.conditions:boBox.addItem(str(x))def rules(self):os.startfile('rules.txt')app = QtWidgets.QApplication(sys.argv)window = mywindow()window.show()sys.exit(app.exec_())View Code。
人工智能课程设计汇报ppt课件
//哺乳类,反刍->蹄类
23,12,13->25
//食肉类,黄褐色,有斑点->金钱豹
23,12,14->26
//食肉类,黄褐色,有黑色条纹->虎
24,15,16,13->27 //蹄类,长脖,长腿,有斑点->长颈鹿
24,14->28
//蹄类,有黑色条纹->斑马
22,15,16,4->29 //鸟类,长脖,长腿,会飞->鸵鸟
信天翁事实第14页共24页设计知识库规则哺乳类有羽毛鸟类会下蛋鸟类哺乳类吃肉食肉类有犬齿有爪眼盯前方食肉类哺乳类哺乳类反刍蹄类食肉类黄褐色有斑点金钱豹食肉类黄褐色有黑色条纹有黑色条纹斑马鸟类鸟类会游泳黑白二色会飞企鹅鸟类善飞信天翁规则第15页共24页规则符号化22会飞会下蛋鸟类21有犬齿有爪眼盯前方食肉类211024哺乳类有蹄蹄类211124哺乳类反刍蹄类23121325食肉类黄褐色有斑点金钱豹23121426食肉类黄褐色有黑色条纹虎2415161327长颈鹿241428蹄类有黑色条纹斑马221516429鸟类长脖长腿会飞鸵鸟221819430鸟类会游泳黑白二色会飞企鹅222031鸟类善飞信天翁第16页共24页核心代码stactfactnum黄褐色有斑点有黑色条纹不会飞会游泳黑白二色哺乳类鸟类食肉类第17页共24页核心代码intruleprerequisiterulenumrulevolume1000200030004500216007890211000211100231213023121402415161324140022151642218194222000intruleresultrulenum212122222323242425262728293031第18页共24页核心代码逆向推理函数boolbackwardreasoningintnumintmessage1规则集中的规则后件与假设的目标事实进行匹配得到匹配的规则集合
动物识别专家系统
动物识别专家系统随着科技的不断发展,人工智能技术在各个领域得到了广泛的应用,其中动物识别领域也不例外。
动物识别专家系统是一种基于人工智能技术的系统,它能够通过对动物的特征进行分析和识别,从而帮助人们更好地了解和保护动物世界。
本文将介绍动物识别专家系统的原理、应用和未来发展方向。
动物识别专家系统的原理。
动物识别专家系统基于人工智能技术,主要包括图像识别、声音识别和行为识别三个方面。
在图像识别方面,系统通过对动物的外貌特征进行分析和比对,从而识别出动物的种类和特征。
在声音识别方面,系统通过对动物的声音进行录制和分析,从而识别出动物的种类和特征。
在行为识别方面,系统通过对动物的行为进行观察和分析,从而识别出动物的种类和特征。
通过这些方法的综合应用,动物识别专家系统能够准确地识别出动物的种类和特征,为人们提供了一个更加直观和全面的了解动物世界的途径。
动物识别专家系统的应用。
动物识别专家系统在许多领域都有着广泛的应用,其中包括科研、保护和教育等方面。
在科研方面,动物识别专家系统能够帮助科研人员更好地了解动物的种类和特征,从而为动物学研究提供了更多的数据和信息。
在保护方面,动物识别专家系统能够帮助保护人员更好地监测和保护野生动物,从而为野生动物的保护工作提供了更多的支持和帮助。
在教育方面,动物识别专家系统能够帮助学生更好地了解动物的种类和特征,从而为动物教育提供了更多的资源和工具。
通过这些应用的综合推广,动物识别专家系统能够为人们提供一个更加全面和便捷的了解动物世界的途径。
动物识别专家系统的未来发展方向。
动物识别专家系统在未来有着广阔的发展前景,其中包括技术的进步、应用的拓展和服务的优化等方面。
在技术方面,动物识别专家系统将会不断引入新的人工智能技术,从而提高系统的识别准确度和效率。
在应用方面,动物识别专家系统将会不断拓展新的应用领域,从而为更多的人群提供更好的服务和支持。
在服务方面,动物识别专家系统将会不断优化用户体验和服务质量,从而为用户提供更加便捷和高效的服务。
人工智能大作业-动物识别专家系统研究
动物识别专家系统研究摘要:动物识别专家系统是将人的思维过程转化为计算机语言的逻辑过程,其关键在于知识和信息的表示,智能推理或求解的基础——知识库的创建和管理,以及基于某种知识和信息表示的智能推理或求解过程。
使动物识别具有一定的智能性、良好的交互性和可视化效果。
本论文也主要以识别七种动物的设计思路和程序为例所写的。
关键词:人工智能;专家系统;动物识别一、专家系统基本知识1.1动物识别专家系统介绍动物识别专家系统是人工智能中一个比较基础的规则演绎系统,是人工智能领域里的一个大模块的专家系统的一个特定例子。
是集知识表与推理为一体的,以规则为基础对用户提供的事实进行向前、逆向或双向的推理得出结论的一种产生式系统。
如果通过良好的分析、精确地设计和细致的规划会创设出高度灵活和快速有效的识别系统,再加上良好的界面供用户添加新的事实和规则,反馈详细的错误或信息的话,那就是一个相当完整的识别系统了。
1.2专家系统实际应用目前专家系统已经成功地渗透到生活的各个领域,并且还产生了巨大的社会效益和经济效益。
例如,像车辆传感、药物、纺织服装等重工业和轻工业领域中都会应用到,特别是在计算机领域里,现在已经是一门非常重要的学科类了。
1.3专家系统的开发专家系统设计与实现的一般过程图1【3】二、设计基本思路2.1知识库2.2.1知识库作用用产生式系统监别动物,需要一种演绎机制,利用己知事实的集合做出新的结论,一种方法是替动物园中的每个动物作一个产生式,使用者首先收集所有可利用的事实,然后在产生式的表中进行扫描,寻找一个状态部分能与之匹配的产生式。
一般要经过多少步并生成和利用一些中间事实才能从基本事实推出结论,这样做所包含的产生式可以比较小,容易理解,容易使用和容易产生。
动物识别专家系统中的知识库中的知识通常是用规则表示的。
2.1.2 知识库建立知识库所要遵循的规则【1】规则1:如果:动物有毛发则:该动物是哺乳动物规则2:如果:动物能产奶则:该单位是哺乳动物规则3:如果:该动物有羽毛则:该动物是鸟规则4:如果:动物会飞,且会下蛋则:该动物是鸟规则5:如果:动物吃肉则:该动物是肉食动物规则6:如果:动物有犬齿,且有爪,且眼盯前方则:该动物是食肉动物规则7:如果:动物是哺乳动物,且有蹄则:该动物是有蹄动物规则8:如果:动物是哺乳动物,且是反刍动物则:该动物是有蹄动物规则9:如果:动物是哺乳动物,且是食肉动物,且是黄褐色的,且有暗斑点则:该动物是豹规则10:如果:如果:动物是黄褐色的,且是哺乳动物,且是食肉,且有黑条纹则:该动物是虎规则11:如果:动物有暗斑点,且有长腿,且有长脖子,且是有蹄类则:该动物是长颈鹿规则12:如果:动物有黑条纹,且是有蹄类动物则:该动物是斑马规则13:如果:动物有长腿,且有长脖子,且是黑色的,且是鸟,且不会飞则:该动物是鸵鸟规则14:如果:动物是鸟,且不会飞,且会游泳,且是黑色的则:该动物是企鹅规则15:如果:动物是鸟,且善飞则:该动物是信天翁动物分类专家系统由15条规则组成可以识别七种动物.2.1.3 知识库获取知识获取一般是指从某个活某些致使原中获取专家系统问题求解所需要的专门知识,并以某种形式在计算机中存储、传输与转移。
人工智能动物识别系统 实验报告
人工智能导论实验报告题目动物识别专家系统学院信息科学与工程学院专业计算机科学与技术姓名侯立军学号 *********** 班级计信1301二O一五年十一月二十六日1 设计内容题目:动物识别专家系统内容:动物识别专家系统是流行的专家系统实验模型,他用产生是规则来表示知识可以识别不同的动物。
这些规则既少又简单,可以改造他们,也可以加入新的规则,还可以用来识别其他新规则来取代这些规则。
2 基本原理2.1 产生式系统的问题求解基本过程:(1) 初始化综合数据库,即把欲解决问题的已知事实送入综合数据库中;(2) 检查规则库中是否有未使用过的规则,若无转 (7);(3) 检查规则库的未使用规则中是否有其前提可与综合数据库中已知事实相匹配的规则,若有,形成当前可用规则集;否则转(6);(4) 按照冲突消解策略,从当前可用规则集中选择一个规则执行,并对该规则作上标记。
把执行该规则后所得到的结论作为新的事实放入综合数据库;如果该规则的结论是一些操作,则执行这些操作;(5) 检查综合数据库中是否包含了该问题的解,若已包含,说明解已求出,问题求解过程结束;否则,转(2);(6) 当规则库中还有未使用规则,但均不能与综合数据库中的已有事实相匹配时,要求用户进一步提供关于该问题的已知事实,若能提供,则转(2);否则,执行下一步;(7) 若知识库中不再有未使用规则,也说明该问题无解,终止问题求解过程。
2.2 正向推理正向推理是以已知事实作为出发点的一种推理,又称数据驱动推理、前向链推理及前件推理等。
2.2.1 正向推理的基本思想:从用户提供的初始已知事实出发,在知识库KB中找出当前可适用的知识,构成可适用知识集KS,然后按某种冲突消解策略从KS中选出一条知识进行推理,并将推出的新事实加入到数据库中作为下一步推理的已知事实,在此之后再在知识库中选取可适用的知识进行推理,如此重复,直到求得了所要求的解,或者知识库中再无可适用的知识为止。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
小型动物分类专家系统的设计与实现一、实验目的通过本实验可使学生能够综合利用C语言(或C++)、面向对象程序设计、数据结构、数据库原理、人工智能、软件工程等课程的相关知识,设计并实现小型动物分类专家系统,培养学生综合运用所学计算机软件知识解决实际问题的能力,为今后从事计算机软件开发及应用打下基础。
二、实验内容运用下列规则,设计并实现一个小型动物分类专家系统。
规则1:如果:动物有毛发则:该动物是哺乳动物规则2:如果:动物有奶则:该单位是哺乳动物规则3:如果:该动物有羽毛则:该动物是鸟规则4:如果:动物会飞,且会下蛋则:该动物是鸟规则5:如果:动物吃肉则:该动物是肉食动物规则6:如果:动物有犬齿,且有爪,且眼盯前方则:该动物是食肉动物规则7:如果:动物是哺乳动物,且有蹄则:该动物是有蹄动物规则8:如果:动物是哺乳动物,且是反刍动物则:该动物是有蹄动物规则9:如果:动物是哺乳动物,且是食肉动物,且是黄褐色的,且有暗斑点则:该动物是豹规则10:如果:如果:动物是黄褐色的,且是哺乳动物,且是食肉,且有黑条纹则:该动物是虎规则11:如果:动物有暗斑点,且有长腿,且有长脖子,且是有蹄类则:该动物是长颈鹿规则12:如果:动物有黑条纹,且是有蹄类动物则:该动物是斑马规则13:如果:动物有长腿,且有长脖子,且是黑色的,且是鸟,且不会飞则:该动物是鸵鸟规则14:如果:动物是鸟,且不会飞,且会游泳,且是黑色的则:该动物是企鹅规则15:如果:动物是鸟,且善飞则:该动物是信天翁动物分类专家系统由15条规则组成,可以识别七种动物,在15条规则中,共出现 30个概念(也称作事实),共30个事实,每个事实给一个编号,从编号从1到30,在规则对象中我们不存储事实概念,只有该事实的编号,同样规则的结论也是事实概念的编号,事实与规则的数据以常量表示,其结构如下:Char *str{}={"chew_cud","hooves","mammal","forward_eyes","claws", "pointed_teeth","eat_meat","lay_eggs","fly","feathers","ungulate", "carnivore","bird","give_milk","has_hair","fly_well","black&white_color","can_swim","long_legs","long_neck","black_stripes","dark_spots","tawny_color","albatross","penguin","ostrich","zebra","giraffe","tiger","cheetah","\0"}程序有编号序列的方式表达了产生式规则,如资料中规则15,如果动物是鸟,且善飞,则该动物是信天翁。
相应的规则数组第七条是{16,13,0,0,0,0},第十三个是“bird”(鸟),如果事实成立,询问使用者下一个事实,第十六个“fly_well”(善飞),如果也成立,则查找结论断言编号数组{30,29,28, 27,26,25,24,3,3,13,12,12,11,11,0}中第七个“24”,这里24对应事实数组中的“albatross”(信天翁)。
上述就是程序的推理过程,也是程序中的重点,该部分是由规则类(类rul e)中的Query方法实现。
三、实验原理一个基于规则专家系统的完整结构示于图1。
其中,知识库、推理机和工作存储器是构成专家系统的核心。
系统的主要部分是知识库和推理引擎。
知识库由谓词演算事实和有关讨论主题的规则构成。
推理引擎由所有操纵知识库来演绎用户要求的信息的过程构成-如消解、前向链或反向链。
用户接口可能包括某种自然语言处理系统,它允许用户用一个有限的自然语言形式与系统交互;也可能用带有菜单的图形接口界面。
解释子系统分析被系统执行的推理结构,并把它解释给用户。
图1 一个基于规则专家系统的完整结构四、实验环境开发工具采用Microsft Visual C++6.0 集成开发工具或C,其它C++工具任选,如采用数据库完成知识库,数据库管理系统采用Sql Server 2000.五、实验步骤知识库中的知识源于领域专家,它是问题求解所需要的领域知识的集合,包括基本事实、规则和其它有关信息。
步骤一:知识获取与知识表示选择/设计1.知识的获取获取专业领域所涉及到的知识内容。
上图是从规则集所形成的(部分)推理网络。
2、知识的表达由步骤1获取的知识集合中的内容,包括定性信息和定量信息,对于定性信息必须制定相应的规则来表达知识的含义。
也是知识库建立的重点。
3、建立知识库步骤二:简单推理机设计推理机是实施问题求解的核心执行机构,它是对知识进行解释的程序,根据知识的语义,对按一定策略找到的知识进行解释执行,并把结果记录到动态库的适当空间中去。
推理策略包括:1、正向(数据驱动)2、反向(目标驱动)3、双向本实验用正向推理策略来完成,实现推理机的程序与知识库的具体内容无关,对知识库的修改不需要改动推理机。
本步骤具体包括:1、充分理解知识库现有知识,提出待解决问题2、建立规则库3、从规则库中获取可用规则集4、确定搜索控制策略(例如:估价函数策略)5、通过搜索控制策略,从规则集中选出最优规则6、执行最优规则,更新知识库7、反复多次以上步骤8、获得解决方案或无解步骤三:系统调试与测试先熟悉语言环境;接着运行示例程序;然后编辑、调试、测试自己的系统程序。
程序的流程主要是:1、实例化各个类2、初始化事实集3、初始化规则集4、使用规则对事实进行推导规则类:规则名只是用来表示规则的一个名称,前提链由前提类生成的单链表,结论则是存放结论断言编号,表示由该规则的到的结论在事实数组中的编号。
事件类:事实号和规则数据和结论断言数据的数字相对应。
激活标志表示这个时候有没有被处理过。
断言保存推理后的结论,在重复查询这个事实条件时不用反复询问用户。
六、实验思考题1、专家系统的设计和开发方法与其它软件的设计和开发的方法有什么不同?2、如果使用数据库管理系统中建立知识库,程序如何实现?附程序参考源代码:#include <string.h>#include <math.h>#include <stdio.h>#include <iostream.h>#define True 1#define False 0#define DontKnow -1char *str[]={"chew_cud","hooves","mammal","forward_eyes", "claws","pointed_teeth","eat_meat","lay_eggs","fly", "feathers","ungulate","carnivore","bird","give_milk","has_hair","fly_well","black&white_color","can_swim","long_legs","long_neck","black_stripes","dark_spots","tawny_color","albatross","penguin","ostrich","zebra", "giraffe","tiger","cheetah",0};int rulep[][6]={{22,23,12,3,0,0},{21,23,12,3,0,0},{22,19,20,11,0,0},{21,11,0,0,0,0},{17,19,20,13,-9,0},{17,18,13,-9,0,0},{16,13,0,0,0,0},{15,0,0,0,0,0},{14,0,0,0,0,0},{10,0,0,0,0,0},{8,7,0,0,0,0},{7,0,0,0,0,0},{4,5,6,0,0,0},{2,3,0,0,0,0},{1,3,0,0,0,0}};int rulec[]={30,29,28,27,26,25,24,3,3,13,13,12,12,11,11,0};class fact{private:int Number;char Name[21];int Active;int Succ;public:fact *Next;fact(int Num,char *L){strcpy(Name,L);Number=Num;Active=False; //-1是已经推理,不符合。
1是已经推理,符合。
Succ=DontKnow; //0是无,-1是不知道,1是有。
Next=NULL;}char *GetName(){char *L;L=new char[21];strcpy(L,Name);return L;}int GetNumber(){return Number;}int GetAct(){return Active;}如有帮助,欢迎下载。
int GetSucc(){return Succ;}void PutAct(const int Act0,int Suc0){Active=Act0;Succ=Suc0;}};fact *Fact;class list{private:int Number;public:list *Next;list(int Num){Number=Num;Next=NULL;}int GetNumber(){return Number;}};class rule{char *Name;list *Pre;int Conc;public:rule *Next;rule(char *N,int P[],int C);~rule();int Query();void GetName(){cout<<Name;}};rule::~rule(){while(Pre){L=Pre->Next;delete Pre;Pre=L;}delete Name;}rule::rule(char *N,int P[],int C){int i;list *L;Pre=NULL;Next=NULL;Name=new char[strlen(N)+1];strcpy(Name,N);i=0;while(P[i]!=0){L=new list(P[i++]);L->Next=Pre;Pre=L;}Conc=C;}int rule::Query(){char c;int Tag=0;list *L;fact *F;F=Fact;L=Pre;if(L==NULL)cout<<"\nError";while(L!=NULL){F=Fact;for(;;){if(abs(L->GetNumber())==F->GetNumber()) break;F=F->Next;if(L->GetNumber()>0){if((F->GetSucc())==True){L=L->Next;continue;}if((F->GetSucc())==False)return False;}else{if((F->GetSucc())==True)return False;if((F->GetSucc())==False){L=L->Next;continue;}}cout<<F->GetName()<<"(Y/N)"<<endl;c=getchar();flushall();if((c=='Y')||(c=='y')){if(L->GetNumber()>0)F->PutAct(1,True);if(L->GetNumber()<0){F->PutAct(1,True);Tag=-1;return False;}}else{if(L->GetNumber()<0)F->PutAct(-1,False);else{F->PutAct(-1,False);Tag=-1; //已经推理,不符合。