一个知识库系统与外部数据源接口的研究_第1页
一个知识库系统与外部数据源接口的研究_第2页
一个知识库系统与外部数据源接口的研究_第3页
一个知识库系统与外部数据源接口的研究_第4页
一个知识库系统与外部数据源接口的研究_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、一个知识库系统与外部数据源接口的研究摘要本文论述了一个知识库系统与外部数据源接口的描述定义和程序实现方法。关键词知识库系统数据库数据源1 引言随着智能决策支持系统应用领域的不断扩大,原来由模型库系统完成的部分定量分析任务,将归并到知识库系统中。即要求知识库中,不仅有专家的定性知识,而且也应该具有计算知识,形成一个广义的知识库系统。在广义知识库系统中,要求推理机不仅要具有一般的推理功能,而且能够从外部数据源获取数据,对数学模型进行求解的功能。如何从外部数据源获取数据,是使推理机具有模型求解功能的关键技术之一。笔者在生产成本管理知识库系统的开发过程中,使用Visualc+6.0成功地研究开发了该知

2、识库系统与外部数据源的接口,拓宽了推理机的功能,收到了比较好的效果。外部数据源主要是指文本数据文件、数据库和Excel电子表。由于受篇幅限制,本文主要针对知识库系统与文本数据文件、数据库接口的设计实现问题进行讨论。知识库系统与Excel电子表的接口问题,笔者将另撰文介绍。2 接口的描述定义在生产成本管理知识库中,以知识数据块的形式对外部数据源进行如下描述定义。2.1 文本数据文件接口的定义格式DATAFILE/可以定义多个文件的接口。< 文件句柄>=OPEN(<文件名称>)/在一个接口中,可以定义任意个输入数据文件。< 变量>=READ(<文件句柄&g

3、t;,行号,列号)/可以有多行。|/或WITH<文件句柄>< 变量>=READ(行号,列号)/可以有多行。ENDWITHENDDATAFILE2.2 数据库接口的定义格式DATABASE/在一个知识库中可以定义多个这样的接口CONNECTION<ADO连接对象名>=<连接字符串>/可以同时定义多个连接对象INPUTTABLE/每个接口只能定义一个输入块。RECORDSET<ADO记录集对象名>=<SQ我询语句>,CONNECTION<ADO接对象名/可以定义多个记录集对象名。变量二ADO己录集象名.FIELDS(字段

4、序号)/可以有多行|/或WITHADO己录集象名变量=.FIELDS(字段序号)/可以有多行ENDWITHENDINPUTTABLEOUTPUTTABLE/定义与存储结果数据表的接口,每个接口最多可以定义一个输出块。RECORDSETADO记录集对象名=SQ我询语句,ADO!接对象名;ADO记录集对象名.FIELDS(字段序号)=变量;|/或WITHADO记录集对象名FIELDS(变量序号)=变量;ENDWITHENDOUTPUTTABLEENDDATABASE在上述格式中,变量是指计算表达式及模型中需要用户提供值的参数,或存储表达式及模型的求解结果。“/”表示注释。此外,笔者在生产成本管理知

5、识库系统开发工具中,开发了知识库与外部数据源接口定义的辅助工具,用户利用这些工具可以十分方便地完成接口的描述定义工作。3 接口程序的实现在推理机运行之前,首先将知识库读入内存,并且转换成计算机的内部表现形式。接口程序再根据知识库与外部数据源接口的定义,将外部数据源的数据读入内存缓冲区后,最后在进行推理。为了便于查找知识库与外部数据源接口的定义语句,首先定义如下数据结构:structLineText/存储知识库语句行文本。CStringText;/存储知识库语句行文本structlinetext*pNextLine;/下一行指针*pLineTextHead;/知识库语句首行指针。structDa

6、taObject/知识数据块对象索引表CStringObjecType;/对象类型structLineText*pTextLine;/对象首行在LineText中的指针structDataObject*pNextObject;/指向下一个知识数据块对象。structKnowClsName/存储知识类名称定义语句文本CStringClsName;/知识类名称structKnowClsName*pNextCls;/下知识类名称的指针structLlineText*pTextLine;/知识类名称在LineText中的指针structDataObject*pFirstObject;指向知识类中第一个

7、知识数据块对象的指针structMethod*pFirstMethod;指向知识类中第一个知识方法的指针*pClsHead;指向知识类的头指针。根据上述数据结构的定义,接口程序总体实现的程序流程如图1所示。在图1中,当pDo->ObjectType等于“DATAFILE"或"DATABASE”或“EXCEL”时,系统分别调用从文本数据文件、数据库和EXCEL电子表获取数据的接口函数。其中:文本数据文件接口函数的程序流程如图2所示,数据库接口函数的程序流程如图3所示。“OTHER”表示知识库中的其它知识数据块对象。3.1 数据文件接口函数程序的实现为了存储从外部数据文件

8、获取的数据,定义如下数据结构:structDataFileBuffer/数据文件缓冲区CStringVariableName;/变量名称doubleDataValue;从文本文件获取的变量值structDataBuffer*pNextPata;指向下一个变量的指针*pDataBufferHead,*pDataBufferTail;/缓冲区的头指针和尾指针。据此,绘出从外部数据文件获取数据的接口函数的程序流程如图2。由于受篇幅限制,图2仅给出了程序的主要算法流程。在编程时,还必须考虑具体实现的细节,例如:如何从一个数据行中,确定数据项数量,找到Col歹U;如何创建DataFileBuffer的链

9、表结构3.2 数据库接口函数程序的实现根据上述知识库与数据库接口的定义格式以及知识库内部存储结构,可以绘制出数据库接口函数程序总体流程如图3所示。其中:D表示输入数据表接口程序流程,如图4所示;E表示输出数据表接口程序流程。3.2.1 输入数据表接口程序的实现为了存储从输入数据表获取的数据,定义数据结构如下:structInputDataBuffer/存储从数据库获得的数据,每一个变量建立一个数据区_variant_tDataValue;/可以存储不同类型的数据;structInputDataBuffer*pNextDataValue;structPremiseVariableBuffer/前

10、提变量(自变量)集区,接受来自数据库的数据CStringVariableName;structInputDataBuffer*pInputDataBufferHead;/指向数据区头指针。structPremiseVariableBuffer*pNextVariable;/指向下一个变量。*pPremiseVariableBufferHead,pPremiseVariableBufferTail;心义变量、初始化pTL1=pDo- > pTextLine )TL1=pTL1> pNextLinepTL2=pTL1 ; nFind1=pTL2->Text。Find ("

11、;OPEN”)Noifind1>-1?YespTYes- > Text="ENDDATAFILE ” ?No找出文件名称、文件句柄名称,并且打开数据文件(设对象名为 MyFile)。Ptl2<=PTL2->pNextLineYes)TL1=pTL1->pNextLineYesPtl2->Text= DATAFILEEND?在Ptl2->Text中,找出变量名称VariableName,行号 (Row)和列号(Col);MyFile . SeekToBegin();Bool flag=MyFile . ReadString(mDataLine)

12、;设 MyFile 当前 厅 nLine=1 ;NopTL2<=pTL2->pNextLineNo JNoYes在 Ptl2->Text 中 否存在 “ READ 和文件句柄名称?=nLine?NoYeslag=MyFile.ReadStirng(mD ataLine);nLine+;mDataLine找到否?Col列No显示消息通知用户 存在错误据此,可以绘制出知识库从外部数据库获取数据的接口程序流程如图4所示。343Yes将数据和VariableName采用DataFIleBuffer结构存入内存图2从外部数据文件获取数据的接口函数程序流程nFind1=pTL1->

13、Text.Find(CONNECTION")nFind1>-1?pTL1=pTL1> pNextLineYespIT=pTL1-pNextLine;pOT=pTL1->pNextLineNoDNopTL1=pTL1->pNextLine走义变量、初始化 pTL1=pDNo > pNextLinepOT=pOT->pNextLine YesDATABN即'DATABASE ?>Text= OUTPUTTABplT->Text= INPUTTABLEpOT->Text= EDATABASE ?Yes找出ADO连接对家名称和连接

14、字符用,并打开连接pTL1->Text= ENDpIT->Text= ENDNopOT-pIT=pIT->pNextLine图3数据库接口程序实现的总体流程图4从外部数据库获取数据的接口程序流程3.2.2 输出数据表接口程序的实现输出数据表用来存储推理机对表达式或模型的求解结果。因此,需要在推理机运行之前,根据输出数据表接口描述的定义,准确地建立结果变量与打开数据表的记录集对象之间以及记录集对象与连接对象之间的链接关系,使得推理完成后,系统能够正确地连接数据库和打开数据表,将求解结果存入到数据表中。为此,定义如下数据结构:structOutputDataBuffer/推理机将

15、结果写入该区域CStringConclVariableName;/推理完成以后,按变量名称排序_Varian_tDataValue;/可以存储不同类型的数据;structOutputDataBuffer*pNextDataValue;*pOutputDataBufferHead,*pOutputDataBufferTail;structConclVariableBuffer/结果变量缓冲区CStringVariableName;CStringConObjectName;/排序可以减少连接数据库的次数CStringRecObjectName;/排序可以减少打开记录集的次数intnField;/字

16、段序号structOutputDataBuffer*pOutputDataBuffer;/指向输出数据区的指针structConclVariableBuffer*pNextVariableName;*pConclVariableHead,*pConclVariableTail;structConnecObjectName/连接对象缓冲区CStringObjectName;CStringConnectionString;structConnecObjectName*pNextConnecObjectName;*pConnecObjectNameHead;structRecObjectName/记

17、录集对象缓冲区CStringObjectName;/记录集对象名称CStringRecString;/SQL语句字符串structRecObjectName*pRecObjectName;*pRecObjectNamehead;程序实现流程与图4相类似,不同之处是:在初始化阶段,不需要连接数据库和打开数据表,将找出的结果变量与打开数据表的记录集对象之间以及连接对象之间的对应关系,存到上述结构所定义的链表中。推理机在推理完成以后,通过指向结果变量缓冲区的头指针获得整个链表的入口,将结果数据存入输出数据表中。4 结束语本文开发的知识库系统与外部数据源的接口作为生产成本管理知识库系统开发工具的重要组成部分,目前正在两个不同类型的企业进行试运行,已经收到了比较好的效果。应用实践证明,该系统运行稳定可靠,接口描述定义格式简单实用。我们准备将接口程序转为ActiveXDLL组件形式,便于在不同的知识库系统中使用,以获得更好的效果。参考文献1 EugeneOlafsen等著,王建华等译.MFCVisualC+6编程技术内幕.机械工业出版社,2000年版2 熊范纶等.雄风专家系统开发工具.清华大学出饭社,1999年版3 王永庆.人工智能原理与方法.西安交通大学出版社,1998年版TheStudyonInterfac

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论