基于web的动物识别系统实验报告文档格式.docx
《基于web的动物识别系统实验报告文档格式.docx》由会员分享,可在线阅读,更多相关《基于web的动物识别系统实验报告文档格式.docx(10页珍藏版)》请在冰豆网上搜索。
P→Q
或者
IFPTHENQ
其中,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:
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流程图
4.2.3核心代码及注释如下:
boolmatch=false;
inti=0;
stringres="
"
;
stringtemp_res="
boolchanged=false;
while(match==false||changed==true)
{
DataStructtemp_infor=newDataStruct();
//infor是事实库,为规则前件;
DataStructtemp_result=newDataStruct();
//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+"
'
andRuleID='
+rule_dt.Rows[i]["
RuleID"
].ToString()+"
);
for(intj=0;
j<
rows.Length;
j++)//对于当前集合中的每一个规则
if(infor_data.Search(rows[j]["
Infor"
].ToString())!
=-1)
//如果可以在已知事实库中找到该规则的前件
if(j==rows.Length-1)
//当集合中规则的全部前件均能找到
for(intk=0;
k<
=j;
k++)
If(temp_infor.Search(rows[k]["
].ToString())==-1)
temp_infor.Insert(rows[k]["
].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="
//把已经用过的infor从事实库中删除
temp_infor.NumOfElements;
infor_data.Delete(temp_infor.Array[k]);
//把新得到的结果加入事实库
temp_result.NumOfElements;
infor_data.Insert(temp_result.Array[k]);
if(res!
="
)
res=temp_res;
temp_res="
匹配结果是:
//for(intk=0;
k<
temp_res
returntemp_res+res;
4.3基于C#语言的整体结构设计
4.3.1概述
本次实验共可以分为三个部分。
第一,用户界面接口部分;
第二,产生式识别算法部分;
第三,基于文件系统的数据存储部分。
(主要用于支持添加和删除规则功能)
4.3.2用户界面接口部分
总的用户界面:
识别系统:
在该处按住Ctrl在左边特征信息中选取已有特征,点击识别,即可得到结果。
规则管理:
可以对规则进行选择,修改,删除,添加。
4.3.3产生式识别算法部分