产生式动物识别系统设计
产生式系统 识别动物 python 产生式系统的应用实例 转 -回复

产生式系统识别动物python 产生式系统的应用实例转-回复产生式系统(Production System)是人工智能领域中常用的一种知识表示和推理方式,也被广泛应用于自然语言处理、专家系统、智能搜索等领域。
产生式系统以if-then的规则形式表示知识,并通过模式匹配的方式进行推理和推断。
在本文中,我们将以"产生式系统识别动物python 产生式系统的应用实例转"为主题,逐步分析产生式系统的原理和应用,并介绍使用Python实现一个基础的动物识别系统的案例。
一、产生式系统原理及基本概念产生式系统是基于规则的知识表达和推理方式,它由条件部分和结论部分组成。
条件部分描述了一系列前提条件,结论部分则是满足条件部分的推论结果。
产生式系统通过匹配条件部分和已有的事实库进行推理,从而得到新的结论。
产生式系统的基本概念包括规则(rule)、事实(fact)、工作单元(working memory)和控制策略(control strategy)。
规则是产生式系统的基本单位,它包含了if-then的条件推理规则。
例如,一条规则可以是:“如果动物有毛发,并且有四条腿,那么它是哺乳动物”。
事实是产生式系统中的基本数据,它表示系统当前的知识状态。
例如,一条事实可以是:“这个动物有四条腿”。
工作单元是存储和管理事实的数据结构,它可以是一个列表或者一个数据库。
产生式系统通过与工作单元中的事实进行匹配来进行推理。
控制策略是产生式系统的推理策略,它决定了系统在工作单元中进行规则匹配和推理的顺序。
常见的控制策略包括深度优先、广度优先和最佳优先等。
二、动物识别的产生式系统实现在本节,我们将以一个简单的动物识别系统为例,介绍如何使用产生式系统来实现动物识别。
这个动物识别系统可以根据输入的动物特征判断其是什么类别的动物,比如哺乳动物、爬行动物等。
1. 确定知识库和规则库首先,我们需要确定动物特征的知识库和规则库。
知识库包括各种动物的特征信息,规则库则包含了各种动物的分类规则。
产生式系统 识别动物 python 产生式系统的应用实例 转 -回复

产生式系统识别动物python 产生式系统的应用实例转-回复产生式系统的应用实例– 识别动物产生式系统是一种任务驱动逻辑推理系统,它使用一组规则和事实来推导出新的结论或执行特定的任务。
产生式系统已经被广泛应用于多个领域,包括人工智能、自然语言处理和专家系统等。
本文将介绍如何使用产生式系统来识别不同种类的动物。
一、产生式系统简介产生式系统的核心思想是使用规则和事实来推断新的结果。
它由三个主要组成部分组成:规则集、事实集和控制系统。
规则集是一组逻辑规则,用于描述特定问题的解决方法。
每条规则通常由一个前提和一个结论组成。
前提是一个或多个逻辑表达式,用于描述已知的条件。
结论是一个逻辑表达式,用于描述推理出的结果。
事实集是规则集的初始状态。
它包含已知的事实和问题的初始条件。
在推理过程中,事实集可以根据已推导出的结论进行更新。
控制系统负责控制规则的激活和执行过程。
它根据当前的规则集和事实集状态来选择要执行的规则,直到达到目标或无法推导出新的结论。
二、识别动物的产生式系统实例为了演示如何使用产生式系统来识别动物,我们将创建一个简单的实例。
假设我们有一组规则和事实,用于识别动物的类型。
1. 规则集我们定义了以下规则集来描述动物的特征和类型:规则1:如果动物有羽毛并且会飞,则它是鸟类。
规则2:如果动物有四条腿并且会游泳,则它是鱼类。
规则3:如果动物有四条腿并且是哺乳动物,则它是哺乳类动物。
规则4:如果动物是冷血动物并且有鳞片,则它是爬行类动物。
2. 事实集我们给出了一些已知的事实和问题的初始条件:事实1:动物有羽毛。
事实2:动物会飞。
3. 控制系统我们使用一个简单的控制系统来选择要执行的规则和推导新的结论。
该控制系统重复以下步骤直到达到目标或无法推导出新的结论。
步骤1:遍历规则集中的每一条规则。
步骤2:检查规则的前提是否在事实集中都成立。
步骤3:如果规则的前提都成立,则将规则的结论添加到事实集中,并标记该规则为已执行。
动物识别系统实验报告

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{
动物识别

项目二:一个用于动物识别的产生式系统
实验内容:
设计该系统,让其实现可以识别老虎、金钱豹、斑马、长颈鹿、企鹅、信天翁这6种动物。
实验目的:
让学生进一步加深对产生式系统的认识和理解。
实验要求:
其规则库中应包含至少15条规则,假设推理开始时综合数据库中存放有以下事实:
动物有暗斑,有长脖子,有长腿,有奶,有蹄。
规则R1:IF 该动物有奶
THEN 它是哺乳动物
规则R2:IF 该动物无奶
THEN 它是非哺乳动物
规则R3:IF 该动物是哺乳动物
该动物有蹄
THEN 它是有蹄动物
规则R4:IF 该动物是哺乳动物
该动物无蹄
THEN 它是非有蹄动物
规则R5:IF 该动物是非哺乳动物
该动物有长腿
THEN 它是信天翁(推理结束)
规则R6:IF 该动物是非哺乳动物
该动物无长腿
THEN 它是企鹅(推理结束)
规则R7:IF 该动物是非有蹄动物
该动物有暗斑
THEN 它是猎豹(推理结束)
规则R8:IF 该动物是非有蹄动物
该动物无暗斑
THEN 它是老虎(推理结束)
规则R9:IF 该动物是有蹄动物
该动物有长脖子
THEN 它是长颈鹿(推理结束)
规则R10:IF 该动物是有蹄动物
该动物无长脖子
THEN 它是斑马(推理结束)。
产生式系统 识别动物 python 产生式系统的应用实例 转 -回复

产生式系统识别动物python 产生式系统的应用实例转-回复产生式系统是一种基于规则的计算模型,用于描述和解决问题。
它通过一系列规则和推理机制,根据已知的事实和推断出的结论,来推导出新的结论。
在本文中,我们将探讨产生式系统在识别动物方面的应用实例,并使用Python编程语言来实现。
动物识别是一个常见的问题,并且在生态学、生物学、动物保护等领域具有重要意义。
通过识别动物,我们可以了解它们的行为、环境需求以及保护措施等信息。
产生式系统可以通过构建一组规则来识别动物,并基于输入的特征来推断出动物的种类。
首先,我们需要定义一些输入的特征。
在动物识别中,可能涉及到的特征包括动物的外形、大小、颜色、喜好的食物等。
我们可以将这些特征表示为产生式系统的规则。
例如,假设我们有以下规则:1. 如果动物有鳞片,那么它可能是鱼类。
2. 如果动物有羽毛和善于飞翔,那么它可能是鸟类。
3. 如果动物有毛发,喜欢吃草,那么它可能是哺乳动物。
4. 如果动物有喙和过滤食物的能力,那么它可能是鸟类。
为了将这些规则应用于特定的问题中,我们需要将它们转化为产生式系统的表示形式。
在Python中,可以使用字典(Dictionary)来表示规则。
pythonrules = {"rule1": {"condition": "has_scales","conclusion": "fish"},"rule2": {"condition": "has_feathers and can_fly","conclusion": "bird"},"rule3": {"condition": "has_hair and likes_grass","conclusion": "mammal"},"rule4": {"condition": "has_beak and has_filtering_ability","conclusion": "bird"}}接下来,我们需要获取用户输入的特征。
动物识别专家系统简介

动物识别专家系统简介动物识别专家系统是经典的专家系统实验模型,它用产生式规则来表示知识,共15条规则,可以识别七种动物。
这些规则既少又简单,可以改造他们,也可以加进新的规则,还可以用来识别其他东西的新规则来取代这些规则。
2.1、建立动物识别专家系统的规则库,并用与/或图来描述这个规则库。
规则库由15条规则组成,编写一段程序,把15条规则组成一个表直接赋值给规则库rules,规则名分别是;rule1,rule2,┉,rule15。
( rules((rule1(if (animal has hair)) 若动物有毛发(F1)(then (animal is mammal))) 则动物是哺乳动物(M1)((rule2(if (animal gives milk)) 若动物有奶(F2)(then (animal is mammal))) 则动物是哺乳动物(M1)((rule3(if (animal has feathers)) 若动物有羽毛(F9)(then (animal is bird))) 则动物是鸟(M4)((rule4(if (animal flies)) 若动物会飞(F10)(animal lays eggs)) 且生蛋(F11)(then (animal is bird))) 则动物是鸟(M4)((rule5(if (animal eats meat)) 若动物吃肉类(F3)(then (animal is carnivore))) 则动物是食肉动物(M2)((rule6(if (animal Raspointed teeth)) 若动物有犀利牙齿(F4)(animal has claws) 且有爪(F5)(animal has forword eyes)) 且眼向前方(F6)(then (animal is carnivore))) 则动物是食肉动物(M2)((rule7(if (animal has mammal)) 若动物是哺乳动物(M1)(animal has hoofs)) 且有蹄(F7)(then (animal is ungulate))) 则动物是有蹄类动物(M3)((rule8(if (animal has mammal)) 若动物是哺乳动物(M1)(animal chews cud)) 且反刍(F8)(then (animal is ungulate))) 则动物是有蹄类动物(M3)((rule9(if (animal is mammal)) 若动物是哺乳动物(M1)(animal is carnivore) 且是食肉动物(M2)(animal has tawny color) 且有黄褐色(F12)(animal has dark sports)) 且有暗斑点(F13)(then (animal is cheetah))) 则动物是豹(H1)((rule10(if (animal is mammal)) 若动物是哺乳动物(M1)(animal is carnivore) 且是食肉动物(M2)(animal has tawny color) 且有黄褐色(F12)(animal has black stripes) 且有黑色条纹(F15)(then (animal is tiger))) 则动物是虎(H2)((rule11(if (animal is ungulate)) 若动物是有蹄类动物(M3)(animal has long neck) 且有长脖子(F16)(animal has long legs) 且有长腿(F14)(animal has dark sports)) 且有暗斑点(F13)(then (animal is giraffe))) 则动物是长颈鹿(H3)((rule12(if (animal is ungulate)) 若动物是有蹄类动物(M3)(animal has black stripes) 且有黑色条纹(F15)(then (animal is zebra))) 则动物是斑马(H4)((rule13(if (animal is bird)) 若动物是鸟(M4)(animal does not fly) 且不会飞(F17)(animal has long neck) 且有长脖子(F16)(animal has long legs)) 且有长腿(F14)(animal black and white)) 且有黑白二色(F18)(then (animal is ostrich))) 则动物是驼鸟(H5)((rule14(if (animal is bird)) 若动物是鸟(M4)(animal does not fly) 且不会飞(F17)(animal swims) 且会游泳(F19)(animal black and white)) 且有黑白二色(F18)(then (animal is penguin))) 则动物是企鹅(H6)((rule15(if (animal is bird)) 若动物是鸟(M4)(animal flies well)) 且善飞(F20)(then (animal is albatross))) 则动物是信天翁(H6)在上述规则的说明中,用F1-F20标记的是初始事实或证据,用M1-M4标记的是中间结论,用H1-H7标记的是最终结论。
报告_基于产生式系统的动物识别系统

实验基于产生式系统的动物识别系统知识表示与推理专题魏江200620108203 计算机系统结构专业(1班)正向推理是产生式系统的一种推理方法,它是从一组表示事实的谓词或命题出发,使用一组产生式规则,用以证明该谓词公式或命题是否成立.本实验用两种方法实现了一个简单的动物识别系统.一、实验目的1.熟悉和掌握产生式系统的运行机制,2.掌握基于产生式系统的正向推理的基本方法。
3.简要比较两种实现方式的异同二、实验内容1. 能根据输入的动物特征判断是那种动物或给出相应的回答. (第一种方法)2. 如果根据初始输入的动物特征不能判断,则可以动态增加新事实(即动物特征)来判断属于那种动物. (第一种方法)3. 可根据提示选择所要识别的动物是否具有该特征.(第二种方法)三、算法设计编程语言与编程环境: C++,VC6.0下面用第一种方法简要说明算法的设计过程.首先建立了一个animal_identifier的类.该类包含的属性有:f和r. f指针指向事实集,r指向规则集.包括的关键成员函数有:Creat_Rules(),Creat_Fact(), reason().1 建立静态规则库.即建立产生式规则.本算法采用了产生中间事实的方法,这样做的优点是涉及到的规则少,容易理解,便于建立和使用规则.为了便于设计,我们把要识别的动物限于7种,这样所需要的产生式规则就比较少.本算法总共有16种规则,部分规则如下:R1:如果某动物有毛发则该动物是哺乳动物R2:如果某动物有奶则该动物是哺乳动物R3:如果某动物有羽毛则该动物是鸟R4:如果某动物会飞,且下蛋则该动物是鸟R5:如果某动物吃肉则该动物是食肉动物R6:如果某动物有锋利的牙齿,且有爪,且眼睛盯着前方则该动物是食肉动物R7:如果某动物是哺乳动物,且有蹄则该动物是有蹄类哺乳动物……………..R16: 如果反刍则哺乳动物上述规则库由类animal_identifierd的方法Creat_rules()静态实现.2 建立事实库建立事实库是由方法Creat_Fact()实现的.该方法要求用户动态输入事实,即要求用户先输入特征个数,然后输入动物的特征,如果未识别出来,用户可以增加输入,或者退出.3 正向推理过程.正向推理是从已知事实出发,通过规则库求得结论,或称数据驱动方式。
动物识别专家系统实验报告

题目:动物识别专家系统一.实验目的理解和掌握产生式只是表示方法,能够用选定的编程语言实现产生式系统的规则库。
二.实验内容(1)以动物识别系统的产生式规则为例。
(2)用选定的编程语言建造规则库和综合数据库,并能对它们进行增加、删除和修改操作。
三.实验原理动物识别专家系统是流行的专家系统实验模型,它用产生式r来表示知识,共15条r、可以识别七种动物,这些r既少又简单,可以改造他们,也可以加进新的r,还可以用来识别其他东西的新r来取代这些r。
动物识别15条r:r1:IF 动物有毛发THEN 该动物是哺乳动物r2: IF 动物能产奶THEN该单位是哺乳动物r3: IF 该动物有羽毛THEN该动物是鸟r4: IF动物会飞AND会下蛋THEN该动物是鸟r5: IF动物吃肉THEN该动物是肉食动物r6: IF动物有犬齿AND有爪AND眼盯前方THEN该动物是食肉动物r7: IF动物是哺乳动物AND有蹄THEN该动物是有蹄动物r8: IF动物是哺乳动物AND是反刍动物THEN该动物是有蹄动物r9: IF动物是哺乳动物AND是食肉动物AND是黄褐色的AND有暗斑点THEN该动物是豹r10:IF动物是黄褐色的AND 是哺乳动物AND 是食肉AND 有黑条纹THEN该动物是虎r11:IF动物有暗斑点AND 有长腿AND 有长脖子AND 是有蹄类THEN该动物是长颈鹿r12:IF动物有黑条纹AND 是有蹄类动物THEN该动物是斑马r13:IF动物有长腿AND 有长脖子AND 是黑色的AND 是鸟AND 不会飞THEN该动物是鸵鸟r14:IF动物是鸟AND 不会飞AND 会游泳AND 是黑色的THEN该动物是企鹅r15:IF动物是鸟AND 善飞THEN该动物是信天翁四.推理树部分推理树如下:五.代码程序是用java编写的规则对象代码:public class Rule {private ArrayList<Integer> premise = new ArrayList<Integer>();private int result;public void addPremise(int item) { premise.add(item);}public int size() {return premise.size();}public int getPremiseAt(int index) {return premise.get(index);}public void setResult(int result) {this.result = result;}public int getResult() {return result;}}规则库代码如下:public class RuleBase {private ArrayList<Rule> rules= new ArrayList<Rule>();public int size() {return rules.size();}public RuleBase() {init();}public void addRule(Rule rule) {rules.add(rule);}public Rule getRuleAt(int index) {return rules.get(index);}public void init() {Rule rule1 = new Rule();rule1.addPremise(0); rule1.setResult(20);rules.add(rule1);Rule rule2 = new Rule();rule2.addPremise(1); rule2.setResult(20);rules.add(rule2);Rule rule3 = new Rule();rule3.addPremise(2); rule3.setResult(21);rules.add(rule3);Rule rule4 = new Rule();rule4.addPremise(3); rule4.addPremise(13); rule4.setResult(21);rules.add(rule4);Rule rule5 = new Rule();rule5.addPremise(19); rule5.setResult(22);rules.add(rule5);Rule rule6 = new Rule();rule6.addPremise(4); rule6.addPremise(15); rule6.addPremise(12); rule6.setResult(22);rules.add(rule6);Rule rule7 = new Rule();rule7.addPremise(20); rule7.addPremise(9); rule7.setResult(23);rules.add(rule7);Rule rule8 = new Rule();rule8.addPremise(20); rule8.addPremise(18); rule8.setResult(23);rules.add(rule8);Rule rule9 = new Rule();rule9.addPremise(20); rule9.addPremise(22); rule9.addPremise(14); rule9.addPremise(11);rule9.setResult(24);rules.add(rule9);Rule rule10 = new Rule();rule10.addPremise(20); rule10.addPremise(22); rule10.addPremise(11); rule10.addPremise(5);rule10.setResult(25);rules.add(rule10);Rule rule11 = new Rule();rule11.addPremise(23); rule11.addPremise(6); rule11.addPremise(7); rule11.addPremise(14);rule11.setResult(30);Rule rule12 = new Rule();rule12.addPremise(23); rule12.addPremise(5); rule12.setResult(26);rules.add(rule12);Rule rule13 = new Rule();rule13.addPremise(21); rule13.addPremise(6); rule13.addPremise(17); rule13.addPremise(7);rule13.setResult(27);rules.add(rule13);Rule rule14 = new Rule();rule14.addPremise(21); rule14.addPremise(10); rule14.addPremise(17); rule14.addPremise(8);rule14.setResult(28);rules.add(rule14);Rule rule15 = new Rule();rule15.addPremise(21); rule15.addPremise(16); rule15.setResult(29);}}综合数据库代码如下:public class Database {ArrayList<Integer> db = new ArrayList<Integer>();public void addFact(int item) {db.add(item);}public boolean contains(int item) {return db.contains(item);}}控制系统代码如下:public class Machine {public static String inference(Database db) { RuleBase ruleBase = new RuleBase();int result = 0;for (int i = 0; i < ruleBase.size(); i++) { int size = ruleBase.getRuleAt(i).size();boolean flag = true;for (int j = 0; j < size; j++) {if(!db.contains(ruleBase.getRuleAt(i).getPremiseAt(j))) { flag = false;break;}}if (flag) {int fact = ruleBase.getRuleAt(i).getResult();db.addFact(fact);if (fact >= 24) {result = fact;break;}}}switch (result) {case 24:return"金钱豹";case 25:return"老虎";case 26:return"斑马";case 27:return"鸵鸟";case 28:return"企鹅";case 29:return"信天翁";case 30:return"长颈鹿";default:return"不存在";}}}六.截图七.感想通过这次课程设计我对专业课的学习有了更加深刻的认识,让我知道了学无止境的道理。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验7:产生式动物识别系统一、实验目的理解和掌握产生式系统的推理方法,能够用选定的编程语言实现推理机。
二、编程环境本文主要编译环境是Windows 10 Visual Studio 2015三、问题描述设计一个用于动物识别的产生式系统,该系统通过规则库识别老虎、金钱豹、斑马、长颈鹿、企鹅、信天翁、鸵鸟7种动物。
四、解决方案1.规则库:用于描述相应领域内知识的产生式集合称为规则库。
本规则库包括以下规则R1:if 动物有毛发then 动物是哺乳动物R2:if 动物有奶then 动物是哺乳动物R3:if 动物有羽毛then 动物是鸟R4:if 动物会飞and 会生蛋 then 动物是鸟R5:if 动物吃肉 then 动物是食肉动物R6:if 动物有犀利牙齿 and 有爪 and 眼向前方then 动物是食肉动物R7:if 动物是哺乳动物and有蹄then动物是有蹄类动物R8:if 动物是哺乳动物and反刍then动物是有蹄类动物R9:if 动物是哺乳动物and是食肉动物and有黄褐色and 有暗斑点 then 动物是豹R10:if 动物是哺乳动物 and是食肉动物and有黄褐色 and 有黑色条纹then 动物是虎R11:if动物是有蹄类动物and 有长脖子and有长腿and有暗斑点 then 动物是长颈鹿R12:if 动物是有蹄类动物 and有黑色条纹 then 动物是斑马R13:if 动物是鸟and不会飞 and有长脖子and有长腿 and有黑白二色then 动物是鸵鸟R14:if 动物是鸟 and不会飞 and会游泳 and有黑白二色then 动物是企鹅R15:if 动物是鸟 and善飞 then 动物是信天翁2.综合数据库char *ans0 = "抱歉,我也不知道这是什么动物";char *ans1 = "这个动物是金钱豹";char *ans2 = "这个动物是老虎";char *ans3 = "这个动物是长颈鹿";char *ans4 = "这个动物有斑马";char *ans5 = "这个动物是企鹅";char *ans6 = "这个动物是鸵鸟";char *ans7 = "这个动物是信天翁";3.推理机(1) 初始化综合数据库,即把欲解决问题的已知事实送入综合数据库中;(2) 检查规则库中是否有未使用过的规则,若无转 (7);(3) 检查规则库的未使用规则中是否有其前提可与综合数据库中已知事实相匹配的规则,若有,形成当前可用规则集;否则转(6);(4) 按照冲突消解策略,从当前可用规则集中选择一个规则执行,并对该规则作上标记。
把执行该规则后所得到的结论作为新的事实放入综合数据库;如果该规则的结论是一些操作,则执行这些操作;(5) 检查综合数据库中是否包含了该问题的解,若已包含,说明解已求出,问题求解过程结束;否则,转(2);(6) 当规则库中还有未使用规则,但均不能与综合数据库中的已有事实相匹配时,要求用户进一步提供关于该问题的已知事实,若能提供,则转(2);否则,执行下一步;(7) 若知识库中不再有未使用规则,也说明该问题无解,终止问题求解过程。
输出“抱歉,没有相符合的动物”,程序退出。
4.流程图五、源代码#include<stdio.h>int main(){char a1;char flag0 ;//是否识别出动物的标志char *str0 = "本系统可识别七种动物,请用Y和N表示是和否\n";char *str1 = "这个动物有毛发吗?";char *str2 = "这个动物有奶吗?";char *str3 = "这个动物有羽毛吗?";char *str4 = "这个动物会下蛋吗?";char *str5 = "这个动物吃肉吗?";char *str6 = "这个动物有犬齿有爪吗?";char *str7 = "这个动物有蹄吗?";char *str8 = "这个动物是嚼反刍动物吗?";char *str9 = "这个动物身上是黄褐色而且有暗斑点吗?";char *str10 = "这个动物身上是黄褐色而且有黑色条纹?";char *str11 = "这个动物长腿长脖子且身上有暗斑点吗?";char *str12 = "这个动物身上有黑色条纹吗?";char *str13 = "这个动物长腿长脖子?";char *str14 = "这个动物会游泳并有黑白两色\t";char *str15 = "这个动物擅飞";char *str16 = "这个动物会不会飞";char *ans0 = "抱歉,我也不知道这是什么动物";char *ans1 = "这个动物是金钱豹";char *ans2 = "这个动物是老虎";char *ans3 = "这个动物是长颈鹿";char *ans4 = "这个动物有斑马";char *ans5 = "这个动物是企鹅";char *ans6 = "这个动物是鸵鸟";char *ans7 = "这个动物是信天翁";char *a[4] = { str1,str2,str3,str4 }; //判断哺乳动物和鸟类char *bl[4] = { str5,str6,str7,str8 }; //bL判断是食草动物还是食肉动物char *b2[] = { str16 }; //判断鸟类会不会飞/****************判断具体是那种动物*************************/ char *cl[] = { str9,str10 }; //CL判断金钱豹和老虎char *c2[] = { str11,str12 }; //判断长颈鹿和斑马char *c3[] = { str13,str14 }; //判断企鹅和鸵鸟char *c4[] = { str15 }; //判断是不是信天翁puts(str0);for (int k = 0; k < 4; k++) {puts(a[k]);scanf_s("%c", &a1, 1);getchar();if (a1 == 'Y')//区分哺乳动物和鸟类{if (k == 1) {printf_s("初步判定是哺乳动物\n"); flag0 = 0; break;}else if (k > 2){printf_s("初步判定是鸟类\n"); flag0 = 1; break;}}}if (flag0 == 0) { //判定是哺乳动物for (int k = 0; k < 4; k++) {puts(bl[k]);scanf_s("%c", &a1, 1);getchar();if (a1 == 'Y')//区分食肉动物和食草类动物{if (k == 1) {printf_s("初步判定是食肉动物\n");for (int k = 0; k < 2; k++) {puts(cl[k]);scanf_s("%c", &a1, 1);getchar();if (a1 == 'Y') //区分金钱豹和老虎{printf_s("这是是金钱豹"); break;}else if (a1 == 'N'&&k == 1) {printf_s("这是老虎"); break;}}break;}else if (k > 2){printf_s("初步判定是食草类动物\n");for (int k = 0; k < 2; k++) {puts(c2[k]);scanf_s("%c", &a1, 1);getchar();if (a1 == 'Y') //确定是长颈鹿还是斑马{printf_s("这是长颈鹿"); break;}else if (a1 == 'N'&&k == 1) {printf_s("这是斑马"); break;}}break;}}}}else if (flag0 == 1) {//判定是鸟类puts(b2[0]);scanf_s("%c", &a1, 1);getchar();if (a1 == 'Y')//判断鸟类会不会飞{puts(c4[0]);scanf_s("%c", &a1, 1);getchar();if (a1 == 'Y') { //判断是不是信天翁printf_s("这是信天翁");}else if(a1 == 'N') {puts(ans0);}}else if (a1 == 'N') {for (int k = 0; k < 2; k++) {puts(c3[k]);scanf_s("%c", &a1, 1);getchar();if (a1 == 'Y') //确定是企鹅和鸵鸟{printf_s("这是鸵鸟"); break;}else if (a1 == 'N'&&k == 1) {printf_s("这是企鹅"); break;}}}}getchar();return 0;}六、实验结果相关截图截图一截图二七、心得体会通过这次实验,我学会了如何用产生式系统的推理方法,并用c语言实现了动物识别的产生式系统,该系统通过规则库可以添加规则,通过数据库来更新数据,通过推理机给出最终的结果,通过编程体会到学习的乐趣,对逻辑的培养也有很大的帮助,希望今后更加努力,写出可视化的,更高效的程序。