基于WEB的动物识别系统 实验报告
基于WSN的动物监测平台的应用研究

基于W S N的动物监测平台的应用研究林惠强1,周佩娇2,刘财兴1(1.华南农业大学信息学院,广州 510642; 2.南沙区畜牧服务中心,广州 511458)摘 要:传感器网络是计算机科学技术的一个新的研究领域,具有十分广阔的应用前景,引起了学术界和农工业界的高度重视。
为此,针对目前饲养场对动物的行为特征和健康状况无法实时获取的情况,提出在畜牧业中利用无线传感网络传送动物的信息,解决了饲养动物生理特征信息实时传输的问题。
同时,根据饲养场的实际情况,结合无线传感网络的特点,设计了一个切实可行的无线传感器网络动物检测系统,系统解决了网络部署、节点设计、节点定位、路由和可视化平台的设计等问题。
关键词:检测平台;无线传感网络;数据传输;畜牧业中图分类号:S126 文献标识码:A文章编号:1003-188X(2009)01-0193-030 引言无线传感器网络(W S N)技术是我国中长期发展规划中的重点发展方向之一,作为一种新型无线网络,正成为国际上近年来研究热点[1]。
其中畜牧业作为无线传感器网络应用的重要领域,目前还没有得到应有的重视[2]。
而随着人们消费需求的增长,市场竞争不断加剧,饲养场面临来自国际贸易、环境保护、市场需求等各方面的压力,同时猪和牛饲养中的牲畜口蹄疫、疯牛病和猪瘟等重大动物疾病时有发生,如何利用科技技术提高生产水平和科学饲养是养殖场面临的重要问题。
能否对饲养对象的实时健康状况监测及在疫情发生、发生疾病或发情等特殊情况下及时采取相应措施,是个挑战的事情[3]。
传统饲养场人工获取畜养动物生理数据的方法已经相对落后,其及时性、长期性、方便性及多样性等方面都处在较低水平,这些都减弱了饲养场的信息化水平和竞争力,急需使用先进的智能化信息获取技术来提供方便的畜养动物健康监测数字化平台。
为此,本文利用无线传感器网络自动、实时地监测动物的行踪和健康,特别是实时获取用人工不能或不便获取的生理数据,为进一步建立科研人员急需的数据库和统计分析建立基础,从而对动物的发情、疾病、疫情等进行监控和预警。
简单动物识别系统的知识表示实验报告

简单动物识别系统的知识表示实验报告一、实验目的: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;
动物识别系统实验报告

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)用选定的编程语言建造规则库和综合数据库,并能对它们进行增加、删除和修改操作。
三.实验原理动物识别专家系统是流行的专家系统实验模型,它用产生式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。
如果不考虑不确定性,需另附可信度度量值。
产生式过则的含义是:如果前件满足,则可得到后件的结论或者执行后件的相应动作,即后件由前件来触发。
一个产生式生成的结论可以作为另一个产生式的前提或语言变量使用,进一步可构成产生式系统。
人工智能课程设计报告--动物识别系统
文档从互联网中收集,已重新修正排版,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)....................................................................................................... 错误!未定义书签。
动物识别系统
学生实验报告实验课名称:人工智能实验项目名称:产生式系统实验专业名称:计算机科学与技术班级: 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();// 将“关于...”菜单项添加到系统菜单中。
动物识别系统实验报告
人工智能实验报告二班级: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]={"有爪","有犬齿","有奶","有毛发","目视前方","吃肉","有蹄","有羽毛","会飞","生蛋","不会飞","黑白色","会游泳","善飞","不怕风浪","长腿","长脖子","有暗斑点","白色","黑色斑点","黑色条纹","黄褐色","食肉动物","鸟","哺乳动物","有蹄动物","老虎","金钱豹","长颈鹿","斑马","鸵鸟","企鹅","海燕"};规则库为一个结构体数组。
报告_基于产生式系统的动物识别系统
实验基于产生式系统的动物识别系统知识表示与推理专题魏江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、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于web的动物识别系统一、实验目的理解和掌握产生式知识表示方法及产生式系统的基本过程,能够利用Web编程技术建立一个基于产生式知识表示的简单的智能系统。
二、实验环境(1) 硬件环境:网络环境中的微型计算机。
(2) 软件环境:Windows操作系统,Microsoft Visual Studio C#语言。
三、实验原理该系统用到的表示方法是产生式表示方法,是陈述性知识表示方法的一种。
3.1 产生式表示的基本方法(1)事实的表示在产生式表示方法中,事实通常是用三元组或四元组来表示的。
对确定性知识,一个事实可用一个三元组(对象,属性,值)或(关系,对象1,对象2)来表示。
这种表示方式,在机器内部可用一个表来实现。
(2)规则的表示规则描述的事物间的因果关系。
规则的产生式表示形式常称为产生式规则,简称为产生式,或规则。
其基本形式为P→Q或者IF P THEN Q其中,P是产生式的前提,也称为产生式的前件,它给出了该产生式可否使用的先决条件,用事实的逻辑组合来构成;Q是一组结论或操作,也成为产生式的后件,它指出当前提P满足时应该推出的结论或应该执行的操作。
产生式的含义是:如果前提P满足,则可推出结论Q或执行Q所规定的操作。
2.产生式系统的基本结构及过程通常,把用产生式知识表示方法构造的智能系统统称为产生式系统。
一个产生式系统的基本结构包括综合数据库、规则库和控制系统这三个主要部分。
2.1综合数据库综合数据库也称为事实库,是一个用来存放与求解问题有关的各种当前信息的数据结构。
在推理过程中,当规则库中某条规则的前提可以和综合数据库中的已知事实相匹配时,该规则被激活,由它推出的结论将被作为新的事实放入综合数据库,成为后面推理的已知事实。
2.2规则库规则库是一个用来存放与求解问题有关的所有规则的集合。
它包含了将问题从初始状态转换成目标状态所需要的所有变换规则。
2.3控制系统控制系统也成为推理机,它由一组程序组成,用来控制整个产生式系统的运行,决定问题求解过程的推理路线,实现对问题的求解。
其主要工作如下:(1)按一定策略从规则库中选择规则与综合数据库的已知事实进行匹配。
(2)当匹配成功的规则多于一条时,推理机构应该能够按照某种策略从中选出一条规则去执行。
(3)对要执行的规则,如果该规则的后件不是问题的目标,则当其为一个或多个结论时,把这些结论加入到综合数据库中;当其为一个或多个操作时,执行这些操作。
(4)对要执行的规则,如果该规则的后件满足问题的结束条件,则停止推理。
(5)在问题求解过程中,记住应用过的规则序列,以便最终能够给出问题的解路径。
3.产生式系统的基本过程产生式系统问题求解的基本过程:(1)初始化综合数据库,把欲解决问题的已知事实送入综合数据库。
(2)检查规则库中是否存在尚未使用过的规则,若有,则执行(3);否则,转(7)。
(3)检查规则库中的未使用规则中是否有其前提可与综合数据库中已知事实相匹配的规则,若有,则从中选择一个;否则,转(6)。
(4)执行当前选种规则,并对该规则加上标记,把执行该规则后所得到的结论作为新的事实放入综合数据库。
如果该规则的结论是一些操作,则执行这些操作。
(5)检查综合数据库中是否包含了该问题的解,若已包含,则说明求出解,问题求解过程结束;否则,转(2)。
(6)当规则库中还有未使用的规则,但均不能与综合数据库中的已有事实相匹配时,要求用户进一步提供关于该问题的已知事实,若能提供,则转(2);否则,说明该问题无解,终止求解过程。
(7)若知识库中不再有未使用规则,也说明该问题无解,终止问题求解过程。
需要说明的是,这个过程是不确定的。
原因是第(3)步没有明确指出当有多余规则可用时,如何从中选择一条作为当前可执行规则。
另外,从第(3)步到第(5)步的循环过程实际上就是一个搜索过程。
当采用的控制策略不同时,所得到的搜索过程也不同。
四、实验内容4.1 基本功能简介本动物识别系统可以识别老虎、金钱豹、斑马、长颈鹿、企鹅、信天翁这6种动物。
其规则库包含如下15条规则: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 不会飞 THEN 该动物是鸵鸟r14: IF 该动物是鸟AND 会游泳AND 不会飞AND 有黑白二色 THEN 该动物是企鹅r15: IF 该动物是鸟AND 善飞THEN 该动物是信天翁注:在这里,必须前件都满足,结果才会成立。
比如,r1和r2,必须既有毛发又有奶,才能判定是哺乳动物。
4.2 识别算法说明4.2.1算法的文字说明本识别算法为仿产生式识别算法,其思想基于产生式算法,但根据实际情况作了稍许改进。
算法步骤如下:1)获得出入参数:事实集infors和规则集rules;初始化参数match=false和changed=false,这两个参数分别表示是否成功匹配(历次)和本次循环是否找到匹配。
2)判断match==false||changed==ture,是转第三步;否则转7;3)对rules中的每一个规则,对其结果进行搜寻,找到相同结果的规则项,组成一个集合cur_rules;4)对cur_rules中的每一个前件,在infor中寻找匹配。
若均能找到匹配则转5,否则转6;5)changed=true;match=true;根据cur_rules中的规则,对infors 进行更新,将参与产生规则的事实删去,得到的新结果作为事实加入。
转步骤2。
6)changed=false。
若changed==false||match==false,则无能匹配的规则,转7);否则转2。
7)若match==false 转8;否则转9。
8)将res置空,temp_res置“匹配失败”,返回。
9)返回所以能够匹配的结果res,temp_res置“匹配结果为:”。
注:本算法将所有前件能够匹配的规则的结果均作为最终结果输出4.2.2 流程图传递参数准备进行识别计算初始化参数是否已经最终匹配Match == ture&&Changed == false 规则是否全用过读取一条待处理规则的前件否所读前件是否在综合信息库中全部出现将该规则前件添加到待删除的自定义DataStruct 数据结构中,以备更新综合信息库时使用是将规则结论添加到待添加的自定义DataStruct 数据结构中,以备更新综合信息库时使用Changed = true,match = true是否识别不出结果Match == false&&Changed == false 是更新综合数据库添加待添加规则删除待删除规则否否未识别出结果失败结束是识别流程(Identify 的执行过程)Changed = false否识别完成,结果处理是相关参数:综合数据库infor_data ,规则库rule_dt ,动物库ani_dtMatch:是否匹配,false Changed:是否进行了修改,false含义:匹配到了并且规则库没有更新4.2.3 核心代码及注释如下:bool match = false;int i = 0;string res ="";string temp_res = "";bool changed = false;while (match == false ||changed== true ){DataStruct temp_infor = new DataStruct();//infor是事实库,为规则前件;DataStruct temp_result = new DataStruct();//result是结果库,为规则后件;changed = false;for (i = 0; i < rule_dt.Rows.Count; )//对于规则库中的每一条规则{res = rule_dt.Rows[i]["Result"].ToString();//当前规则的结果//与当前规则相同的规则的集合DataRow[] rows = rule_dt.Select(@"Result = '" + res + "'and RuleID = '" + rule_dt.Rows[i]["RuleID"].ToString() + "'");for (int j = 0; j < rows.Length; j++)//对于当前集合中的每一个规则{if (infor_data.Search(rows[j]["Infor"].ToString()) != -1)//如果可以在已知事实库中找到该规则的前件{if (j == rows.Length - 1)//当集合中规则的全部前件均能找到{for (int k = 0; k <= j; k++){If(temp_infor.Search(rows[k]["Infor"].ToString()) == -1) {temp_infor.Insert(rows[k]["Infor"].ToString());}}if (temp_result.Search(res) == -1){temp_res = temp_res + res + ".";temp_result.Insert(res);}changed = true;match = true;break;}}else { break; }}i += rows.Length;if (match == true){}}//当无匹配结果时的处理if (match == false&& changed== false){temp_res += "根据选择信息无法识别出结果!";res = "";break;}//把已经用过的infor从事实库中删除for (int k = 0; k < temp_infor.NumOfElements; k++) {infor_data.Delete(temp_infor.Array[k]);}//把新得到的结果加入事实库for (int k = 0; k < temp_result.NumOfElements; k++) {infor_data.Insert(temp_result.Array[k]);}}if (res != ""){res = temp_res;temp_res = "匹配结果是:";}//for (int k = 0;k < temp_resreturn temp_res + res;4.3 基于C#语言的整体结构设计4.3.1 概述本次实验共可以分为三个部分。