动物识别系统实验报告

合集下载

贝类方位辨别实验报告(3篇)

贝类方位辨别实验报告(3篇)

第1篇一、实验目的1. 了解贝类的生物特性,特别是其方位辨别能力。

2. 探究不同环境因素对贝类方位辨别能力的影响。

3. 通过实验验证贝类方位辨别能力的科学原理。

二、实验背景贝类是一类生活在水中的无脊椎动物,它们在自然界中扮演着重要的角色。

贝类具有多种生物学特性,其中方位辨别能力是其中之一。

方位辨别能力是指贝类在环境中能够感知并判断自身位置的能力。

本研究旨在通过实验验证贝类的方位辨别能力,并探讨影响其方位辨别能力的因素。

三、实验材料与方法1. 实验材料:牡蛎、扇贝、鲍鱼等贝类,实验箱、坐标纸、光源、温度计、湿度计等。

2. 实验方法:(1)分组:将贝类分为实验组和对照组,实验组为牡蛎、扇贝、鲍鱼,对照组为其他贝类。

(2)实验设置:在实验箱中设置不同环境条件,如光照、温度、湿度等。

(3)实验过程:将贝类置于实验箱中,观察其方位辨别能力。

记录贝类在实验过程中的行为表现,如游动方向、停留位置等。

(4)数据分析:对实验数据进行分析,比较实验组和对照组的方位辨别能力差异,探讨环境因素对贝类方位辨别能力的影响。

四、实验结果与分析1. 贝类方位辨别能力差异实验结果显示,实验组贝类在实验过程中表现出较强的方位辨别能力,而对照组贝类的方位辨别能力相对较弱。

这说明不同种类的贝类在方位辨别能力上存在差异。

2. 环境因素对贝类方位辨别能力的影响(1)光照:在光照条件下,实验组贝类表现出较强的方位辨别能力,而对照组贝类的方位辨别能力较弱。

这表明光照对贝类方位辨别能力有显著影响。

(2)温度:在适宜的温度范围内,实验组贝类的方位辨别能力较强,而温度过高或过低时,贝类的方位辨别能力有所下降。

这说明温度对贝类方位辨别能力有显著影响。

(3)湿度:在适宜的湿度条件下,实验组贝类的方位辨别能力较强,而湿度过高或过低时,贝类的方位辨别能力有所下降。

这说明湿度对贝类方位辨别能力有显著影响。

五、实验结论1. 贝类具有方位辨别能力,且不同种类的贝类在方位辨别能力上存在差异。

简单动物识别系统的知识表示实验报告

简单动物识别系统的知识表示实验报告

简单动物识别系统的知识表示实验报告一、实验目的:1、理解和掌握产生式知识表示方法。

2、能够用选定的编程语言实现产生式系统的规则库。

二、实验内容和要求:1、以动物识别系统的产生式规则为例。

2、用选定的编程语言建造规则库和综合数据库,并能对它们进行增加、删除和修改操作。

三、实验步骤:1、确定需要识别的动物及其属性:本次实验的简单动物识别系统总共能识别7种动物,即:老虎、金钱豹、斑马、长颈鹿、企鹅、鸵鸟、信天翁。

2、建立识别七种动物识别系统的规则:由于实验要求系统的规则库和综合数据库能够进行增加、删除和修改操作,因此可以采取逐步添加条件,压缩范围的方法进行识别,即:先跟据一些动物的共性进行大致分类,然后在添加约束条件,将范围缩小,直到能够识别出每一种不同的动物为止。

这样,我们在需要添加识别其他动物的功能时,只需要添加那些动物的个性方面的信息即可,这样也可以简化系统的结构和内容。

识别老虎、金钱豹、斑马、长颈鹿、企鹅、鸵鸟、信天翁这7种动物的简单动物识别系统规则一共可以写成以下15条:Rule1:IF 该动物有毛发 THEN 该动物是哺乳动物Rule2:IF 该动物有奶 THEN 该动物是哺乳动物Rule3:IF 该动物有羽毛 THEN 该动物是鸟Rule4:IF 该动物会飞 AND 会下蛋 THEN该动物是鸟Rule5:IF 该动物吃肉 THEN 该动物是肉食动物Rule6:IF 该动物有犬齿 AND 有爪 AND 眼盯前方 THEN该动物是肉食动物Rule7:IF 该动物是哺乳动物 AND 有蹄 THEN 该动物是有蹄类动物Rule8:IF 该动物是哺乳动物 AND 是嚼反刍动物 THEN 该动物是有蹄类动物Rule9:IF 该动物是哺乳动物 AND 是肉食动物 AND 是黄褐色AND 身上有暗斑点THEN该动物是金钱豹Rule10:IF 该动物是哺乳动物 AND 是肉食动物 AND 是黄褐色AND 身上有黑色条纹 THEN 该动物是老虎Rule11:IF 该动物是有蹄类动物 AND 有长脖子 AND 有长腿 AND 身上有暗斑点 THEN 该动物是有长颈鹿Rule12:IF 该动物是有蹄类动物 AND 身上有黑色条纹 THEN 该动物是斑马Rule13:IF 该动物是鸟 AND 有长脖子 AND 有长腿 AND不会飞 THEN 该动物是鸵鸟Rule14:IF 该动物是鸟 AND 会游泳 AND 有黑白二色 AND不会飞THEN 该动物是企鹅Rule15:IF 该动物是鸟 AND 善飞 THEN 该动物是信天翁三、选定编程语言并确定综合数据库和规则库结构:(1)选用C语言作为编程语言(2)综合数据库的建立:用C程序写出综合数据库的代码:char*str{"有毛发","有奶","有羽毛","有犬齿","有暗斑点","有黑色条纹","有蹄","有长脖子","有长腿","有爪","有黑白两色","是黄褐色"," 会游泳","会下蛋","会飞","善飞","不会飞","眼盯前方","吃肉","哺乳动物","嚼反刍动物","肉食动物","有蹄类动物","鸟","老虎","金钱豹","斑马","长颈鹿","企鹅","鸵鸟","信天翁",0}(3)规则库的建立:为了简化数据结构,将综合数据库中的事实全部用序号来表示,共有31个事实,编号依次为1到31。

动物识别系统实验报告

动物识别系统实验报告
{
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;

动物识别系统实验报告

动物识别系统实验报告
if (this.CheckBoxList1.Items[j].Selected == true) {
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{

马品种的识别实验报告

马品种的识别实验报告

马品种的识别实验报告实验目的:本实验旨在通过观察和分析马的外貌特征以及主要品种的区别,实现对马品种的准确识别。

实验步骤:1.收集马的样本照片和相关资料;2.选取具有代表性和典型性的马的特征进行观察和记录;3.根据马的颜色、体型、体毛等特征,将样本照片进行分类;4.对每个品种的马的特征进行比较和分析;5.结果记录和总结。

实验结果:经过观察和分析,我们发现马的品种可以根据其颜色、体型和体毛等特征进行准确识别。

主要的马品种包括汗血宝马、花色马、游戏马和体型较小的迷你马等。

1.汗血宝马:这是一种体型较大的马,以其优雅的身姿和灵活的动作而闻名。

它们的体毛通常为纯黑色或纯白色,四肢粗壮,背脊平直。

其特点是颈部较长而修长,眼睛大而明亮。

2.花色马:花色马的外观特征非常个性化和多样化。

它们的体毛可以呈现出各种颜色和斑纹,如黑白相间、棕白相间等。

与其他品种相比,花色马的体型较小,腿部相对细长,尾巴一般呈长而浓密的造型。

3.游戏马:游戏马以其运动和竞技能力而著名。

它们的体型中等,四肢修长而有力,背脊呈弧形。

游戏马的体毛颜色较为丰富,主要有黑色、棕色和灰色等。

与其他品种相比,游戏马的颈部较短而粗壮,背部有明显的肌肉线条。

4.迷你马:迷你马是一种体型较小的马,通常被作为马术比赛中的宠物使用。

它们的体毛颜色多样,包括黑色、棕色、白色等。

迷你马的眼睛大而圆,腿部短且修长,尾巴细长而浓密。

实验结论:通过对马的外貌特征的观察和比较,我们可以准确识别不同品种的马。

汗血宝马、花色马、游戏马和迷你马在体型、颜色、体毛等方面存在明显差异,这些特征能够帮助我们进行马品种的准确识别。

本实验对马的识别和分类有重要意义,对于马术比赛、畜牧业和动物保护等领域具有实际应用价值。

我们深入研究马的外貌特征和品种分类的研究,可以更好地了解和保护这一美丽的动物资源。

动物疫病识别及病原观察实验报告

动物疫病识别及病原观察实验报告

动物疫病识别及病原观察实验报告
一、实验目的
本实验旨在通过对动物疫病的识别及病原观察,掌握动物疫病的基本知识和诊断方法,提高动物疫病的防治能力。

二、实验原理
动物疫病是指能够引起动物生理、生化、免疫等方面的异常变化,导致动物生产能力下降、死亡或者对人类健康造成威胁的疾病。

动物疫病的病原体主要包括细菌、病毒、真菌、寄生虫等。

诊断动物疫病的方法主要有临床诊断、病理诊断、实验室诊断等。

三、实验步骤
1.观察动物疾病症状
在实验室中,我们观察了几只小白鼠的症状,发现它们出现了呼吸急促、体温升高、食欲不振等症状,初步判断可能是感染了某种病原体。

2.采集样本
为了进一步确定病原体,我们需要采集样本进行实验室检测。

我们选择了小白鼠的血液和粪便样本进行检测。

3.实验室检测
我们将采集到的血液和粪便样本分别进行了细菌培养和病毒检测。

经过培养和检测,我们发现血液样本中存在一种名为“链球菌”的细菌,而粪便样本中则检测出了一种名为“肠病毒”的病毒。

4.诊断疾病
根据实验室检测结果,我们可以初步诊断出小白鼠感染了链球菌和肠病毒,导致了其出现的症状。

四、实验结果
通过本次实验,我们成功地诊断出了小白鼠感染了链球菌和肠病毒,导致了其出现的症状。

同时,我们也掌握了动物疫病的基本知识和诊断方法,提高了动物疫病的防治能力。

五、实验结论
动物疫病是一种严重的疾病,对于动物生产和人类健康都有很大的威胁。

通过本次实验,我们深入了解了动物疫病的诊断方法和病原体,为今后的动物疫病防治工作提供了重要的参考和依据。

动物识别专家系统实验报告

动物识别专家系统实验报告

题目:动物识别专家系统一.实验目的理解和掌握产生式只是表示方法,能够用选定的编程语言实现产生式系统的规则库。

二.实验内容(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"不存在";}}}六.截图七.感想通过这次课程设计我对专业课的学习有了更加深刻的认识,让我知道了学无止境的道理。

动物识别系统实验报告

动物识别系统实验报告

暨南大学人工智能实验报告题目:基于web的动物识别系统院系:信科院计算机系专业:计算机技术学号:27学生姓名:ming fang成绩:日期:2010年12月10日一、目的与要求1.掌握人工智能的知识表示技术,能用产生式表示法表示知识,并实现一个用于识别的专家系统。

2.推理策略采用正向推理和反向推理两种。

二、主要内容1.学习人工智能的知识表示技术,关键掌握产生式知识表示的具体应用方法。

2.实现的动物识别系统的主要功能如下:2.1系统能通过正向、反向推理得到正确的动物识别结果。

2.2系统能动态地添加规则、能显示推理过程。

三.实验原理产生式表示:产生式表示是知识表示的一种。

这种方法是建立在因果关系的基础上的,可很容易的描述事实、规则及其不确定性度量。

1.事实的表示:事实可看成是断言一个语言变量的值或是多个语言变量间的关系的陈述句,语言变量的值或语言变量间的关系可以是一个词。

不一定是数字。

一般使用三元组(对象,属性,值)或(关系,对象1,对象2)来表示事实,其中对象就是语言变量,若考虑不确定性就成了四元组表示(增加可信度)。

这种表示的机器内部实现就是一个表。

如事实“小王年龄是22岁”,便写成(Lee,age,22)事实“小李、小张是朋友”,可写成(friend,Lee,Zhang)2.规则的表示:规则用于表示事物间的因果关系,以IF condition THEN action 的单一形式来描述,将规则作为知识的单位。

其中的condition 部分称为条件式前件或模式,而action部分称作动作、后件或结论。

产生式一般形式为:前件后件。

前件和后件也可以是有“与”、“或”、“非”等逻辑运算符的组合的表达式。

条件部分常是一些事实的合取或析取,而结论常是某一事实B。

如果不考虑不确定性,需另附可信度度量值。

产生式过则的含义是:如果前件满足,则可得到后件的结论或者执行后件的相应动作,即后件由前件来触发。

一个产生式生成的结论可以作为另一个产生式的前提或语言变量使用,进一步可构成产生式系统。

动物识别系统

动物识别系统

学生实验报告实验课名称:人工智能实验项目名称:产生式系统实验专业名称:计算机科学与技术班级: 2012240201学号: 12学生姓名:雷彬教师姓名:陈亮亮2014年12 月10 日实验日期:2012 年12 月10 日实验室名称:明远2202首先给定初始事实,将初始事实放入动态数组中,并用初始事实与15条规则进行匹配,如果规则匹配成功,将规则的后件存入数组中,再用数组中所有的元素与规则进行匹配,满足即加入数组,直到匹配出动物。

如果给定初始事实能推出多种动物,按照数组中条件的先后顺序,顺序循环匹配规则,先匹配出哪种动物就显示该动物。

五.源程序:// MFC_AnimalDlg.cpp : 实现文件#include"stdafx.h"#include"MFC_Animal.h"#include"MFC_AnimalDlg.h"#include"afxdialogex.h"#ifdef_DEBUG#define new DEBUG_NEW#endif// 用于应用程序“关于”菜单项的 CAboutDlg 对话框class CAboutDlg : public CDialogEx{public:CAboutDlg();// 对话框数据enum { IDD = IDD_ABOUTBOX };protected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持// 实现protected:DECLARE_MESSAGE_MAP()};CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD){}void CAboutDlg::DoDataExchange(CDataExchange* pDX){CDialogEx::DoDataExchange(pDX);}BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)END_MESSAGE_MAP()// CMFC_AnimalDlg 对话框CMFC_AnimalDlg::CMFC_AnimalDlg(CWnd* pParent/*=NULL*/) : CDialogEx(CMFC_AnimalDlg::IDD, pParent){m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);}void CMFC_AnimalDlg::DoDataExchange(CDataExchange* pDX){CDialogEx::DoDataExchange(pDX);DDX_Control(pDX, IDC_COMBO1, m_point1);DDX_Control(pDX, IDC_COMBO4, m_point2);DDX_Control(pDX, IDC_COMBO5, m_point3);DDX_Control(pDX, IDC_COMBO6, m_point4);DDX_Control(pDX, IDC_COMBO7, m_point5);DDX_Control(pDX, IDC_COMBO8, m_point6);DDX_Control(pDX, IDC_COMBO9, m_point7);}BEGIN_MESSAGE_MAP(CMFC_AnimalDlg, CDialogEx)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_BUTTON2, &CMFC_AnimalDlg::OnClickedButton2) ON_BN_CLICKED(IDC_BUTTON1, &CMFC_AnimalDlg::OnClickedButton1) END_MESSAGE_MAP()// CMFC_AnimalDlg 消息处理程序BOOL CMFC_AnimalDlg::OnInitDialog(){CDialogEx::OnInitDialog();// 将“关于...”菜单项添加到系统菜单中。

牛骨骼识别实验报告

牛骨骼识别实验报告

一、实验目的1. 熟悉牛的骨骼系统组成及其在动物体内的功能。

2. 掌握牛骨骼的基本结构和形态特点。

3. 提高观察和识别骨骼的能力。

二、实验时间2023年X月X日三、实验地点实验室四、实验材料1. 牛骨骼标本一套(包括头骨、躯干骨、四肢骨等)2. 解剖刀、解剖剪、解剖镊等解剖工具3. 实验记录本、铅笔、绘图工具五、实验步骤1. 观察头骨(1)观察牛头骨的整体形状、大小和结构。

(2)识别头骨的主要部分,如额骨、顶骨、颞骨、鼻骨、上颌骨、下颌骨等。

(3)观察头骨的连接方式,如颅骨之间的缝、颞下颌关节等。

2. 观察躯干骨(1)观察牛脊柱的整体形状、大小和结构。

(2)识别脊柱的主要部分,如颈椎、胸椎、腰椎、荐椎、尾椎等。

(3)观察脊柱的连接方式,如椎骨之间的关节、椎间盘等。

(4)识别胸廓的组成部分,如肋骨、胸骨等。

3. 观察四肢骨(1)观察牛四肢骨的整体形状、大小和结构。

(2)识别四肢骨的主要部分,如肱骨、桡骨、尺骨、股骨、胫骨、腓骨、跗骨、跖骨、趾骨等。

(3)观察四肢骨的连接方式,如关节、骨间连结等。

4. 绘制骨骼图根据观察到的骨骼结构和形态,绘制牛骨骼的骨骼图,标注各部分名称。

六、实验结果与分析1. 头骨牛头骨呈长方形,主要由额骨、顶骨、颞骨、鼻骨、上颌骨、下颌骨等组成。

颅骨之间的缝有额缝、顶缝、颞缝等,颞下颌关节连接上颌骨和下颌骨。

2. 躯干骨牛脊柱呈"S"形,由颈椎、胸椎、腰椎、荐椎、尾椎等组成。

椎骨之间有椎间盘连接,胸廓由肋骨和胸骨组成,保护心脏和肺部。

3. 四肢骨牛四肢骨包括上肢骨和下肢骨。

上肢骨由肱骨、桡骨、尺骨组成,下肢骨由股骨、胫骨、腓骨、跗骨、跖骨、趾骨组成。

四肢骨之间有多个关节连接,如肩关节、肘关节、髋关节、膝关节等。

七、实验总结通过本次实验,我们对牛的骨骼系统有了更深入的了解,掌握了牛骨骼的基本结构和形态特点。

在观察过程中,我们学会了如何识别骨骼,提高了观察和识别能力。

动物识别系统实验报告

动物识别系统实验报告

人工智能实验报告二班级:XXXX 姓名:XXXX 学号:XXXXX 一.实验目的1. 理解并掌握基于规则系统的表示与推理。

2. 学会编写小型的产生式系统,理解正向推理和反向推理的过3. 程以及两者的差别。

4. 学会设计简单的人机交互界面。

二.实验预习内容及实验环境:1. 了解动物识别系统问题;2. 产生式系统的组成部分,正向推理,逆向推理的算法和产生式系统的类型。

三、实验内容和步骤:1.内容:结合第五章内容,以动物识别系统(或货物袋装系统)为例,实现基于规则的系统构造实验。

2.要求:1>结果显示要求(1)有若干选择动物特征的选择列表;(2)表现判断动物时,使用了哪些规则;(3)表现数据库的变化;(正向推理中表现每使用一次规则后,产生新事实。

反向推理中表现新的目标事实有哪些需要证明,哪些已经得到证实);(4)显示规则的调用次序;(5)显示最后的结果,包含动物能识别出来和动物不能识别出来两种情况。

(6)至少检查两个例子实现正向推理和反向推理的区别;老虎的例子如上所示,以下为金钱豹的例子:正向推理:反向推理:2>指出综合数据库和规则库分别使用哪些函数实现的?综合数据库和规则库均采用数组完成。

其中的综合数据库为一个string类型的数组,内容为事实的名称字符串,下标则为该事实的序号。

数组长度为33,表示共有33个事实(最后7个为动物名称)。

代码如下:string facts[factnum]={"有爪","有犬齿","有奶","有毛发","目视前方","吃肉","有蹄","有羽毛","会飞","生蛋","不会飞","黑白色","会游泳","善飞","不怕风浪","长腿","长脖子","有暗斑点","白色","黑色斑点","黑色条纹","黄褐色","食肉动物","鸟","哺乳动物","有蹄动物","老虎","金钱豹","长颈鹿","斑马","鸵鸟","企鹅","海燕"};规则库为一个结构体数组。

人工智能动物识别系统JAVA

人工智能动物识别系统JAVA
实验报告课程名称人工智能与专家系统实验名称动物分类专家系统设计系别电子信息科学学院专业班级指导教师学号姓名实验日期201641实验成绩一实验目的1加深理解专家系统的结构原理与实际应用
实验报告
课程名称
系别电子信息科学学院专业班级指导教师
学号____________姓名____________实验日期2016.4.1实验成绩___________
}
jp.add(lblImage);lblImage.setBounds(630,30,300,400);this.add(jp);
this.setTitle("动物识别系统");this.setBounds(100,100,1000,500);this.setVisible(true);
}
publicvoidactionPerformed(ActionEvente){
/用数组创复选框
{newCheckbox("有毛发"),newCheckbox("有奶"),newCheckbox("有羽毛"),
newCheckbox("会飞,且生蛋"),newCheckbox("吃肉"),
newCheckbox("有犬齿,且有爪,且眼盯前方"),newCheckbox("有蹄"),
publicclassRZSextendsJFrameimplementsActionListener{privatestaticJPaneljp=newJPanel();
privateJLabeljl1=newJLabel("请选择条件:");sta ticCheckbox[]Checkbox=

动物器官鉴别实验报告

动物器官鉴别实验报告

一、实验目的通过本次实验,旨在掌握动物器官的基本形态和结构,提高对动物内脏器官的识别能力,为后续实验研究奠定基础。

二、实验材料与器材1. 实验动物:小白鼠1只2. 器材:解剖剪、解剖刀、镊子、解剖盘、解剖显微镜、生理盐水、75%酒精、棉球、解剖针、解剖图谱三、实验步骤1. 准备工作(1)将小白鼠固定在解剖盘上,用解剖剪剪开腹部皮肤,暴露腹部器官。

(2)用生理盐水清洁器官表面,用75%酒精消毒。

2. 器官识别(1)心脏- 观察心脏的形状、大小和颜色。

- 观察心脏的四个腔室:左心房、左心室、右心房、右心室。

- 观察心脏的瓣膜:二尖瓣、三尖瓣、主动脉瓣、肺动脉瓣。

(2)肝脏- 观察肝脏的形状、大小和颜色。

- 观察肝脏的左右叶、前后叶。

- 观察肝脏的血管:门静脉、肝静脉、肝动脉。

(3)脾脏- 观察脾脏的形状、大小和颜色。

- 观察脾脏的中央动脉和脾窦。

(4)肺脏- 观察肺脏的形状、大小和颜色。

- 观察肺脏的叶间裂和肺叶。

- 观察肺脏的支气管和肺血管。

(5)肾脏- 观察肾脏的形状、大小和颜色。

- 观察肾脏的皮质、髓质和肾盂。

- 观察肾脏的血管:肾动脉、肾静脉。

(6)胃- 观察胃的形状、大小和颜色。

- 观察胃的胃底、胃体、胃窦。

- 观察胃的血管:胃左动脉、胃右动脉、胃网膜动脉。

(7)小肠- 观察小肠的形状、大小和颜色。

- 观察小肠的绒毛和肠腺。

- 观察小肠的血管:肠系膜上动脉、肠系膜上静脉。

(8)大肠- 观察大肠的形状、大小和颜色。

- 观察大肠的盲肠、结肠、直肠。

- 观察大肠的血管:肠系膜下动脉、肠系膜下静脉。

3. 器官对比(1)将实验动物的器官与解剖图谱进行对比,确认器官名称和位置。

(2)对比不同动物的器官,了解器官的异同。

四、实验结果与分析1. 实验动物心脏为两房两室结构,四个瓣膜分别对应四个心腔。

2. 实验动物肝脏为左右叶,血管丰富,具有代谢和解毒功能。

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. 实现一个基于人工智能的动物识别系统,提高动物识别的准确率和效率。

二、实验环境1. 操作系统:Windows 102. 编程语言:Python3.63. 开发工具:PyCharm4. 依赖库:TensorFlow、OpenCV、NumPy、Pandas三、实验内容1. 数据收集与预处理实验使用的数据集为公开的动物图像数据集,包含多种动物图片,共3000张。

数据预处理步骤如下:(1)将原始图像转换为统一尺寸(如224x224像素);(2)对图像进行灰度化处理,减少计算量;(3)对图像进行归一化处理,使图像像素值在0到1之间;(4)将图像数据转换为NumPy数组,方便后续处理。

2. 模型构建与训练实验采用卷积神经网络(CNN)进行图像识别。

模型构建步骤如下:(1)定义卷积层:使用卷积层提取图像特征,卷积核大小为3x3,步长为1,激活函数为ReLU;(2)定义池化层:使用最大池化层降低特征维度,池化窗口大小为2x2;(3)定义全连接层:将卷积层和池化层提取的特征进行融合,输入层大小为64x64x32,输出层大小为10(代表10种动物类别);(4)定义损失函数和优化器:使用交叉熵损失函数和Adam优化器进行模型训练。

训练模型时,采用以下参数:(1)批处理大小:32;(2)学习率:0.001;(3)训练轮数:100。

3. 模型评估与测试训练完成后,使用测试集对模型进行评估。

测试集包含1000张图像,模型准确率为80.2%。

4. 系统实现与演示根据训练好的模型,实现一个基于人工智能的动物识别系统。

系统功能如下:(1)用户上传动物图像;(2)系统对上传的图像进行预处理;(3)使用训练好的模型对图像进行识别;(4)系统输出识别结果。

四、实验结果与分析1. 模型准确率:80.2%,说明模型在动物识别任务中具有一定的识别能力。

实验一:产生式系统-动物识别系统

实验一:产生式系统-动物识别系统

《人工智能导论》实验报告实验一:产生式系统——动物识别系统一、实验目的1、掌握知识的产生式表示法2、掌握用程序设计语言编制智能程序的方法二、实验内容1、所选编程语言:C语言;2.拟订的规则:(1)若某动物有奶,则它是哺乳动物。

(2)若某动物有毛发,则它是哺乳动物。

(3)若某动物有羽毛,则它是鸟。

(4)若某动物会飞且生蛋,则它是鸟。

(5)若某动物是哺乳动物且有爪且有犬齿且目盯前方,则它是食肉动物。

(6)若某动物是哺乳动物且吃肉,则它是食肉动物。

(7)若某动物是哺乳动物且有蹄,则它是有蹄动物。

(8)若某动物是哺乳动物且反刍食物,则它是有蹄动物。

(9)若某动物是食肉动物且黄褐色且有黑色条纹,则它是老虎。

(10)若某动物是食肉动物且黄褐色且有黑色斑点,则它是金钱豹。

(11)若某动物是有蹄动物且长腿且长脖子且黄褐色且有暗斑点,则它是长颈鹿。

(12)若某动物是有蹄动物且白色且有黑色条纹,则它是斑马。

(13)若某动物是鸟且不会飞且长腿且长脖子且黑白色,则它是驼鸟。

(14)若某动物是鸟且不会飞且会游泳且黑白色,则它是企鹅。

(15)若某动物是鸟且善飞,则它是海燕。

2、设计思路:用户界面:采用问答形式;知识库(规则库):存放产生式规则,推理时用到的一般知识和领域知识,比如动物的特征,动物的分类标准,从哺乳动物、食肉动物来分,再具体地添加一些附加特征得到具体动物;建立知识库的同时也建立了事实库。

事实库是一个动态链表,一个事实是链表的一个结点。

知识库通过事实号与事实库发生联系。

数据库:用来存放用户回答的问题,存放初始状态,中间推理结果,最终结果;推理机:采用正向推理,推理机是动物识别的逻辑控制器,它控制、协调系统的推理,并利用知识库中的规则对综合数据库中的数据进行逻辑操作。

推理机担负两项基本任务:一是检查已有的事实和规则,并在可能的情况下增加新的事实;二是决定推理的方式和推理顺序。

将推理机制同规则对象封装在一起,事实对象记录了当前的状态,规则对象首先拿出前提条件的断言(只有这些前提都有符合时才会做这条规则的结论),询问事实对象集,如事实对象集不知道,则询问用户,如所有前提条件都被证实为真则结论为真,否则系统不知道结论真假。

动物识别系统实验报告人工智能原理及其应用

动物识别系统实验报告人工智能原理及其应用

实验目的及要求:实验目的:1.熟悉产生式的特点,基本结构和设计思想2.掌握基于规则推理的基本过程和方法(在实验中采用正向推理过程)3.学会用高级程序设计语言开发基于规则的动物识别系统实验要求: 1.根据动物识别系统的规则建立合理的数据结构或数据库来表示知识。

2.利用所选开发语言来建立推理过程。

(该程序能正向推理识别动物过程)3.利用控制台或者图形界面给出合理的交互接口,实现基本演示功能。

4.提交实验报告和源程序,总结实验结论和经验教训。

实验原理:1.基于规则产生式系统结构:基于规则的产生式系统一般由规则库(知识库)、综合数据库和推理引擎(推理机)三部分组成,规则库中它的基本组成框架如下图1 所示。

知识库由谓词演算事实和有关讨论主题的规则构成,综合库又称为上下文,用来暂时存储推理过程中的结论和数据。

推理机是用规则进行推理的过程和行为,。

知识采集系统是领域专家把相关领域的知识表示成一定的形式,并输入到知识库中。

解释系统通过用户输入的条件来分析被系统执行的推理结构,并将专家知识以易理解的方式并把知识解释给用户。

知识库综合库图1规则产生式系统的基本结构2. 简单动物识别产生式系统结构:知识库 ANIMAL 的知识库非常小,仅仅包含16条规则(一 般说来,一个产生式系统的知识库应包含》几百条规则); 解空间很小,仅仅包含8个解,或8个最高假设(在一个特定 的动物园里,共有虎、豹、长颈鹿、斑马、鸵鸟、企鹅和信天 翁、八哥等8种动物);初始事实集合很小,仅仅包含21个事实,如图中的F1至F21; 数据(即事实、证据、断言),知识(即浅层知识,规则)和推 理都是精确的,即确定性的;知识库。

实验步骤:本识别系统需要通过正向推理,正向推理过程的具体步骤是:(1) 读入事实集到工作存储器。

(2) 取出某条规则,将规则的全部前件与工作存储器中的所有事实进行比较。

如果匹配成功,则所得结果显示到屏幕上,转向(3);否则,直接转向(3)。

小鼠新奇物体实验报告

小鼠新奇物体实验报告

一、实验背景新奇物体识别实验是行为心理学中常用的实验方法,主要用于研究动物和人类对新异刺激的反应能力。

本实验旨在探究小鼠对新奇物体的识别能力,以及这种能力与学习记忆之间的关系。

二、实验目的1. 了解小鼠对新奇物体的识别能力。

2. 探究新奇物体识别能力与学习记忆的关系。

3. 为后续相关研究提供实验依据。

三、实验材料1. 实验动物:雄性昆明小鼠,体重20-25克,年龄6-8周。

2. 实验环境:标准鼠笼,温度控制在22-25℃,湿度控制在40%-60%。

3. 实验器材:新奇物体(如塑料瓶、纸盒等)、计时器、电子天平、鼠笼等。

四、实验方法1. 实验分组:将实验动物随机分为两组,每组10只,分别为实验组(新奇物体组)和控制组(普通物体组)。

2. 实验流程:a. 将实验动物置于鼠笼中,适应环境30分钟。

b. 实验组将小鼠置于包含新奇物体的鼠笼中,观察小鼠对新奇物体的反应,记录时间。

c. 控制组将小鼠置于包含普通物体的鼠笼中,观察小鼠对普通物体的反应,记录时间。

d. 实验结束后,将小鼠放回鼠笼,观察其对新奇物体和普通物体的反应变化。

五、实验结果1. 实验组小鼠对新奇物体的反应时间为(平均时间±标准差)X秒,控制组小鼠对普通物体的反应时间为(平均时间±标准差)Y秒。

2. 实验结束后,观察实验组小鼠对新奇物体的反应时间明显缩短,而控制组小鼠对普通物体的反应时间无明显变化。

六、分析与讨论1. 实验结果表明,小鼠具有对新奇物体的识别能力,且这种能力与学习记忆有关。

2. 实验组小鼠在经历新奇物体刺激后,对新奇物体的反应时间明显缩短,说明小鼠通过学习记忆,提高了对新奇物体的识别能力。

3. 与控制组相比,实验组小鼠对新奇物体的反应时间更短,说明新奇物体对小鼠具有更强的吸引力,促使小鼠进行学习记忆。

七、结论1. 小鼠具有对新奇物体的识别能力,且这种能力与学习记忆有关。

2. 新奇物体对小鼠具有更强的吸引力,促使小鼠进行学习记忆。

人工智能实验报告

人工智能实验报告

暨南大学人工智能实验报告题目:动物识别系统院系:信科院计算机系专业:计算机软件与理论学号: 0934061004学生姓名:张韶远成绩:日期: 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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

人工智能实验报告二班级:XXXX 姓名:XXXX 学号:XXXXX 一.实验目的1. 理解并掌握基于规则系统的表示与推理。

2. 学会编写小型的产生式系统,理解正向推理和反向推理的过3. 程以及两者的差别。

4. 学会设计简单的人机交互界面。

二.实验预习内容及实验环境:1. 了解动物识别系统问题;2. 产生式系统的组成部分,正向推理,逆向推理的算法和产生式系统的类型。

三、实验内容和步骤:1.内容:结合第五章内容,以动物识别系统(或货物袋装系统)为例,实现基于规则的系统构造实验。

2.要求:1>结果显示要求(1)有若干选择动物特征的选择列表;(2)表现判断动物时,使用了哪些规则;(3)表现数据库的变化;(正向推理中表现每使用一次规则后,产生新事实。

反向推理中表现新的目标事实有哪些需要证明,哪些已经得到证实);(4)显示规则的调用次序;(5)显示最后的结果,包含动物能识别出来和动物不能识别出来两种情况。

(6)至少检查两个例子实现正向推理和反向推理的区别;老虎的例子如上所示,以下为金钱豹的例子:正向推理:反向推理:2>指出综合数据库和规则库分别使用哪些函数实现的?综合数据库和规则库均采用数组完成。

其中的综合数据库为一个string类型的数组,内容为事实的名称字符串,下标则为该事实的序号。

数组长度为33,表示共有33个事实(最后7个为动物名称)。

代码如下:string facts[factnum]={"有爪","有犬齿","有奶","有毛发","目视前方","吃肉","有蹄","有羽毛","会飞","生蛋","不会飞","黑白色","会游泳","善飞","不怕风浪","长腿","长脖子","有暗斑点","白色","黑色斑点","黑色条纹","黄褐色","食肉动物","鸟","哺乳动物","有蹄动物","老虎","金钱豹","长颈鹿","斑马","鸵鸟","企鹅","海燕"};规则库为一个结构体数组。

该结构体由一个int型数组(表示前提条件的序号集合)和一个int数据(表示由此前提推出的结果)表示。

该数组长度为14,表明有14条规则。

该规则库在建立时有一个内在要求:前提的规则(子规则)的序号必须在父规则之前。

(便于正向推理的实现)代码如下:struct rule{int con[10];int res;};Rulerules[rulenum]={{{2,-1},24},{{3,-1},24},{{7,-1},23},{{8,9,-1},23},{{24,0,1,4,-1},22 }, {{24,5,-1},22},{{24,6,-1},25},{{22,21,20,-1},26},{{22,21,19,-1},27},{{25,15,16,21,17,-1},28},{{25,18,20,-1},29},{{23,10,15,16,11,-1},30},{{23,10,12,11,-1},31},{{23,13,14,-1},32}};3>规则库的匹配算法是什么?如何选用可用规则集中的规则?分别使用哪些函数实现的?用一个bool型的与数据库数组等长的enfact数组表示各事实是否已经满足(或已经推出)。

要匹配一个规则的时候,只需查看其前提序号集数组中每个元素对应的enfact数组中的值是否为true,如果所有都为true则可由该规则推出相应结果。

代码如下:bool enfact[factnum];memset(enfact,false,factnum);//每次输入时需对该数组进行初始化//以下为输入过程while(ti!=-1){if(ti>=0&&ti<=notanimal)enfact[ti]=true;else{cout<<"输入错误!请输入0~25之间的数字!"<< endl;//notanimal=25cin.clear();//清除流错误错误标记cin.sync(); ////////////清空输入缓冲区break;}cin>> ti;};以上,则完成了输入,并对enfact数组进行了初始化。

现在对正向推理和反向推理的匹配和具体推理过程进行简要说明。

正向推理:从下向上的推理。

由于建立规则库时的内在要求,即子规则必在父规则前,故进行正向推理的时候只要将规则库从前到后扫一遍看是否能由规则推出相应结果即可。

如果能匹配推出结果则看该结果是否为动物,如果已经推出动物则推理成功。

否则更新数据库,匹配下一个规则。

代码如下:int obverse(){outputf(1);int ti;int i,j;int tres;cout<<endl;for(i=0;i<rulenum;i++){j=0;ti=rules[i].con[j];while(ti!=-1) //假设前提数不超过9个,必存在-1作为结束{if(enfact[ti]==false)break;j++;ti=rules[i].con[j];}if(ti==-1){tres=rules[i].res;enfact[tres]=true;cout<<"运用了规则"<<i<<" : ";j=0;while(rules[i].con[j]!=-1){cout<<facts[rules[i].con[j]]<<" ";j++;}cout<<"====> "<<facts[tres]<<endl;if(isAnimal(tres)){if(noOtiose(tres))return tres;elsereturn -1;}}}return -1;}反向推理:从上向下的推理。

反向推理比正向推理要复杂一些。

采用的算法是从事实数据库的动物开始从前往后进行匹配,看是否能成功推出,如果都推不出能识别失败,若能推出其中一个则中止搜索,识别成功。

推某一个事实时,仍然是从该事实的前提出发,逐个匹配,若所有的前提满足,则该事实满足。

不同的是,这里以该事实为结果的前提可能有很多,我采用了牺牲空间换时间的方法,即不是将规则库从头到尾搜一遍来查找以待查事实为结果的规则,而是事先将所有的先保存在一个结构体数组中,结构体中只有一个数组,表示能推出某个结果的规则序号。

代码如下:struct factrule{int rulen[5];};factrulefactrules[factnum]={{-1},{-1},{-1},{-1},{-1},{-1},{-1},{-1},{-1},{-1},{-1},{-1},{-1},{-1},{-1},{-1},{-1},{-1},{-1},{-1},{-1},{-1},{4,5,-1},{2,3,-1},{0,1,-1},{6,-1},{7,-1},{8,-1},{9,-1},{10,-1},{11,-1},{12,-1}};故要看某个事实是否能推出的时候,只要将它对应的标号的factrules中的数组中的规则进行匹配即可,只要有一条规则满足,即可中止搜索,推出该事实可满足。

另外,由于某个规则的前提可能是另一个规则的结果,这相当于规则的嵌套。

所以在进行反向推理时必须用到递归技术,并且是一种回溯。

整个反向推理的代码如下:bool achieve(int ri) //{int j;int ti;cout<<endl<<"当前验证目标为: "<<facts[rules[ri].res]<<endl;cout<<"尝试规则"<<ri<<" : ";j=0;while(rules[ri].con[j]!=-1){cout<<facts[rules[ri].con[j]]<<" ";j++;}cout<<"==?==> "<<facts[rules[ri].res]<<endl;j=0;ti=rules[ri].con[j];while(ti!=-1){if(enfact[ti]==false){int ki=0;if(factrules[ti].rulen[ki]==-1){cout<<"条件"<<facts[ti]<<"不满足!"<<endl;cout<<"使用规则"<<ri<<" : ";j=0;while(rules[ri].con[j]!=-1){cout<<facts[rules[ri].con[j]]<<" ";j++;}cout<<"=====> "<<facts[rules[ri].res]<<"失败!"<<endl;return false;}else{cout<<"条件"<<facts[ti]<<"未知,继续推理..."<<endl;bool ok=false;for(ki=0;factrules[ti].rulen[ki]!=-1&&!ok;ki++){ok=achieve(factrules[ti].rulen[ki]);}if(ok){cout<<"条件"<<facts[ti]<<"满足!"<<endl;j++;ti=rules[ri].con[j];}else{cout<<"条件"<<facts[ti]<<"不满足!"<<endl;cout<<"使用规则"<<ri<<" : ";j=0;while(rules[ri].con[j]!=-1){cout<<facts[rules[ri].con[j]]<<" ";j++;}cout<<"=====> "<<facts[rules[ri].res]<<" 失败!"<<endl<<endl;return false;}}}else{cout<<"条件"<<facts[ti]<<"满足!"<<endl;j++;ti=rules[ri].con[j];}}{cout<<"使用规则"<<ri<<" : ";j=0;while(rules[ri].con[j]!=-1){cout<<facts[rules[ri].con[j]]<<" ";j++;}cout<<"=====> "<<facts[rules[ri].res]<<"成功!"<<endl;return true;}}int reverse(){outputf(2);int i;for(i=animalfrom;i<rulenum;i++){cout<<endl<<"----------------------由动物目标:"<<facts[rules[i].res]<<"进行反向推理-------------------------"<<endl;if(achieve(i)){if(noOtiose(i+notanimal-animalfrom+1))return i+notanimal-animalfrom+1;elsereturn -1;}}return -1;}注:本系统对输入事实冗余的情况做出了处理。

相关文档
最新文档