0104023一個知識庫系統(tǒng)與外部數(shù)據(jù)源接口的研究(doc)

  文件類別:其它

  文件格式:文件格式

  文件大?。?9K

  下載次數(shù):73

  所需積分:3點

  解壓密碼:qg68.cn

  下載地址:[下載地址]

清華大學卓越生產(chǎn)運營總監(jiān)高級研修班

綜合能力考核表詳細內(nèi)容

0104023一個知識庫系統(tǒng)與外部數(shù)據(jù)源接口的研究(doc)
一個知識庫系統(tǒng)與外部數(shù)據(jù)源接口的研究 馬金平 邢筠 (青島大學商學院管理系, 266071) 摘要 本文論述了一個知識庫系統(tǒng)與外部數(shù)據(jù)源接口的描述定義和程序?qū)崿F(xiàn)方法。 關(guān)鍵詞 知識庫系統(tǒng) 數(shù)據(jù)庫 數(shù)據(jù)源 1 引言 隨著智能決策支持系統(tǒng)應用領(lǐng)域的不斷擴大,原來由模型庫系統(tǒng)完成的部分定量分析 任務,將歸并到知識庫系統(tǒng)中。即要求知識庫中,不僅有專家的定性知識,而且也應該 具有計算知識,形成一個廣義的知識庫系統(tǒng)。在廣義知識庫系統(tǒng)中,要求推理機不僅要 具有一般的推理功能,而且能夠從外部數(shù)據(jù)源獲取數(shù)據(jù),對數(shù)學模型進行求解的功能。 如何從外部數(shù)據(jù)源獲取數(shù)據(jù),是使推理機具有模型求解功能的關(guān)鍵技術(shù)之一。筆者在生 產(chǎn)成本管理知識庫系統(tǒng)的開發(fā)過程中,使用Visual c++6.0 成功地研究開發(fā)了該知識庫系統(tǒng)與外部數(shù)據(jù)源的接口,拓寬了推理機的功能,收到了比 較好的效果。外部數(shù)據(jù)源主要是指文本數(shù)據(jù)文件、數(shù)據(jù)庫和Excel電子表。由于受篇幅限 制,本文主要針對知識庫系統(tǒng)與文本數(shù)據(jù)文件、數(shù)據(jù)庫接口的設計實現(xiàn)問題進行討論。 知識庫系統(tǒng)與Excel電子表的接口問題,筆者將另撰文介紹。 2 接口的描述定義 在生產(chǎn)成本管理知識庫中,以知識數(shù)據(jù)塊的形式對外部數(shù)據(jù)源進行如下描述定義。 2.1 文本數(shù)據(jù)文件接口的定義格式 DATAFILE //可以定義多個文件的接口。 =OPEN()//在一個接口中,可以定義任意個輸入數(shù)據(jù)文件。 =READ(,行號,列號)//可以有多行。 | //或 WITH =READ(行號,列號) //可以有多行。 END WITH END DATAFILE 2.2數(shù)據(jù)庫接口的定義格式 DATABASE //在一個知識庫中可以定義多個這樣的接口 CONNECTION = //可以同時定義多個連接對象 INPUTTABLE //每個接口只能定義一個輸入塊。 RECORDSET =,CONNECTION //可以定義多個記錄集對象名。 〈變量〉=.FIELDS(字段序號)//可以有多行 | //或 WITH 〈ADO記錄集對象名> = .FIELDS(字段序號) //可以有多行 END WITH END INPUTTABLE OUTPUTTABLE //定義與存儲結(jié)果數(shù)據(jù)表的接口,每個接口最多可以定義一個輸出塊。 RECORDSET =,; .FIELDS(字段序號)=〈變量〉; | //或 WITH .FIELDS(變量序號)=; END WITH END OUTPUTTABLE END DATABASE 在上述格式中,〈變量〉是指計算表達式及模型中需要用戶提供值的參數(shù),或存儲表 達式及模型的求解結(jié)果?!?/”表示注釋。此外,筆者在生產(chǎn)成本管理知識庫系統(tǒng)開發(fā)工 具中,開發(fā)了知識庫與外部數(shù)據(jù)源接口定義的輔助工具,用戶利用這些工具可以十分方 便地完成接口的描述定義工作。 3 接口程序的實現(xiàn) 在推理機運行之前,首先將知識庫讀入內(nèi)存,并且轉(zhuǎn)換成計算機的內(nèi)部表現(xiàn)形式。接 口程序再根據(jù)知識庫與外部數(shù)據(jù)源接口的定義,將外部數(shù)據(jù)源的數(shù)據(jù)讀入內(nèi)存緩沖區(qū)后 ,最后在進行推理。 為了便于查找知識庫與外部數(shù)據(jù)源接口的定義語句,首先定義如下數(shù)據(jù)結(jié)構(gòu): struct LineText //存儲知識庫語句行文本。 { CString Text;//存儲知識庫語句行文本 struct linetext *pNextLine;//下一行指針 } *pLineTextHead; //知識庫語句首行指針。 struct DataObject //知識數(shù)據(jù)塊對象索引表 { CString ObjecType;//對象類型 struct LineText *pTextLine;//對象首行在LineText中的指針 struct DataObject *pNextObject;};//指向下一個知識數(shù)據(jù)塊對象。 struct KnowClsName //存儲知識類名稱定義語句文本 { CString ClsName;//知識類名稱 struct KnowClsName *pNextCls;//下知識類名稱的指針 struct LlineText *pTextLine;//知識類名稱在LineText中的指針 struct DataObject *pFirstObject;//指向知識類中第一個知識數(shù)據(jù)塊對象的指針 struct Method *pFirstMethod;//指向知識類中第一個知識方法的指針 }*pClsHead;//指向知識類的頭指針。 根據(jù)上述數(shù)據(jù)結(jié)構(gòu)的定義,接口程序總體實現(xiàn)的程序流程如圖1所示。在圖1中,當p Do- >ObjectType等于“DATAFILE“或“DATABASE”或“EXCEL”時,系統(tǒng)分別調(diào)用從文本數(shù)據(jù)文件 、數(shù)據(jù)庫和EXCEL電子表獲取數(shù)據(jù)的接口函數(shù)。其中:文本數(shù)據(jù)文件接口函數(shù)的程序流程 如圖2所示,數(shù)據(jù)庫接口函數(shù)的程序流程如圖3所示?!癘THER”表示知識庫中的其它知識數(shù) 據(jù)塊對象。 No Yes Yes No DATABASE EXCEL OTHER DATAFILE 圖1 接口程序總體實現(xiàn)的程序流程 3.1 數(shù)據(jù)文件接口函數(shù)程序的實現(xiàn) 為了存儲從外部數(shù)據(jù)文件獲取的數(shù)據(jù),定義如下數(shù)據(jù)結(jié)構(gòu): struct DataFileBuffer //數(shù)據(jù)文件緩沖區(qū) { CString VariableName;/變量名稱 double DataValue;//從文本文件獲取的變量值 struct DataBuffer *pNextPata;//指向下一個變量的指針 }*pDataBufferHead,*pDataBufferTail;//緩沖區(qū)的頭指針和尾指針。 據(jù)此,繪出從外部數(shù)據(jù)文件獲取數(shù)據(jù)的接口函數(shù)的程序流程如圖2。由于受篇幅限制 ,圖2僅給出了程序的主要算法流程。在編程時,還必須考慮具體實現(xiàn)的細節(jié),例如:如 何從一個數(shù)據(jù)行中,確定數(shù)據(jù)項數(shù)量,找到Col列;如何創(chuàng)建DataFileBuffer的鏈表結(jié)構(gòu) 等。 3.2 數(shù)據(jù)庫接口函數(shù)程序的實現(xiàn) 根據(jù)上述知識庫與數(shù)據(jù)庫接口的定義格式以及知識庫內(nèi)部存儲結(jié)構(gòu),可以繪制出數(shù)據(jù) 庫接口函數(shù)程序總體流程如圖3所示。其中:D表示輸入數(shù)據(jù)表接口程序流程,如圖4所示 ;E表示輸出數(shù)據(jù)表接口程序流程。 3.2.1 輸入數(shù)據(jù)表接口程序的實現(xiàn) 為了存儲從輸入數(shù)據(jù)表獲取的數(shù)據(jù),定義數(shù)據(jù)結(jié)構(gòu)如下: struct InputDataBuffer //存儲從數(shù)據(jù)庫獲得的數(shù)據(jù),每一個變量建立一個數(shù)據(jù)區(qū) { _variant_t DataValue;//可以存儲不同類型的數(shù)據(jù); struct InputDataBuffer *pNextDataValue;}; struct PremiseVariableBuffer //前提變量(自變量)集區(qū),接受來自數(shù)據(jù)庫的數(shù)據(jù) { CString VariableName; struct InputDataBuffer *pInputDataBufferHead;//指向數(shù)據(jù)區(qū)頭指針。 struct PremiseVariableBuffer *pNextVariable;//指向下一個變量。 }*pPremiseVariableBufferHead,pPremiseVariableBufferTail; 據(jù)此,可以繪制出知識庫從外部數(shù)據(jù)庫獲取數(shù)據(jù)的接口程序流程如圖4所示。 No Yes No Yes Yes Yes No Yes No No Yes No Yes No Yes 圖2 從外部數(shù)據(jù)文件獲取數(shù)據(jù)的接口函數(shù)程序流程 No Yes Yes No Yes No Yes No No No Yes Yes 圖3 數(shù)據(jù)庫接口程序?qū)崿F(xiàn)的總體流程 Yes Yes No No No Yes Yes No Yes No Yes No 圖4 從外部數(shù)據(jù)庫獲取數(shù)據(jù)的接口程序流程 3.2.2 輸出數(shù)據(jù)表接口程序的實現(xiàn) 輸出數(shù)據(jù)表用來存儲推理機對表達式或模型的求解結(jié)果。因此,需要在推理機運行之 前,根據(jù)輸出數(shù)據(jù)表接口描述的定義,準確地建立結(jié)果變量與打開數(shù)據(jù)表的記錄集對象 之間以及記錄集對象與連接對象之間的鏈接關(guān)系,使得推理完成后,系統(tǒng)能夠正確地連 接數(shù)據(jù)庫和打開數(shù)據(jù)表,將求解結(jié)果存入到數(shù)據(jù)表中。為此,定義如下數(shù)據(jù)結(jié)構(gòu): struct OutputDataBuffer//推理機將結(jié)果寫入該區(qū)域 { CString ConclVariableName;//推理完成以后,按變量名稱排序 _Varian_t DataValue;//可以存儲不同類型的數(shù)據(jù); struct OutputDataBuffer *pNextDataValue; }*pOutputDataBufferHead,*pOutputDataBufferTail; struct ConclVariableBuffer //結(jié)果變量緩沖區(qū) { CString VariableName; CString ConObjectName;//排序 可以減少連接數(shù)據(jù)庫的次數(shù) CString RecObjectName;//排序 可以減少打開記錄集的次數(shù) int nField;//字段序號 struct OutputDataBuffer *pOutputDataBuffer;//指向輸出數(shù)據(jù)區(qū)的指針 struct ConclVariableBuffer *pNextVariableName; }*pConclVariableHead,*pConclVariableTail; struct ConnecObjectName //連接對象緩沖區(qū) { CString ObjectName; CString ConnectionString; struct ConnecObjectName *pNextConnecObjectName; }*pConnecObjectNameHead; struct RecObjectName //記錄集對象緩沖區(qū) { CString ObjectName;//記錄集對象名稱 CString RecString;//SQL語句字符串 struct RecObjectName *pRecObjectName; }*pRecObjectNamehead; 程序?qū)崿F(xiàn)流程與圖4相類似,不同之處是:在初始化階段,不需要連接數(shù)據(jù)庫和打開數(shù) 據(jù)表,將找出的結(jié)果變量與打開數(shù)據(jù)表的記錄集對象之間以及連接對象之間的對應關(guān)系 ,存到上述結(jié)構(gòu)所定義的鏈表中。推理機在推理完成以后,通過指向結(jié)果變量緩沖區(qū)的 頭指針獲得整個鏈表的入口,將結(jié)果數(shù)據(jù)存入輸出數(shù)據(jù)表中。 4 結(jié)束語 本文開發(fā)的知識庫系統(tǒng)與外部數(shù)據(jù)源的接口作為生產(chǎn)成本管理知識庫系統(tǒng)開發(fā)工具的 重要組成部分,目前正在兩個不同類型的企業(yè)進行試運行,已經(jīng)收到了比較好的效果。 應用實踐證明,該系統(tǒng)運行穩(wěn)定可靠,接口描述定義格式簡單實用。我們準備將接口程 序轉(zhuǎn)為ActiveX DLL 組件形式,便于在不同的知識庫系統(tǒng)中使用,以獲得更好的效果。 參考文獻 1 Eugene Olafsen等著, 王建華等譯. MFC Visual C++6編程技術(shù)內(nèi)幕. 機械工業(yè)出版社, 2000年版 2 熊范綸等. 雄風專家系統(tǒng)開發(fā)工具. 清華大學出飯社, 1999年版 3 王永慶. 人工智能原理與方法. 西安交通大學出版社, 1998年版 The Study on Interface of a Knowledge Base System and External DataSource Ma Jinping Xing jun (Manangement Department QingDao University , 266071) Abstract This paper discussed describe definition and program implementation method on interface of a Knowledge Base System and External DataSource. Key words Knowledge Base System DataBase DataSource ----------------------- 開始pCls=pClsHead pCls=NULL??? 終止 pDo=pCls->pFirstObject pDo=NULL? pDo->ObjectType=? pCls=pCls->pNextCls A B C pDo=pDo->pNextObject flag=MyFile.ReadStirng(mDataLine);nLine++; 顯示消息通知用戶存在錯誤 在mDataLine中找Col列 Row=nLine? 將數(shù)據(jù)和VariableName采用 DataFIleBuffer結(jié)構(gòu)存入內(nèi)存 Flag=False? 在Ptl2->Text中,找出變量名稱 VariableName,行號(Row)和列號(Col);MyFile.SeekToBegin();Bool flag=MyFile.ReadString(mDataLine);設MyFile當前行nLine=1; 在Ptl2->Text中是否存在“READ”和文件句柄名稱? pTL2pNextLine Ptl2->Text=”END DATAFILE”? 找到否? pTL1=pTL1->pNextLine 找出文件名稱、文件句柄名稱,并且打開數(shù)據(jù)文件(設對象名為MyFile)。Ptl2pNextLine 返回 nfind1>-1? pTL2=pTL1;nFind1=pTL2->Text。Find(”O(jiān)PEN”) pTL1->Text=”END DATAFILE” ? 定義變量、初始化pTL1=pDo->pTextLine pTL1=pTL1->pNextLine A B 定義變量、初始化pTL1=pDo->pNextLine pTL1=pTL1->pNextLine pTL1->Text=”END DATABASE” nFind1=pTL1->Text.Find(“CONNECTION”) nFind1>-1? pTL1=pTL1->pNextLine 返回 找出ADO連接對象名稱和連接字符串,并打開連接 pIT=pTL1-pNextLine;pOT=pTL1->pNextLine pIT->Text=”INPUTTABLE” pIT=pIT->pNextLine D pIT->Text=”END DATABASE”? pOT->Text=”O(jiān)UTPUTTAB?LE ” pOT=pOT->pNextLine E pOT->Text=”END DATABASE”? D pIT=pIT->pNextLine pIT->Text=”END INPUTTABLE”? pRec=pIT; 在pRec->Text中,查找記錄集對象名稱RecName、已經(jīng)打開的連接對象名稱conName, 找到否? pRec->Text=”END INPUTTABLE”? pRec=pRec->pNextLine 返回 pField=pRec->pNextLine 從pRec->Text截出SQL命令字符串,執(zhí)行。 在pField->Text中找RecName 找到否? pField=pField->pNextLine pField->Text=”END INPUTTABLE”? 在pField- >Text中截出變量名,并且存入PremiseVariableBuffer緩沖區(qū);截出字段序號nField RecName.GetadoEOF()? 將第nField字段值存入InputDataBuffer內(nèi)存緩沖區(qū) RecName.MoveNext()
0104023一個知識庫系統(tǒng)與外部數(shù)據(jù)源接口的研究(doc)
 

[下載聲明]
1.本站的所有資料均為資料作者提供和網(wǎng)友推薦收集整理而來,僅供學習和研究交流使用。如有侵犯到您版權(quán)的,請來電指出,本站將立即改正。電話:010-82593357。
2、訪問管理資源網(wǎng)的用戶必須明白,本站對提供下載的學習資料等不擁有任何權(quán)利,版權(quán)歸該下載資源的合法擁有者所有。
3、本站保證站內(nèi)提供的所有可下載資源都是按“原樣”提供,本站未做過任何改動;但本網(wǎng)站不保證本站提供的下載資源的準確性、安全性和完整性;同時本網(wǎng)站也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的損失或傷害。
4、未經(jīng)本網(wǎng)站的明確許可,任何人不得大量鏈接本站下載資源;不得復制或仿造本網(wǎng)站。本網(wǎng)站對其自行開發(fā)的或和他人共同開發(fā)的所有內(nèi)容、技術(shù)手段和服務擁有全部知識產(chǎn)權(quán),任何人不得侵害或破壞,也不得擅自使用。

 我要上傳資料,請點我!
COPYRIGT @ 2001-2018 HTTP://fanshiren.cn INC. ALL RIGHTS RESERVED. 管理資源網(wǎng) 版權(quán)所有