1、基于web的动物识别系统实验报告 基于web的动物识别系统 一、实验目的 理解和掌握产生式知识表示方法及产生式系统的基本过程,能够利用Web编程技术建立一个基于产生式知识表示的简单的智能系统。二、实验环境 (1) 硬件环境:网络环境中的微型计算机。 (2) 软件环境:Windows操作系统,Microsoft Visual Studio C#语言。三、实验原理 该系统用到的表示方法是产生式表示方法,是陈述性知识表示方法的一种。 3.1 产生式表示的基本方法 (1)事实的表示 在产生式表示方法中,事实通常是用三元组或四元组来表示的。对确定性知识,一个事实可用一个三元组 (对象,属性,值)或(关系
2、,对象1,对象2)来表示。这种表示方式,在机器内部可用一个表来实现。 (2)规则的表示 规则描述的事物间的因果关系。规则的产生式表示形式常称为产生式规则,简称为产生式,或规则。其基本形式为 PQ或者 IF P THEN Q其中,P是产生式的前提,也称为产生式的前件,它给出了该产生式可否使用的先决条件,用事实的逻辑组合来构成;Q是一组结论或操作,也成为产生式的后件,它指出当前提P满足时应该推出的结论或应该执行的操作。产生式的含义是:如果前提P满足,则可推出结论Q或执行Q所规定的操作。 2产生式系统的基本结构及过程 通常,把用产生式知识表示方法构造的智能系统统称为产生式系统。一个产生式系统的基本结
3、构包括综合数据库、规则库和控制系统这三个主要部分。 2.1综合数据库 综合数据库也称为事实库,是一个用来存放与求解问题有关的各种当前信息的数据结构。在推理过程中,当规则库中某条规则的前提可以和综合数据库中的已知事实相匹配时,该规则被激活,由它推出的结论将被作为新的事实放入综合数据库,成为后面推理的已知事实。 2.2规则库规则库是一个用来存放与求解问题有关的所有规则的集合。它包含了将问题从初始状态转换成目标状态所需要的所有变换规则。2.3控制系统 控制系统也成为推理机,它由一组程序组成,用来控制整个产生式系统的运行,决定问题求解过程的推理路线,实现对问题的求解。其主要工作如下: (1)按一定策略
4、从规则库中选择规则与综合数据库的已知事实进行匹配。 (2)当匹配成功的规则多于一条时,推理机构应该能够按照某种策略从中选出一条规则去执行。 (3)对要执行的规则,如果该规则的后件不是问题的目标,则当其为一个或多个结论时,把这些结论加入到综合数据库中;当其为一个或多个操作时,执行这些操作。(4)对要执行的规则,如果该规则的后件满足问题的结束条件,则停止推理。 (5)在问题求解过程中,记住应用过的规则序列,以便最终能够给出问题的解路径。3产生式系统的基本过程产生式系统问题求解的基本过程:(1)初始化综合数据库,把欲解决问题的已知事实送入综合数据库。(2)检查规则库中是否存在尚未使用过的规则,若有,
5、则执行(3);否则,转(7)。(3)检查规则库中的未使用规则中是否有其前提可与综合数据库中已知事实相匹配的规则,若有,则从中选择一个;否则,转(6)。(4)执行当前选种规则,并对该规则加上标记,把执行该规则后所得到的结论作为新的事实放入综合数据库。如果该规则的结论是一些操作,则执行这些操作。(5)检查综合数据库中是否包含了该问题的解,若已包含,则说明求出解,问题求解过程结束;否则,转(2)。(6)当规则库中还有未使用的规则,但均不能与综合数据库中的已有事实相匹配时,要求用户进一步提供关于该问题的已知事实,若能提供,则转(2);否则,说明该问题无解,终止求解过程。(7)若知识库中不再有未使用规则
6、,也说明该问题无解,终止问题求解过程。需要说明的是,这个过程是不确定的。原因是第(3)步没有明确指出当有多余规则可用时,如何从中选择一条作为当前可执行规则。另外,从第(3)步到第(5)步的循环过程实际上就是一个搜索过程。当采用的控制策略不同时,所得到的搜索过程也不同。四、实验内容4.1 基本功能简介本动物识别系统可以识别老虎、金钱豹、斑马、长颈鹿、企鹅、信天翁这6种动物。其规则库包含如下15条规则:r1: IF 该动物有毛发 THEN 该动物是哺乳动物r2: IF 该动物有奶 THEN 该动物是哺乳动物r3: IF 该动物有羽毛 THEN 该动物是鸟r4: IF 该动物会飞 AND 会下蛋 T
7、HEN 该动物是鸟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
8、身上有暗斑点 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算法的文字说明本识别算法为仿产生式识别算法,其思想基于产生式算法,但根据实际情况作了稍
9、许改进。算法步骤如下: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进行更新,将参与产生
10、规则的事实删去,得到的新结果作为事实加入。转步骤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 流程图4.2.3 核心代码及注释如下: bool match = false; int i = 0; string res =; string temp_res = ; bool
11、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.RowsiResult.ToString();/当前规则的结果 /与当前规则相同的规则的集
12、合 DataRow rows = rule_dt.Select(Result = + res + and RuleID = + rule_dt.RowsiRuleID.ToString() + ); for (int j = 0; j rows.Length; j+)/对于当前集合中的每一个规则 if (infor_data.Search(rowsjInfor.ToString() != -1) /如果可以在已知事实库中找到该规则的前件 if (j = rows.Length - 1) /当集合中规则的全部前件均能找到 for (int k = 0; k = j; k+) If(temp_in
13、for.Search(rowskInfor.ToString() = -1) temp_infor.Insert(rowskInfor.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
14、) temp_res += 根据选择信息无法识别出结果!; res = ; break; /把已经用过的infor从事实库中删除 for (int k = 0; k temp_infor.NumOfElements; k+) infor_data.Delete(temp_infor.Arrayk); /把新得到的结果加入事实库 for (int k = 0; k temp_result.NumOfElements; k+) infor_data.Insert(temp_result.Arrayk); if (res != ) res = temp_res; temp_res = 匹配结果是:; /for (int k = 0;k temp_res return temp_res + res; 4.3 基于C#语言的整体结构设计 4.3.1 概述 本次实验共可以分为三个部分。 第一,用户界面接口部分; 第二,产生式识别算法部分; 第三,基于文件系统的数据存储部分。(主要用于支持添加和删除规则功能)4.3.2用户界面接口部分总的用户界面:识别系统:在该处按住Ctrl在左边特征信息中选取已有特征,点击识别,即可得到结果。规则管理:可以对规则进行选择,修改,删除,添加。4.3.3产生式识别算法部分
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1