一种专家数据库的开发与实现

本文介绍专家数据库EDS,它结合数据库与专家系统技术。在故障诊断系统HF - 2000研制中,采用松耦合策略建立专家数据库系统,基于Windows平台,运用面向对象和数据库技术,用C++实现推理机,还阐述了规则与数据库设计及控制机构设计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一种专家数据库的开发与实现
    齐玉东 李逸波
    传统数据库系统缺乏知识,只能处理静态数据;而专家系统的狭窄
应用领域及不能访问现存数据库,又防碍了专家系统的有效应用。数
据库和人工智能这两个领域单独发展的局限性,促使了两者取长补短,
共同发展。这就是专家数据库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)   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值