重庆大学人工智能作业(动物识别系统)
人工智能实验报告

暨南大学人工智能实验报告题目:动物识别系统院系:信科院计算机系专业:计算机软件与理论学号:学生姓名:张韶远成绩:日期:2009年11月10日一、目的与要求1.掌握人工智能的知识表示技术,能用产生式表示法表示知识,并实现一个用于识别的专家系统。
2.推理策略采用正向推理和反向推理两种。
二、主要内容1.学习人工智能的知识表示技术,关键掌握产生式知识表示的具体应用方法。
2.实现的动物识别系统的主要功能如下:2.1系统能通过正向、反向推理得到正确的动物识别结果。
2.2系统能动态地添加规则、能显示推理过程。
三.实验原理产生式表示:产生式表示是知识表示的一种。
这种方法是建立在因果关系的基础上的,可很容易的描述事实、规则及其不确定性度量。
1.事实的表示:事实可看成是断言一个语言变量的值或是多个语言变量间的关系的陈述句,语言变量的值或语言变量间的关系可以是一个词。
不一定是数字。
一般使用三元组(对象,属性,值)或(关系,对象1,对象2)来表示事实,其中对象就是语言变量,若考虑不确定性就成了四元组表示(增加可信度)。
这种表示的机器内部实现就是一个表。
如事实“老李年龄是35岁”,便写成(Lee,age,35)事实“老李、老张是朋友”,可写成(friend,Lee,Zhang)2.规则的表示:规则用于表示事物间的因果关系,以if condition then action 的单一形式来描述,将规则作为知识的单位。
其中的condition 部分称为条件式前件或模式,而action部分称作动作、后件或结论。
产生式一般形式为:前件后件。
前件和后件也可以是有“与”、“或”、“非”等逻辑运算符的组合的表达式。
条件部分常是一些事实的合取或析取,而结论常是某一事实B。
如果不考虑不确定性,需另附可信度度量值。
产生式过则的含义是:如果前件满足,则可得到后件的结论或者执行后件的相应动作,即后件由前件来触发。
一个产生式生成的结论可以作为另一个产生式的前提或语言变量使用,进一步可构成产生式系统。
人工智能大作业

大作业1、引言
1.1 背景
1.2 目的
1.3 范围
1.4 定义
2、文献综述
2.1 关于的研究历史
2.2 相关研究成果与应用领域
3、问题陈述
3.1 问题描述
3.2 研究的动机和意义
3.3 研究的目标和假设
4、方法ology
4.1 数据收集
4.2 数据处理与清洗
4.3 特征选择与提取
4.4 算法选择与实现
4.5 模型训练与优化
5、实验结果与分析
5.1 数据集描述
5.2 实验设置
5.3 结果分析与讨论
5.4 实验效果评估
6、结论与展望
6.1 主要研究结果总结 6.2 讨论与不足之处
6.3 对未来工作的展望附件:
附件1:数据集来源信息附件2:代码仓库
附件3:实验结果数据表格法律名词及注释:
1、:指通过模拟和模仿人类智能的方法和技术,使计算机系统能够自动执行任务、学习、适应和改进。
2、数据处理与清洗:指对原始数据进行筛选、过滤、去除噪声以及修复缺失值等操作,以提高数据的质量和可用性。
3、特征选择与提取:指从原始数据中选择最相关或最具代表性的特征,或通过计算、变换等方法提取出更具信息量的特征。
4、算法选择与实现:指根据问题的特点和要求,选择合适的算法,并通过编程实现。
5、模型训练与优化:指使用训练数据对选定的算法模型进行训练,并通过调整参数、改进算法等方式优化模型性能。
动物识别系统实验报告

stringFindMaxNumber ="select max(动物序号) from动物库";
SqlCommandcmd2 =newSqlCommand( FindMaxNumber ,con);
1.1功能需求
1.1.1动物识别正向推理
正向推理是从已知事实出发,通过规则库求的结论,也称为自底向上,或称为数据驱动方式。
正向推理过程的具体步骤是:
(1)读入事实集到工作存储器。
(2)取出某条规则,将规则的全部前件与工作存储器中的所有事实进行比较。如果匹配成功,则所得结果显示到屏幕上,转向(3);否则,直接转向(3)。
动物识别系统设计主体框架:本系统只用了一个页面实现,界面使用上下结构的框架设计,当用户进入系统的时候,打开Default.aspx,该页面分为上下两个部分,上面的部分是用于根据问题输入动物特征,下面的部分是新规则的加入功能部分,也是用户进行添加新规则的页面,这好似一个导航页面,用户可以更具自己的选择进行的操作,由上至下进入不同的功能部分。各个功能模块的设计:
staticint[] a =newint[7];
SqlConnectioncon =newSqlConnection("Server = PC-11; user id = sa;password = ;Database = animal;");
protectedvoidPage_Load(objectsender,EventArgse)
YesOption.Checked =false;
}
protectedvoidNoOption_CheckedChanged(objectsender,EventArgse)
{
a[Convert.ToInt32(Questionselected.SelectedValue)] = 0;
大工20秋《人工智能》大作业题目及要求精选全文

可编辑修改精选全文完整版学习中心:专业:年级:年春/秋季学号:学生:完整答案下载后可见题目:深度优先搜索算法1.谈谈你对本课程学习过程中的心得体会与建议?通过这学期的学习,我对人工智能有了一定的感性认识,个人觉得人工智能是一门极富挑战性的科学,从事这项工作的人必须懂得计算机知识,心理学和哲学。
人工智能是包括十分广泛的科学,它由不同的领域组成,如机器学习,计算机视觉等等,总的说来,人工智能研究的一个主要目标是使机器能够胜任一些通常需要人类智能才能完成的复杂工作。
人工智能的定义可以分为两部分,即“人工”和“智能”。
“人工”比较好理解,争议性也不大。
有时我们会要考虑什么是人力所能及制造的,或者人自身的智能程度有没有高到可以创造人工智能的地步,等等。
但总的来说,“人工系统”就是通常意义下的人工系统。
关于什么是“智能”,就问题多多了。
这涉及到其它诸如意识、自我、思维等等问题。
人唯一了解的智能是人本身的智能,这是普遍认同的观点。
但是我们对我们自身智能的理解都非常有限,对构成人的智能的必要元素也了解有限,所以就很难定义什么是“人工”制造的“智能”了。
关于人工智能一个大家比较容易接受的定义是这样的:人工智能是人造的智能是计算机科学、逻辑学、认知科学交叉形成的一门科学,简称AI。
人类正向信息化的时代迈进,信息化是当前时代的主旋律。
信息抽象结晶为知识,知识构成智能的基础。
因此,信息化到知识化再到智能化,必将成为人类社会发展的趋势。
人工智能已经并且广泛而有深入的结合到科学技术的各门学科和社会的各个领域中,她的概念,方法和技术正在各行各业广泛渗透。
而在我们的身边,智能化的例子也屡见不鲜。
在军事、工业和医学等领域中人工智能的应用已经显示出了它具有明显的经济效益潜力,和提升人们生活水平的最大便利性和先进性。
2.《人工智能》课程设计,从以下5个题目中任选其一作答。
《人工智能》课程设计题目三:深度优先搜索算法要求:(1)撰写一份word文档,里面包括(算法思路、算法程序框图、主要函数代码)章节。
动物识别系统实验报告

condition[numbers] = Int32.Parse(this.CheckBoxList1.Items[j].Value.ToString());
numbers++;
}
}
//添加用户自己输入的项
在推理过程中,当规则表中某条规则的前提可以和综合数据库中的已知事实相匹配时,该规则被激活。由它推出的结论将被作为新的事实放入数据库,称为后面推理的已知事实。所以数据库系统结构如下:
4. 系统设计
本系统分为三个功能模块,分别是动物识别、添加规则、删除规则。系统实现如下,其中distinguish.aspx实现动物识别;Addrule.aspx实现添加规则;Deleterule.aspx实现删除规则;主页实现为main.aspx和top.aspx;连接数据库调用DBFunction.cs。
using (DBFunction DBfun = new DBFunction(DBTransactionType.WithTran)) { //如果用户填写了这个空并且这个条件不在数据库中,就将它添加到数据库中。
if (this.TextBox1.Text.ToString() != "" && !check(this.TextBox1.Text.ToString(),DBfun)) {
bool check = true;
for (int j = 1; j < 6; j++){
if (dt.Rows[i][j].ToString() == "")
{ }
else{
人工智能-动物识别专家系统算法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。
人工智能大作业(一)2024

人工智能大作业(一)引言:人工智能(Artificial Intelligence,简称AI)是近年来备受关注的热门领域。
随着计算能力的提高和算法的进步,人工智能正在日益渗透到各个行业和领域中。
本文将探讨人工智能大作业的相关内容,着重分析了其中的五个重要方面。
正文:一、机器学习(Machine Learning)1.1 监督学习(Supervised Learning)的基本概念及示例1.2 无监督学习(Unsupervised Learning)的基本概念及应用领域1.3 强化学习(Reinforcement Learning)的基本原理和算法1.4 深度学习(Deep Learning)的基本结构和典型应用1.5 机器学习在人工智能大作业中的实践与挑战二、自然语言处理(Natural Language Processing)2.1 词法分析和语法分析的基本原理和任务2.2 语义分析和语义关系的理论基础和实践应用2.3 文本分类和情感分析的相关技术和方法2.4 机器翻译和语音识别的高级应用和发展趋势2.5 自然语言处理在人工智能大作业中的应用与挑战三、计算机视觉(Computer Vision)3.1 图像处理和特征提取的基本原理和方法3.2 目标检测和图像识别的常用算法和技术3.3 图像分割和场景理解的相关研究和实践3.4 视频分析和行为识别的进展和应用领域3.5 计算机视觉在人工智能大作业中的应用案例和前景展望四、数据挖掘(Data Mining)4.1 数据预处理和数据清洗的基础知识和常用技术4.2 数据集成和数据转换的数据挖掘流程和方法4.3 关联规则和聚类分析的基本概念和算法4.4 分类和预测分析的实践案例和评价指标4.5 数据挖掘在人工智能大作业中的应用与发展趋势五、智能决策系统(Intelligent Decision System)5.1 知识表示和推理的基本方法和知识表示语言5.2 不确定性建模和决策制定的技术和策略5.3 专家系统和推荐系统的典型特征和实现方法5.4 异常检测和智能优化的相关研究和应用5.5 智能决策系统在人工智能大作业中的实践案例和展望总结:人工智能大作业(一)涵盖了机器学习、自然语言处理、计算机视觉、数据挖掘和智能决策系统等五个重要方面。
人工智能课程设计报告--动物识别系统

文档从互联网中收集,已重新修正排版,word格式支持编辑,如有帮助欢迎下载支持。
计算机科学与技术学院《人工智能》课程设计报告设计题目:动物识别系统设计人员:学号:学号:学号:学号:学号:学号:指导教师:2015年7月目录目录 (1)摘要 (2)Abstract (2)一、专家系统基本知识 (3)1.1专家系统实际应用 (3)1.2专家系统的开发 (3)二、设计基本思路 (4)2.1知识库 (4)....................................................................................................... 错误!未定义书签。
2.1.2 知识库建立 (4)2.1.3 知识库获取 (5)2.2 数据库 (6)....................................................................................................... 错误!未定义书签。
....................................................................................................... 错误!未定义书签。
三、推理机构 (7)3.1推理机介绍 (7)3.1.1 推理机作用原理 (7)....................................................................................................... 错误!未定义书签。
3.2 正向推理 (7)3.2.1 正向推理基本思想 (7)3.2.2 正向推理示意图 (8)3.2.3 正向推理机所要具有功能 (8)3.3反向推理 (8)....................................................................................................... 错误!未定义书签。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
人工智能及其应用作业姓名:学号:一、作业题目:设计一个动物识别系统,运用产生式系统的思想,设在综合数据库中存放下列已知事实:该动物身上有暗斑点,长脖子,长腿,奶,蹄,这些事实与规则库中的知识从第一条开始匹配,最终得出该动物是长颈鹿。
二、程序设计分析:根据产生式系统的原理,该系统一般由规则库、综合数据库、控制系统三部分构成。
先定义规则库结构体,里面包括Condition[6][20],result[20]和规则数Cnum,再定义综合数据库即事实库,里面包括item[20][20],和事实数Fnum,主要用到的参数就是这些。
然后初始化规则库和综合数据库,编辑规则库。
之后就是主程序,也就是推理机的作用:先让用户输入事实,然后与规则库中的知识从第一条开始逐条匹配,当匹配成功时,将结论插入事实库并更新事实库,再逐条匹配,依次循环..最终如果能匹配成功就显示‘该动物是..’,否则显示‘无法识别该动物’,程序结束。
三、程序流程图如下图:图一、系统程序流程图四、我的源程序如下:#include "iostream.h"#include "stdio.h"#include "conio.h"#include "string.h"typedef struct Rule//定义规则库{char Condition[6][20];char Result[20];int Cnum;bool used;}rule;typedef struct Fact//定义综合数据库{char item[20][20];int Fnum;}fact;rule r[100];fact f;void Create_Rules();//初始化规则库void Create_Facts();//初始化综合数据库int Get_RulesNum();void Ratiocinate(int n);void main(){int Rnum=0;Create_Rules();Create_Facts();Rnum=Get_RulesNum();//cout<<Rnum<<endl; Ratiocinate(Rnum);}void Create_Rules(){strcpy(r[0].Condition[0],"有毛发"); strcpy(r[0].Result,"哺乳动物");r[0].Cnum=1;r[0].used=false;strcpy(r[1].Condition[0],"奶");strcpy(r[1].Result,"哺乳动物");r[1].Cnum=1;r[1].used=false;strcpy(r[2].Condition[0],"有羽毛"); strcpy(r[2].Result,"鸟");r[2].Cnum=1;r[2].used=false;strcpy(r[3].Condition[0],"会飞");strcpy(r[3].Condition[1],"会下蛋"); strcpy(r[3].Result,"鸟");r[3].Cnum=2;r[3].used=false;strcpy(r[4].Condition[0],"吃肉");strcpy(r[4].Result,"食肉动物");r[4].Cnum=1;r[4].used=false;strcpy(r[5].Condition[0],"有犬齿"); strcpy(r[5].Condition[1],"有爪");strcpy(r[5].Condition[2],"眼盯前方"); strcpy(r[5].Result,"食肉动物");r[5].Cnum=3;r[5].used=false;strcpy(r[6].Condition[0],"哺乳动物"); strcpy(r[6].Condition[1],"蹄");strcpy(r[6].Result,"有蹄动物");r[6].Cnum=2;r[6].used=false;strcpy(r[7].Condition[0],"有蹄动物"); strcpy(r[7].Condition[1],"嚼反刍动物"); strcpy(r[7].Result,"有蹄动物");r[7].Cnum=2;r[7].used=false;strcpy(r[8].Condition[0],"哺乳动物"); strcpy(r[8].Condition[1],"食肉动物"); strcpy(r[8].Condition[2],"黄褐色"); strcpy(r[8].Condition[3],"身上有暗斑点"); strcpy(r[8].Result,"金钱豹");r[8].Cnum=4;r[8].used=false;strcpy(r[9].Condition[0],"哺乳动物"); strcpy(r[9].Condition[1],"食肉动物"); strcpy(r[9].Condition[2],"黄褐色"); strcpy(r[9].Condition[3],"有黑色条纹"); strcpy(r[9].Result,"虎");r[9].Cnum=4;r[9].used=false;strcpy(r[10].Condition[0],"有蹄动物");strcpy(r[10].Condition[1],"长腿");strcpy(r[10].Condition[2],"长脖子");strcpy(r[10].Condition[3],"身上有暗斑点");strcpy(r[10].Result,"长颈鹿");r[10].Cnum=4;r[10].used=false;strcpy(r[11].Condition[0],"有蹄类动物");strcpy(r[11].Condition[1],"身上有黑色条纹");strcpy(r[11].Result,"斑马");r[11].Cnum=2;r[11].used=false;strcpy(r[12].Condition[0],"鸟");strcpy(r[12].Condition[1],"有长脖子");strcpy(r[12].Condition[2],"长腿");strcpy(r[12].Condition[3],"不会飞");strcpy(r[12].Condition[4],"有黑白两色");strcpy(r[12].Result,"鸵鸟");r[12].Cnum=5;r[12].used=false;strcpy(r[13].Condition[0],"鸟");strcpy(r[13].Condition[1],"会游泳");strcpy(r[13].Condition[2],"不会飞");strcpy(r[13].Condition[3],"有黑白两色");strcpy(r[13].Result,"企鹅");r[13].Cnum=4;r[13].used=false;strcpy(r[14].Condition[0],"鸟");strcpy(r[14].Condition[1],"善飞");strcpy(r[14].Result,"海燕");r[14].Cnum=2;r[14].used=false;}void Create_Facts(){printf("请输入该动物特性(中间加空格,Enter键结束)\n");scanf("%s%s%s%s%s",&f.item[0],&f.item[1],&f.item[2],&f.item[3],&f.item[4]);f.Fnum=5;int Get_RulesNum(){int num=0;int i=0;while(1){if(r[i].Condition[0][0]=='\0'){break;}i++;num++;}return num;}void Ratiocinate(int n){bool FindFact(char * str);void InsertIntoFact(char * str);int i=0,j;/// i用来控制查找的是第几条规则,j用来控制查找的规则中的第几条while(1){if(r[i].used==false){for(j=0;j<r[i].Cnum;j++){if(FindFact(r[i].Condition[j])){continue;}else{cout<<"规则"<<i+1<<"匹配失败"<<endl;break;}}}if(j==r[i].Cnum) ///如果所有的前件都满足{r[i].used=true;cout<<"规则"<<i+1<<"匹配成功,结论插入到综合数据库"<<endl;if(!FindFact(r[i].Result)){InsertIntoFact(r[i].Result);///插入事实cout<<"新增加的事实为:"<<f.item[f.Fnum-1]<<endl;}i=0;//continue;}else i++;//查看下条规则if(i==n){cout<<"没有你要找符合要求的动物,请增加新的规则"<<endl;break;}else if(strcmp(f.item[f.Fnum-1],"老虎")==0||strcmp(f.item[f.Fnum-1],"金钱豹")==0||strcmp(f.item[f.Fnum-1],"长颈鹿")==0||strcmp(f.item[f.Fnum-1],"斑马")==0||strcmp(f.item[f.Fnum-1],"鸵鸟")==0||strcmp(f.item[f.Fnum-1],"企鹅")==0||strcmp(f.item[f.Fnum-1],"海燕")==0){cout<<"与你给的事实匹配的动物:"<<f.item[f.Fnum-1]<<endl;break;}}}//查看综合数据库中的事实否否等于前件,或者是存在这条事实,那么新的结论就不用加到综合数据库中bool FindFact(char * str){int i;for(i=0;i<f.Fnum;i++){if(strcmp(f.item[i],str)) continue;else return true;}return false;}//插入新的事实void InsertIntoFact(char * str){strcpy(f.item[f.Fnum],str);f.Fnum++;}五、程序运行结果:。