?? 6424.htm
字號:
<HTML>
<HEAD>
<meta http-equiv='Content-Type' content='text/html; charset=gb2312'>
<meta HTTP-EQUIV='Expires' CONTENT=0>
<link rel='stylesheet' href='../../../../news.css'>
<style type='text/css'>
.fst{padding:0px 15px;width:770px;background:#eeeecc;border-left:1px solid #000000;border-right:1px solid #000000}
.fstdiv3 img{border:0px;border-right:8px solid #eeeecc;border-top:6px solid #eeeecc}
</style>
<title>
一種專家數據庫的開發與實現
</title>
</HEAD>
<BODY aLink=#990000 bgColor=#ffffff bottomMargin=0 leftMargin=0 rightMargin=0 topMargin=0 marginwidth=0 marginheight=0>
<center>
<TABLE align=center bgColor=#cccc99 border=0 cellPadding=2 cellSpacing=0 width=770>
<TBODY>
<TR>
<TH align=left >
一種專家數據庫的開發與實現
</TH>
</TD></TR>
</TBODY></TABLE>
<TABLE align=center bgColor=#eeeecc border=1 cellPadding=1 cellSpacing=0 width=770>
<TBODY>
<TR><TD colSpan=5 >
<a href='http://www.csdn.net'>中國軟件開發網絡</a>
-->
<a href='http://www.csdn.net/develop'>開發圖書館</a>
-->
<a href='http://www.csdn.net\develop\list_article.asp?lib=1&bigclassid=
1
'>
Visual C++
</a>
-->
<a href='http://www.csdn.net\develop\list_article.asp?lib=1&bigclassid=
1
&smallclassid=
107
'>
數據庫操作
</a>
-->
<a href='
http://www.csdn.net/develop/library/vc/datebase/6424.shtm
'>
一種專家數據庫的開發與實現
</a>
</TD></tr>
<TR>
<TD align=left width=300>
<B>關鍵字:</B><BR>
一種專家數據庫的開發與實現
</TD>
<TD align=middle width=120>
<B>貼文時間</B><br>
2001-4-19 20:06:34
</TD>
<TD align=middle width=80>
<B>文章類型: </B><BR>
收藏
</TD>
<TD align=middle width=100>
<B>給貼子投票 </B>
<BR><a href='http://www.csdn.net/develop/addscore.asp?id=
6424
'>投票</a>
</TD></TR>
<TR>
<TD >
ShowMan
收藏
</TD>
<TD colSpan=3 vAlign=top>
<B>出處: </B><A href='
'>
</A></TD></TR>
<TR><TD colSpan=5 bgcolor=#cccc99> </TD></TR>
</TD></TR></TBODY></TABLE>
<div align=center><div class=fst align=left><div class=fstdiv3 id=print2>
<br><br><PRE><FONT color=#0080c0><STRONG><BIG><BIG>一種專家數據庫的開發與實現</BIG></BIG></STRONG></FONT></PRE><PRE> 齊玉東 李逸波
傳統數據庫系統缺乏知識,只能處理靜態數據;而專家系統的狹窄
應用領域及不能訪問現存數據庫,又防礙了專家系統的有效應用。數
據庫和人工智能這兩個領域單獨發展的局限性,促使了兩者取長補短,
共同發展。這就是專家數據庫EDS(Expert Database Syst em)產生和
發展的原因。通常,我們把既具有數據庫管理功能及演繹能力、又提
供專家系統中若干良好性能的數據庫系統,稱為專家數據庫。EDS的基
本思想是把以知識表達和知識處理為主的專家系統ES(Expert System
)技術引進傳統數據庫,使二者有機結合,以開發出能共享信息的面向
知識處理的問題求解系統。目前,EDS主要采用系統耦合--"緊耦合"
及"松耦合"來實現。緊耦合指將規則管理系統集成到DBMS之中,使DBM
S既管理數據庫又管理規則庫。這種方法實現難度較大。而松耦合是
指將一個現成的專家系統外殼和一個現成的DBMS作為兩個獨立的子系
統結合在一起,它們分別管理規則庫和數據庫。采取松耦合實現策略
可以充分發揮原有兩個系統的全部功能,而不需對原系統進行任何改
動。它只需設計一個連接ES/DBMS的高效、靈活的接口模塊,以協調二
者的工作,所以實現起來時間短、見效快。
一、故障診斷專家系統的系統結構
在故障診斷系統HF-2000的研制中,我們采取松耦合策略建立了一
個故障診斷專家數據庫系統。該系統是一個產生式系統,采用深度優
先策略作為其控制策略。系統根植于W indows平臺,采用了面向對象
的程序設計技術及先進的數據庫技術;在數據庫端,我們采用了基于Se
rver/Client機制的MS SQL的數據庫技術。在推理控制端,利用Visual
C++進行編程,實現了一個推理機。推理機與數據庫之間的接口則通
過ODBC API直接調用來實現對數據庫的訪問。本系統的構造模型是以
數據庫為載體的構模形式,系統機構圖如1所示。圖1
圖1中知識獲取結構負責建立、修改與擴充各個數據庫;解釋機構
用于對求解過程作
出說明,指出求解成功或失敗的原因,并回答用戶提出的問題。事
實庫用來存放輸入的原始事實及中間結果;字典庫用來存放規則中事
實的基本定義和說明;規則庫用來存放規則;垃圾桶用來存放推理中失
敗的推理路徑。
二、規則與數據庫的設計
1. 產生式規則的模型
規則的一般形式是:
if〈前提〉then〈結論〉
它表示當〈前提〉成立時,得出〈結論〉的可信度為。其中〈前
提〉是事實或斷言的合取形式。本系統中的規則模型請參考圖2。
2. 事實庫
結構:FACT_DB(Fact_ID,Rank,No)
用途:存放輸入的原始事實,中間結果及最后結果。
其中:Fact_ID是事實Fact的編碼;Rank用來表示系統特定部分,比
如說"放大級"、"槽路"等;No表示特定部分中的部件的編號;如"1"表
示"槽路"部分1號管、"2"表示"槽路"部分2號管等。
3. 字典庫
結構:DICT_DB(Fac_ID,Component,Appear,Why,Known)
用途:存放規則庫中的前提條件和結論及其編碼。
其中:Fact_ID為事實編碼;Component為部件名稱;Appear是對Fac
t_ID的自然語言解釋;Known用來表示該事實已知或未知,以防止該斷
言的重復求證。
4. 規則庫
規則庫中包括四個表(TABLE),它們是規則前件庫(PRE_TABLE)、
已激活的規則前件庫(ACTIVE_PRE TABLE)、規則后件庫(ACT_TABLE)
和已激活的規則后件庫(ACTIVE_ACT_TAB LE)。
圖2
(1)規則前件庫
結構:PRE_TABLE (Rule_Name, Fact_ID)
用途:存放各條規則對應的前提條件。
其中:Rule_Name為規則名;Fact_ID為Rule_Name規則的一個與條
件;一條規則的n個與條件在該庫中就有n條對應該規則的記錄。
(2)已激活的規則前件庫
結構:ACTIVE_PRE_TABLE(Fact_ID,Rank,No)
用途:存放已激活的前提條件,以避免規則各前提條件的重復匹配
。
其中:Fact_ID為Rule_Name規則的一個與條件;Rank用來表示系統
特定部分;No表示特定部分中的部件的編號。
(3)規則后件庫
結構:ACT_TABLE (Rule_Name, Fact_ID, Num, Num2)
用途:存放規則對應的結果。
其中:Rule_Name為規則名;Fact_ID為Rule_Name規則的結果;Num
表示該規則前提條件的個數;Num2為Num字段的輔助值。
(4)已激活的規則后件庫
結構:ACTIVE_ACT_TABLE(Rule_Name, Rank,No)
用途:存放已激活的后件,以避免規則各結論的重復匹配。
其中:Rule_Name為規則名;Rank用來表示系統特定部分;No表示特
定部分中的部件的編號。
5. 垃圾桶
結構:GARBAGE_BIN_DB(Fact_ID, Rule_Name, Pre_Num)
用途:記錄剪去枯死枝葉的原因。
其中:Fact_ID為事實編碼;Rule_Name為應用于該結點的規則名,P
re_Num為實際匹配的前提條件數。
三、控制機構的設計
我們用C++語言實現了一個采用深度優先策略的反向推理機。整
個推理過程。就是一棵搜索樹邊長枝邊修枝的過程推理機的源程序如
下:
int CCause::Reason(RTree*rTree)
{
RULE prule,rule;
int ruleFlag;
while(1){
while(true){
if(rTree- choose rule(&prule)==1
{
//對當前葉節點選擇適用的規則
rTree- SctAct(prule);
//把當前應用規則放入激活的規則表ar
ruleFlag=1;
break;
}
else{
ruleFlag=0;//若無規則可用,設置失敗標志
if(depth return 0;
else{
rTree- ClipBranch(depth--;path++);//剪去枯枝
if(depth!=0)
return 0;
//若不是樹根,返回失敗標志;否則繼續推理
}}}
rTree- SetLeaf(&prule);
//設置第一個前提為當前葉節點
depth++;
while(1){
int iSucc=0;
iSucc=rTree- SuccessDirect ();
//事實是否立即成立
if(iSucc==0)
{
//若事實庫中沒有對應事實且該節點不是元件,則搜索規則
while(1){
if(rTree- choose rule(&rule)==1)
{
//搜索對應于當前葉節點的規則
ruleFlag=1;
if(BackReason(rTree)==1)
{
//若事實成立,則對下一前提進行求證;
否則選用下一條規則推理
rTree UnderSuccess();
//事實成立,重新設置當前前提為當前葉節點
break;}}
else{
ruleFlag=0;//若無規則可選,設置失敗標志
break;}}}
if(iSucc==1){//若事實立即不成立,則設置失敗標志
ruleFlag=0;
break;}
if(ruleFlag==0)
//當前應用規則失敗,選擇下一條規則推理
break;
else{
if(prule.num==prule.num2)
//上一個前提求證成功,判斷是否還有未求證的前提
break://若沒有則退出循環
else
rTree- SetLeaf(&prule);
//若有則設置此前提為當前葉節點
}}
if(ruleFlag==1){
rTree- ProduceNewFact();
//若事實求證成功則往事實庫中添加此事實
return 1;
//返回成功標志
}}}
(作者地址:山東煙臺海軍航空工程學院研究生隊,264001) </PRE>
<HR><br><br>
</DIV></div></div>
<script src='../../../get_readnum.asp?id=
6424
'></script>
</center></BODY></HTML>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -