故障诊断专家系统研究之五-----推理机制及可信度算法

2023-10-30

 

推理机制及可信度算法

在第三章和第四章中讨论了如何表示燃气轮机专家的知识以及如何把这些知识存储到知识库之中,即关于知识表示和知识库的问题,而故障诊断专家系统的另一个核心组件就是基于知识的诊断推理机。本章在前两章讨论的知识表示和知识库的基础之上,以正反向相结合的混合推理方式实现诊断推理机,并针对本文提出的知识库模型对混合推理方式的控制策略作了改进,以广度优先索实现正向推理,以深度优先搜索实现反向推理,提高了推理机的效率。此外根据燃气轮机故障现象和故障原因之间的不确定对应性,溶合了不精确推理的思想,因此,还介绍了本文采用的一个可信度算法。 

第一节   推理机概述

本文讨论的推理机是故障诊断推理机,它实际上是计算机中的一组智能程序,包括推理方式和控制策略两个部分。推理过程主要解决的问题是,在问题求解的每一状态下,如何控制知识的选择和运用。知识的运用称为推理方式,知识的选择过程称为控制策略。推理机的任务是运用给定的推理方式和控制策略从知识库中选择有关专家知识,针对用户提出问题或目前监测到的异常现象,作出相应的解答。

   推理方式

推理方式按照知识的确定性程度分,有精确推理和不精确推理;按照推理过程的方向分,有正向推理、反向推理和正反向混合推理。

1.   正向推理(forward reasoning     正向推理是一种从证据到结论的推理方法,也称之为数据驱动策略。

运用正向推理构成的推理机一般应具备以下功能:

1   根据用户提出的前提事实或目前监测到的异常情况,知道如何选用知识库中的知识;

2   将选用的知识及经过推理得出的结论(包括中间结论)保存在临时存储器中,以备给用户解释之用。

3   能够判断推理何时结束。

2.   反向推理(backward reasoning)反向推理是一种从结论到证据的推理方法,它是根据用户的问题或目前监测到的异常情况提出一个假设,然后到知识库之中去寻找支持这个假设成立的证据,若证据存在,则假设成立。反之则否。这种推理方式由于是从结论到证据,故又称为目标驱动策略。

运用反向推理构成的推理机一般应具备以下功能:

1   能根据用户提出的问题,作出相应的假设,并能判断此目标的真假。

2   如假设成立,将结果告知用户并作出解释。

3   若假设不成立,则重新作出假设,并能在知识库之中搜索该假设成立的证据。

4   能判断推理何时结束。

3.   正反向混合推理(global reasoning  正反向混合推理则是一种从证据到结论,再由结论到证据的综合推理方法。即

证据Þ       结论Þ证据 Þ结论

其推理过程是:先根据用户提供的前提事实,通过正向推理,帮助系统参考结论,再运用反向推理,进一步寻找支持该结论成立的证据,如此反复循环直到推理成功或失败为止。

不论是正向推理、反向推理还是正反向混合推理,都有精确推理和不精确推理之分。

4.   精确推理     精确推理是指经过推理得出的结论要么为真,要么为假。在这种推理过程之中,运用到的知识或涉及到的推理规则,都是客观世界中存在的必然事实,证据和结论之间,都有确定的因果关系。

例如,当压气机的出口压力过高而进口压力过低时,那就意味着压气机压比必然过高。

5. 非精确推理(Inexact Reasoning)非精确推理主要用于某些事实的前提和因果关系都并非肯定的场合,这在诊断型、预测型的专家系统中常会用到。其共同的特点是:利用客观世界中某些不完善的、或不确切的事实和资料、以及不确定的因果关系进行推理,得出某些近乎合理的结论。

在燃气轮机故障诊断方面,也存在大量非精确和不完善的专家经验知识,因而经过推理得到的结论,也不是完全肯定的,作为最终结论或决策,推理机必须给出结论的可信度。

非精确推理的主要理论基础是概率论。由于在某些领域,尚未获得大容量的样本空间,以及其它一些原因,使得纯概率论的方法运用受到某些限制。为此,专家系统的建造者们提出了许多改进的理论模型与经验公式,以处理不确定性问题。非精确推理是专家系统的一个重要问题,人们尚处在探索阶段,对已提出的一些模型和方法亦有待进一步完善。

  控制策略(control strategy

控制策略主要指推理方向路线的控制及其推理规则的选择策略。单纯的正、反向推理,在目标的搜索上常常具有较大的盲目性。在一个庞大的知识库(样本空间),盲目地搜索问题的求解目标,将影响系统的工作效率。因此,推理的路线和推理的规则要求要具有启发性,使之能有效缩短推理过程,加快目标的收敛聚焦速度。

在专家系统中,根据搜索空间的大小,目前常用下述两种控制策略:

1)深度优先策略;

2)广度优先策略;

 

第二节   推理方式的选择

如前所述,推理方式包括正向推理、反向推理和正反向混合推理,而其中每一种方式均有精确和不精确两种模式。但不是任何一种方式对某一领域的所有问题都有效,在某些具体应用领域及特定环境下,有的适合正向推理,有的适合反向推理,也有的适合正反向混合推理。这就是说,对某些具体的应用领域,不能事先预定一种一成不变的推理方式,而是要随着问题的展开,根据问题的具体特征和当时的环境,动态地选择和执行某一种合适的推理方式,然后再完成其推理过程。

本节对上述三种推理方式作一论述,对各自的特点作一比较。然后根据本文所讨论的燃气轮机具体应用领域选择本文所采用的推理方式。至于其中不精确推理的成分,将在可信度算法中予以描述。

   正向推理

正向推理又称为数据驱动策略。其基本思想是,将目前已知的初始状态作为节点置于黑板(又称动态数据库、工作存储器,用来存放推理的中间状态和最终结果。由于推理过程的动态性,导致推理的中间结果是多变的,即是可擦可写的,故形象地称之为黑板)之中,根据一定的搜索策略到规则库中获取下一条可用的规则,用该条规则的前件同黑板中的所有节点逐一匹配,若匹配成功,则该条规则可用,将其后件加入黑板,然后继续搜寻规则库,寻找下一条可用规则。若匹配不成功,放弃该规则,同样到规则库中寻找下一条可用规则,并导致新的匹配过程。如此循环往复,直至没有规则可用或黑板不再改变为止。正向推理方式如图51表示。基本算法可用形式语言描述为:

Procedure  Forward_reasoning(Kb,Dynamic_DB)

  BEGIN

        S    SCAN1(Kb,Dynamic_DB)

        While (NOT (EMPTY(S)) AND  (CHANGED(Dynamic_DB)) do

          BEGIN

                Conclusion      GET_CONCLUSION(S)

                ADD Conclusion  TO  Dynamic_DB

               S     SCAN1(Kb,Dynamic_DB)

              END

  END                         

这里,Kb为规则库,Dynamic_DB为黑板,函数SCAN1的功能是到Kb中搜索前件同Dynamic_DB相匹配的规则集S。循环体的功能是将S中规则的后件取出并加入到黑板之中,同时再次扫描规则库,准备下一轮循环。该过程一直持续到找不到匹配的规则(EMPTY(S)为真)或者黑板内容不再改变为止(CHANGED (Dynamic_DB)  为假)。这种单纯的正向推理方式的主要优点是,用户可以主动提供有关问题的信息,而不必等到系统要求时才提供,因为那样会给推理机带来相当大的时间迟滞性;正向推理的不足之处是知识的选择过程似乎是在整个规则库漫无目标地游弋,从而导致系统求解过程中会执行许多与目标无关的无效操作。因为规则库中并非每一条规则可用于目前推理进程,当规则库较大时,正向推理机的相当时间耗费在排除无效的规则上。因而,正向推理的效率较低。

 

  反向推理

反向推理的基本思想是,先根据目前黑板中的初始状态节点,提出一个合理的假设目标,然后依据一定的搜索策略在规则库中搜寻那些其后件部分同该目标相匹配的规则集,检查该规则集中每条规则的前件部分,如果某条规则的前件部分所含有的所有条件项均存在于黑板之中,则把该规则的结论部分(即目前的假设目标)加入到黑板之中,从而该目标被证明有效。否则,把规则的条件项作为新的子目标,递归执行上述过程,直到各“与”关系的子目标全部出现在黑板之中,或者各“或”关系的只目标中有一个出现在黑板之中,则目标被求解。如果子目标不能被分解而且黑板不能满足上述要求时,那么先前假设的目标不成立,推理机必须作出新的假设。反向推理方式如图52所示。基本算法可用形式语言描述为:

Procedure  Backward_reasoning(Kb,Dynamic_DB)

  BEGIN

           Goal         GET_GOAl

           S    SCAN2(Kb,Goal)

While (NOT (EMPTY(S)) AND (NOT(Goal or Sub_goal is found)) do

         BEGIN

                    Condition      GET_CONDITION(S)

                  MATCH  Condition  WITH  Dynamic_DB

                  IF  MATCH  Is  Successful  THEN

                          ADD  Goal  TO  Dynamic_DB

                  ELSE

                    Sub_goal     GET_SUB_GOAL

                         S     SCAN2(Kb,Dynamic_DB)

             END

   END                   

 

51    正向推理方式流程图

 

52 反向推理过程流程图

 

这里,GET_GOAL函数根据目前状态提出假设目标GoalSCAN2函数到规则库中搜索后件同假设目标Goal相匹配的规则集S。循环体则取出规则集S中规则的前件,为并同黑板相匹配,如若成功,便将Goal加入黑板,否则分解目标Goal子目标Sub_goal,同时再次搜索规则库,准备为下一轮循环。上述过程一直持续到无规则可匹配或假设目标被发现为止。

反向推理的难点在于如何作出假设目标。如果假设目标不合理,则会让推理机执行无效的推理,因为推理机最终会将该假设目标推翻。靠单纯的反向推理则不可能提出合理的假设,因此,在进行反向推理之前,系统必须启动一次正向启发式搜索以求得假设目标。而且在反向推理过程中,当假设目标与某条规则的后件相匹配之后,该条规则可能会有多个前件,因而会再生出多个子目标,每个子目标在匹配过程中又可能再生出若干个子目标。如果出现子目标A的子目标BA的父目标时,其推理过程便会陷入死循环。发生这种情况后,就应对规则进行相容性检查,关于这一点,本文第六章提出了一个解决办法:即在知识获取时,就对知识库进行相容性检查,把由于知识的不相容性而导致推理出现循环的现象扼杀在摇篮之中。

       反向推理的一个显著优点是,不用寻找和不必使用那些与假设目标无关的知识,推理过程的方向性很强。不足之处在于初始目标的选择往往较为盲目,必须借助于正向启发式搜索来选择初始目标。

 

  正反向混合推理

正向推理和反向推理各有其优缺点,它们是控制策略的两种极端方法。正向推理和反向推理两种策略同时控制下的推理称为推理。这种推理的基本思想是综合正向推理和反向推理的优点,先通过正向推理帮助选择初始目标,然后通过反向推理进一步求证目标,或者正向推理和反向推理同时进行,在某个中间状态相交,满足一致性条件时终止。

 

               

53 混合推理过程示意图

 

采用这种正反向混合推理,既可以避免正向推理的盲目性,又可避免反向推理中初始目标选择的盲目性,使两种推理互为补充。这种推理过程的示意图如图53所示,其基本思想可用形式语言描述如下:

PROCEDURE   Mixed_reasoning(Kb,Dynamic_DB)

   BEGIN

             REPEAT

             Goals      Forward_reasoning(Kb,Dynamic_DB)

                G       Choose_Goal(Goals)

                P        Backward_reasoning(Kb,Dynamic_DB)

             UNTIL  P is TRUE or (Goals is Empty)

      END

上述程序含有两种算法:即先根据用户提供的初始状态信息(KB,Dynamic),通过正向推理提供一组参考目标(Goals),再由Choose-Goal过程决定初始目标G的选择,然后通过反向推理找出使目标G成立的证据P,如果在黑板中存在P,则初始目标G亦为真,G即为问题的解。上述过程一直持续到找到证据P或者找不到目标集为止。

 

四、本文采用的推理方式

上面介绍了三种常用的推理方式,并分析了每种方式的优点和不足之处。作为总结,以表格的方式描述如下:

 

推理方式名

优点

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

故障诊断专家系统研究之五-----推理机制及可信度算法 的相关文章

  • 使用 C# 登录《我的世界》

    我正在尝试为自己和一些朋友创建一个简单的自定义 Minecraft 启动器 我不需要启动 Minecraft 的代码 只需要登录的实际代码行 例如 据我所知 您过去可以使用 string netResponse httpGET https
  • 如何在多线程C++ 17程序中交换两个指针?

    我有两个指针 pA 和 pB 它们指向两个大的哈希映射对象 当pB指向的哈希图完全更新后 我想交换pB和pA 在C 17中 如何快速且线程安全地交换它们 原子 我是 c 17 的新手 2个指针的原子无等待交换可以通过以下方式实现 inclu
  • 以编程方式读取 SQL Server 查询计划建议的 SQL 特定执行的索引?

    如果我在 SSMS 中运行此命令 set showplan xml on GO exec some procedure arg1 arg2 arg3 GO set showplan xml off GO 我获得查询执行中涉及的完整调用堆栈的
  • 如何判断计算机是否已重新启动?

    我曾经使用过一个命令行 SMTP 邮件程序 作为试用版的限制 它允许您在每个 Windows 会话中最多接收 10 封电子邮件 如果您重新启动计算机 您可能还会收到 10 个以上 我认为这种共享软件破坏非常巧妙 我想在我的应用程序中复制它
  • JNI 将 Char* 2D 数组传递给 JAVA 代码

    我想从 C 代码通过 JNI 层传递以下指针数组 char result MAXTEST MAXRESPONSE 12 12 8 3 29 70 5 2 42 42 在java代码中我写了以下声明 public static native
  • 如何填充 ToolStripComboBox?

    我发现它很难将数据绑定到ToolStripComboBox 好像没有这个ValueMember and DisplayMember特性 怎么绑定呢 访问toolstripcombobox中包装的组合框并访问其ValueMember Disp
  • 为什么在 WebApi 上下文中在 using 块中使用 HttpClient 是错误的?

    那么 问题是为什么在 using 块中使用 HttpClient 是错误的 但在 WebApi 上下文中呢 我一直在读这篇文章不要阻止异步代码 https blog stephencleary com 2012 07 dont block
  • 查看 NuGet 包依赖关系层次结构

    有没有一种方法 文本或图形 来查看 NuGet 包之间的依赖关系层次结构 如果您使用的是新的 csproj 您可以在此处获取所有依赖项 在项目构建后 项目目录 obj project assets json
  • unordered_map 中字符串的 C++ 哈希函数

    看起来 C 标准库中没有字符串的哈希函数 这是真的 在任何 c 编译器上使用字符串作为 unordered map 中的键的工作示例是什么 C STL提供模板专业化 http en cppreference com w cpp string
  • 在Linux中,找不到框架“.NETFramework,Version=v4.5”的参考程序集

    我已经设置了 Visual studio 来在我的 Ubuntu 机器上编译 C 代码 我将工作区 我的代码加载到 VS 我可以看到以下错误 The reference assemblies for framework NETFramewo
  • 使用valgrind进行GDB远程调试

    如果我使用远程调试gdb我连接到gdbserver using target remote host 2345 如果我使用 valgrind 和 gdb 调试内存错误 以中断无效内存访问 我会使用 target remote vgdb 启动
  • IQueryable 单元或集成测试

    我有一个 Web api 并且公开了一个端点 如下所示 api 假期 name name 这是 Web api 的控制器 get 方法 public IQueryable
  • C++ int 前面加 0 会改变整个值

    我有一个非常奇怪的问题 如果我像这样声明一个 int int time 0110 然后将其显示到控制台返回的值为72 但是当我删除前面的 0 时int time 110 然后控制台显示110正如预期的那样 我想知道两件事 首先 为什么它在
  • C++ 中的双精度型数字

    尽管内部表示有 17 位 但 IEE754 64 位 浮点应该正确表示 15 位有效数字 有没有办法强制第 16 位和第 17 位为零 Ref http msdn microsoft com en us library system dou
  • 高效列出目录中的所有子目录

    请参阅迄今为止所采取的建议的编辑 我正在尝试使用 WinAPI 和 C 列出给定目录中的所有目录 文件夹 现在我的算法又慢又低效 使用 FindFirstFileEx 打开我正在搜索的文件夹 然后我查看目录中的每个文件 使用 FindNex
  • 打印大型 WPF 用户控件

    我有一个巨大的数据 我想使用 WPF 打印 我发现WPF提供了一个PrintDialog PrintVisual用于打印派生的任何 WPF 控件的方法Visual class PrintVisual只会打印一页 因此我需要缩放控件以适合页面
  • OpenGL:仅获取模板缓冲区而没有深度缓冲区?

    我想获取一个模板缓冲区 但如果可能的话 不要承受附加深度缓冲区的开销 因为我不会使用它 我发现的大多数资源表明 虽然模板缓冲区是可选的 例如 排除它以利于获得更高的深度缓冲区精度 但我还没有看到任何请求并成功获取仅 8 位模板缓冲区的代码
  • 在 Windows Phone silverlight 8.1 上接收 WNS 推送通知

    我有 Windows Phone 8 1 silverlight 应用程序 我想使用新框架 WNS 接收通知 我在 package appxmanifest 中有
  • 如何在richtextbox中使用多颜色[重复]

    这个问题在这里已经有答案了 我使用 C windows 窗体 并且有 richtextbox 我想将一些文本设置为红色 一些设置为绿色 一些设置为黑色 怎么办呢 附图片 System Windows Forms RichTextBox有一个
  • OpenCV SIFT 描述符关键点半径

    我正在深入研究OpenCV的SIFT描述符提取的实现 https github com Itseez opencv blob master modules nonfree src sift cpp 我发现了一些令人费解的代码来获取兴趣点邻域

随机推荐

  • 使用pip安装package的时候,如何不使用cache的文件,重新下载(防止package之间版本不匹配)

    我们在使用pip安装某一个package的时候 如果安装的有问题向卸载之后重新安装 卸载 pip uninstall mediapipe 重新安装 pip install mediapipe 但是 执行命令之后发现使用了cached的whe
  • CSerialPort教程4.3.x (2) - CSerialPort源码简介

    CSerialPort教程4 3 x 2 CSerialPort源码简介 前言 CSerialPort项目是一个基于C C 的轻量级开源跨平台串口类库 可以轻松实现跨平台多操作系统的串口读写 同时还支持C Java Python Node
  • 位运算符介绍(二):Java位运算符

    Java语言提供了7个位操作运算符 这些运算符只能用于整型操作数 这些整数操作数包括long int short char和byte 这里注意 相对于C C Java多了一个位运算符 gt gt gt 整型操作数也多了一个byte类型 C
  • 【建议收藏】机器学习模型构建(一)——建模调参(内附代码)

    引言 在前一阶段的学习中 我们完成了数据预处理等上游操作 接下来就要开始进行模型的构建 构建模型 sklearn中提供各种机器学习模型的类供我们使用 我们要根据我们的业务逻辑进行相关的筛选进行构建调参 在本例中我将使用sklearn内置的数
  • 机器学习--特征选择(Python代码实现)

    转自 每日一Python 微信公众号 特征选择就是从原始特征中选取一些最有效的特征来降低维度 提高模型泛化能力减低过拟合的过程 主要目的是剔除掉无关特征和冗余特征 选出最优特征子集 常见的特征选择方法可以分为3类 过滤式 filter 包裹
  • 重磅:Kafka 迎来 1.0.0 版本,正式告别四位数版本号!

    Kafka 从首次发布之日起 已经走过了七个年头 从最开始的大规模消息系统 发展成为功能完善的分布式流式处理平台 用于发布和订阅 存储及实时地处理大规模流数据 来自世界各地的数千家公司在使用 Kafka 包括三分之一的 500 强公司 Ka
  • OpenCV中基于LBP算法的人脸检测测试代码

    下面是OpenCV 3 3中基于CascadeClassifier类的LBP算法实现的人脸检测 从结果上看 不如其它开源库效果好 如libfacedetection 可参考 https blog csdn net fengbingchun
  • 自动控制原理-频率特性 G(jw ) 定义

    目录 预先的知识点 正题 定义一 物理定义 定义二 定义三 理解即可 不要求掌握 运用 预先的知识点 1 复数 一般定义
  • 超高频RFID读写器构建医疗化验全程RFID跟踪管理系统

    1 背景 Ambient ID发布了超高频UHF Gen 2 RFID系统的解决方案 使用Trimble旗下Thingmagic超高频RFID读写器 用来跟踪那些从医院到化验室里进行诊断测试的标本瓶 标本瓶里盛有人体组织或血液 这个方案可以
  • dnsmasq安装

    一 dnsmasq下载 下载地址 Index of dnsmasq 二 dnsmasq配置 决定dnsmasq支持什么功能是通过修改src config h 需要的XX功能通过 define XX make时 XX功能编译到dnsmasq命
  • JavaScript中的iterable

    遍历Array可以采用下标循环 遍历Map和Set就无法使用下标 为了统一集合类型 ES6标准引入了新的iterable类型 Array Map和Set都属于iterable类型 具有iterable类型的集合可以通过新的for of循环来
  • Laravel初探——安装

    安装Composer 1 curl sS https getcomposer org installer php 2 mv composer phar usr local bin composer 3 composer install 安装
  • Java之美[从菜鸟到高手演变]之设计模式二

    在阅读过程中有任何问题 请及时联系 egg 邮箱 xtfggef gmail com 微博 http weibo com xtfggef 如有转载 请说明出处 http blog csdn net zhangerqing 我们接着讨论设计模
  • 变量的声明和定义

    1 声明和定义的区别 变量声明规定了变量的类型和名字 而定义是在声明的基础上还开辟了存储空间 可能还会为变量初始化一个初始值 2 c 为什么要将声明和定义分开 c 支持分离式编译机制 允许将程序分割为若干个文件 每个文件可被独立编译 而为了
  • 华为云云耀云服务器L实例评测

    目录 引出 起因 si因 解决报错 诶嘿 连上了 不出意外 就出意外了 打开数据库 what 找华为云求助 教训 备份 教训 密码 解决 1 改密码 2 新建一个MySQL 密码设置复杂一点 3 开启 binlog备份 MySQL的binl
  • Java二维数组静态以及动态初始化方法

    import java util Random public class test2 public static void main String args 二维数组静态初始化 int arr 1 2 3 4 5 6 7 8 9 Syste
  • java8 函数式接口与 Lambda 表达式

    函数式接口与 Lambda 表达式 1 函数式接口 举例复习接口的匿名实现 函数式接口 2 Lambda表达式 什么是Lambda Lambda的几种编写规则解释示例 Lambda 的方法引用与构造器引用 方法引用的解释与编写 方法引用示例
  • Winform实现ComboBox模糊查询

    1 新增项目 using System using System Collections Generic using System ComponentModel using System Data using System Drawing
  • 【Web3 系列开发教程——创建你的第一个 NFT(7)】创建一个 NFT DApp,给你的 NFT 赋予属性,例如图片

    在本文中 你将构建一个 NFT 铸币机 并学习如何通过使用 Metamask 和 Web3 工具将你的智能合约连接到 React 前端 来创建一个NFT dApp 我认为 对于具备 Web2 开发背景的开发者来说 最大的挑战之一是弄清楚如何
  • 故障诊断专家系统研究之五-----推理机制及可信度算法

    推理机制及可信度算法 在第三章和第四章中讨论了如何表示燃气轮机专家的知识以及如何把这些知识存储到知识库之中 即关于知识表示和知识库的问题 而故障诊断专家系统的另一个核心组件就是基于知识的诊断推理机 本章在前两章讨论的知识表示和知识库的基础之