0104023一个知识库系统与外部数据源接口的研究(doc)

  文件类别:其它

  文件格式:文件格式

  文件大小:19K

  下载次数:71

  所需积分:3点

  解压密码:qg68.cn

  下载地址:[下载地址]

清华大学卓越生产运营总监高级研修班

综合能力考核表详细内容

0104023一个知识库系统与外部数据源接口的研究(doc)
一个知识库系统与外部数据源接口的研究 马金平 邢筠 (青岛大学商学院管理系, 266071) 摘要 本文论述了一个知识库系统与外部数据源接口的描述定义和程序实现方法。 关键词 知识库系统 数据库 数据源 1 引言 随着智能决策支持系统应用领域的不断扩大,原来由模型库系统完成的部分定量分析 任务,将归并到知识库系统中。即要求知识库中,不仅有专家的定性知识,而且也应该 具有计算知识,形成一个广义的知识库系统。在广义知识库系统中,要求推理机不仅要 具有一般的推理功能,而且能够从外部数据源获取数据,对数学模型进行求解的功能。 如何从外部数据源获取数据,是使推理机具有模型求解功能的关键技术之一。笔者在生 产成本管理知识库系统的开发过程中,使用Visual c++6.0 成功地研究开发了该知识库系统与外部数据源的接口,拓宽了推理机的功能,收到了比 较好的效果。外部数据源主要是指文本数据文件、数据库和Excel电子表。由于受篇幅限 制,本文主要针对知识库系统与文本数据文件、数据库接口的设计实现问题进行讨论。 知识库系统与Excel电子表的接口问题,笔者将另撰文介绍。 2 接口的描述定义 在生产成本管理知识库中,以知识数据块的形式对外部数据源进行如下描述定义。 2.1 文本数据文件接口的定义格式 DATAFILE //可以定义多个文件的接口。 =OPEN()//在一个接口中,可以定义任意个输入数据文件。 =READ(,行号,列号)//可以有多行。 | //或 WITH =READ(行号,列号) //可以有多行。 END WITH END DATAFILE 2.2数据库接口的定义格式 DATABASE //在一个知识库中可以定义多个这样的接口 CONNECTION = //可以同时定义多个连接对象 INPUTTABLE //每个接口只能定义一个输入块。 RECORDSET =,CONNECTION //可以定义多个记录集对象名。 〈变量〉=.FIELDS(字段序号)//可以有多行 | //或 WITH 〈ADO记录集对象名> = .FIELDS(字段序号) //可以有多行 END WITH END INPUTTABLE OUTPUTTABLE //定义与存储结果数据表的接口,每个接口最多可以定义一个输出块。 RECORDSET =,; .FIELDS(字段序号)=〈变量〉; | //或 WITH .FIELDS(变量序号)=; END WITH END OUTPUTTABLE END DATABASE 在上述格式中,〈变量〉是指计算表达式及模型中需要用户提供值的参数,或存储表 达式及模型的求解结果。“//”表示注释。此外,笔者在生产成本管理知识库系统开发工 具中,开发了知识库与外部数据源接口定义的辅助工具,用户利用这些工具可以十分方 便地完成接口的描述定义工作。 3 接口程序的实现 在推理机运行之前,首先将知识库读入内存,并且转换成计算机的内部表现形式。接 口程序再根据知识库与外部数据源接口的定义,将外部数据源的数据读入内存缓冲区后 ,最后在进行推理。 为了便于查找知识库与外部数据源接口的定义语句,首先定义如下数据结构: struct LineText //存储知识库语句行文本。 { CString Text;//存储知识库语句行文本 struct linetext *pNextLine;//下一行指针 } *pLineTextHead; //知识库语句首行指针。 struct DataObject //知识数据块对象索引表 { CString ObjecType;//对象类型 struct LineText *pTextLine;//对象首行在LineText中的指针 struct DataObject *pNextObject;};//指向下一个知识数据块对象。 struct KnowClsName //存储知识类名称定义语句文本 { CString ClsName;//知识类名称 struct KnowClsName *pNextCls;//下知识类名称的指针 struct LlineText *pTextLine;//知识类名称在LineText中的指针 struct DataObject *pFirstObject;//指向知识类中第一个知识数据块对象的指针 struct Method *pFirstMethod;//指向知识类中第一个知识方法的指针 }*pClsHead;//指向知识类的头指针。 根据上述数据结构的定义,接口程序总体实现的程序流程如图1所示。在图1中,当p Do- >ObjectType等于“DATAFILE“或“DATABASE”或“EXCEL”时,系统分别调用从文本数据文件 、数据库和EXCEL电子表获取数据的接口函数。其中:文本数据文件接口函数的程序流程 如图2所示,数据库接口函数的程序流程如图3所示。“OTHER”表示知识库中的其它知识数 据块对象。 No Yes Yes No DATABASE EXCEL OTHER DATAFILE 图1 接口程序总体实现的程序流程 3.1 数据文件接口函数程序的实现 为了存储从外部数据文件获取的数据,定义如下数据结构: struct DataFileBuffer //数据文件缓冲区 { CString VariableName;/变量名称 double DataValue;//从文本文件获取的变量值 struct DataBuffer *pNextPata;//指向下一个变量的指针 }*pDataBufferHead,*pDataBufferTail;//缓冲区的头指针和尾指针。 据此,绘出从外部数据文件获取数据的接口函数的程序流程如图2。由于受篇幅限制 ,图2仅给出了程序的主要算法流程。在编程时,还必须考虑具体实现的细节,例如:如 何从一个数据行中,确定数据项数量,找到Col列;如何创建DataFileBuffer的链表结构 等。 3.2 数据库接口函数程序的实现 根据上述知识库与数据库接口的定义格式以及知识库内部存储结构,可以绘制出数据 库接口函数程序总体流程如图3所示。其中:D表示输入数据表接口程序流程,如图4所示 ;E表示输出数据表接口程序流程。 3.2.1 输入数据表接口程序的实现 为了存储从输入数据表获取的数据,定义数据结构如下: struct InputDataBuffer //存储从数据库获得的数据,每一个变量建立一个数据区 { _variant_t DataValue;//可以存储不同类型的数据; struct InputDataBuffer *pNextDataValue;}; struct PremiseVariableBuffer //前提变量(自变量)集区,接受来自数据库的数据 { CString VariableName; struct InputDataBuffer *pInputDataBufferHead;//指向数据区头指针。 struct PremiseVariableBuffer *pNextVariable;//指向下一个变量。 }*pPremiseVariableBufferHead,pPremiseVariableBufferTail; 据此,可以绘制出知识库从外部数据库获取数据的接口程序流程如图4所示。 No Yes No Yes Yes Yes No Yes No No Yes No Yes No Yes 图2 从外部数据文件获取数据的接口函数程序流程 No Yes Yes No Yes No Yes No No No Yes Yes 图3 数据库接口程序实现的总体流程 Yes Yes No No No Yes Yes No Yes No Yes No 图4 从外部数据库获取数据的接口程序流程 3.2.2 输出数据表接口程序的实现 输出数据表用来存储推理机对表达式或模型的求解结果。因此,需要在推理机运行之 前,根据输出数据表接口描述的定义,准确地建立结果变量与打开数据表的记录集对象 之间以及记录集对象与连接对象之间的链接关系,使得推理完成后,系统能够正确地连 接数据库和打开数据表,将求解结果存入到数据表中。为此,定义如下数据结构: struct OutputDataBuffer//推理机将结果写入该区域 { CString ConclVariableName;//推理完成以后,按变量名称排序 _Varian_t DataValue;//可以存储不同类型的数据; struct OutputDataBuffer *pNextDataValue; }*pOutputDataBufferHead,*pOutputDataBufferTail; struct ConclVariableBuffer //结果变量缓冲区 { CString VariableName; CString ConObjectName;//排序 可以减少连接数据库的次数 CString RecObjectName;//排序 可以减少打开记录集的次数 int nField;//字段序号 struct OutputDataBuffer *pOutputDataBuffer;//指向输出数据区的指针 struct ConclVariableBuffer *pNextVariableName; }*pConclVariableHead,*pConclVariableTail; struct ConnecObjectName //连接对象缓冲区 { CString ObjectName; CString ConnectionString; struct ConnecObjectName *pNextConnecObjectName; }*pConnecObjectNameHead; struct RecObjectName //记录集对象缓冲区 { CString ObjectName;//记录集对象名称 CString RecString;//SQL语句字符串 struct RecObjectName *pRecObjectName; }*pRecObjectNamehead; 程序实现流程与图4相类似,不同之处是:在初始化阶段,不需要连接数据库和打开数 据表,将找出的结果变量与打开数据表的记录集对象之间以及连接对象之间的对应关系 ,存到上述结构所定义的链表中。推理机在推理完成以后,通过指向结果变量缓冲区的 头指针获得整个链表的入口,将结果数据存入输出数据表中。 4 结束语 本文开发的知识库系统与外部数据源的接口作为生产成本管理知识库系统开发工具的 重要组成部分,目前正在两个不同类型的企业进行试运行,已经收到了比较好的效果。 应用实践证明,该系统运行稳定可靠,接口描述定义格式简单实用。我们准备将接口程 序转为ActiveX DLL 组件形式,便于在不同的知识库系统中使用,以获得更好的效果。 参考文献 1 Eugene Olafsen等著, 王建华等译. MFC Visual C++6编程技术内幕. 机械工业出版社, 2000年版 2 熊范纶等. 雄风专家系统开发工具. 清华大学出饭社, 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? 将数据和VariableName采用 DataFIleBuffer结构存入内存 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 找出文件名称、文件句柄名称,并且打开数据文件(设对象名为MyFile)。Ptl2pNextLine 返回 nfind1>-1? pTL2=pTL1;nFind1=pTL2->Text。Find(”OPEN”) 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=”OUTPUTTAB?LE ” pOT=pOT->pNextLine E pOT->Text=”END DATABASE”? D pIT=pIT->pNextLine pIT->Text=”END INPUTTABLE”? pRec=pIT; 在pRec->Text中,查找记录集对象名称RecName、已经打开的连接对象名称conName, 找到否? pRec->Text=”END INPUTTABLE”? pRec=pRec->pNextLine 返回 pField=pRec->pNextLine 从pRec->Text截出SQL命令字符串,执行。 在pField->Text中找RecName 找到否? pField=pField->pNextLine pField->Text=”END INPUTTABLE”? 在pField- >Text中截出变量名,并且存入PremiseVariableBuffer缓冲区;截出字段序号nField RecName.GetadoEOF()? 将第nField字段值存入InputDataBuffer内存缓冲区 RecName.MoveNext()
0104023一个知识库系统与外部数据源接口的研究(doc)
 

[下载声明]
1.本站的所有资料均为资料作者提供和网友推荐收集整理而来,仅供学习和研究交流使用。如有侵犯到您版权的,请来电指出,本站将立即改正。电话:010-82593357。
2、访问管理资源网的用户必须明白,本站对提供下载的学习资料等不拥有任何权利,版权归该下载资源的合法拥有者所有。
3、本站保证站内提供的所有可下载资源都是按“原样”提供,本站未做过任何改动;但本网站不保证本站提供的下载资源的准确性、安全性和完整性;同时本网站也不承担用户因使用这些下载资源对自己和他人造成任何形式的损失或伤害。
4、未经本网站的明确许可,任何人不得大量链接本站下载资源;不得复制或仿造本网站。本网站对其自行开发的或和他人共同开发的所有内容、技术手段和服务拥有全部知识产权,任何人不得侵害或破坏,也不得擅自使用。

 我要上传资料,请点我!
人才招聘 免责声明 常见问题 广告服务 联系方式 隐私保护 积分规则 关于我们 登陆帮助 友情链接
COPYRIGT @ 2001-2018 HTTP://WWW.QG68.CN INC. ALL RIGHTS RESERVED. 管理资源网 版权所有