2. 浙江华电乌溪江水利发电厂, 浙江 衢州 324000;
3. 西南石油大学 机电工程学院, 四川 成都 610500
2. Zhejiang Huadian Wuxi River Water Power Plant, Quzhou 324000, China;
3. School of Mechatronic Engineering, Southwest Petroleum University, Chengdu 610500, China
随着Alpha Go的问世,业界掀起了人工智能研究的热潮[1]。人工智能的研究者众多,研究成果显著。它涉及的领域有机器学习[2]、深度学习[3]、神经网络[4]、自然语言理解[5]和专家系统[6]等。相比之下,目前针对专家系统的研究较为冷门。专家系统在经历了一段研究热潮之后陷入了低谷,原因在于对知识获取的理论与方法研究[7]不足,又缺少知识获取与编辑的工具软件,同时构建知识库对领域专业知识的要求极高,致使知识库的质量很难得到保障。多年来对专家系统知识表示[8]、推理逻辑[9]研究比较成功,但在应用层面的研究[10-11]仍有所不足。目前已开发的专家系统软件[12-14],在知识表示和推理匹配上都有较好的实现,但是否能够推广还有待讨论,主要原因还是知识库质量仍有待提高。故障树分析本身是一种较好的知识获取工程方法,所以本文采用故障树表达形式来实现知识库的创建和编辑,能够较好地保证知识库的质量,通过接口与数据库/文档建立实时连接并进行封装存储,同时匹配连接事实证据数据库,进行推理诊断并生成故障报告。这样的工具系统可为领域专家、工程师在知识库的构建上提供有力的帮助。
1 问题分析与设计理念一般而言,科研原理样机可靠度不大于50%,民用产品(基于经济性考虑)可靠度为85%左右,航空或高精尖产品采用故障树分析后,可靠度可达99%以上,因此,将故障树分析方法作为知识获取的工程方法来构建知识库,对知识库的质量有一个较好的保障。
故障树分析是安全系统工程和可靠性分析中最重要的分析理论与方法,同时也是装备工程的知识获取方法。在安全性分析、可靠性分析的实践应用中,该方法可显著提高分析结果质量,因此将它作为知识获取软件的核心表达方式。
考虑到专家系统中故障推理诊断[15-16]的需要,采用故障树形式,它能更好地体现节点事件之间的逻辑关系,兼容定性和定量分析。
目前大多数专家系统故障诊断软件为C/S (client/server,客户/服务器)模式,而在大型知识库构建的实际工作中软件安装配置并不方便,也不能实现多人多工位构建知识库的功能,影响了知识库构建工作效率。针对C/S模式存在的局限性,本文采用J2EE技术[17-18],以构建B/S(browser/server,浏览器/服务器)模式的Web软件来实现局域网内数据共享访问。B/S模式可以实现大型知识库的多人同时在线构建。专家团队可以在局域网内通过客户端、移动端(手机、PAD (portable android device,便携式设备))访问网站并编辑知识库,并且各操作之间互不干扰和冲突。这种多人协作、互相分工的操作方式,提高了知识库构建的工作效率。
综上分析,本文设计的故障诊断系统的工作流程如图 1所示:专家团队通过知识库编辑软件构建知识库,接入相关测点数据并生成事实证据数据库;故障事件发生后,启动推理机,通过匹配知识库和事实证据数据库,自动智能诊断出故障原因并生成故障事件报告。
![]() |
图 1 故障诊断系统的工作流程 Fig.1 Working process of the fault diagnosis system |
为了使软件功能结构更为清晰,更利于程序员的操作维护,知识库工具软件采用MVC(model-view-control)模式设计[19]。软件整体分为3层架构,即持久层(model)、业务层(control)和页面层(view)。持久层:存储用户所编辑的知识模型。将知识模型用数据表存储在mysql数据库中,即知识库就是数据库。业务层:根据故障树模型属性要求和用户编辑输入的需要,设计页面的业务控制。页面层:给出用户界面,显示相关图形及数据信息。
2.1 故障树节点的数据结构设计知识库中的知识模型要具备以下特点:1)阐释基本知识信息;2)以故障树为核心表达方式;3)兼具推理的数据支持;4)记录故障的相关信息。因此,设计如表 1所示的节点的数据结构。用名称、详情、备注来阐释知识的基本信息;用节点头、节点尾、逻辑关系将知识以故障树节点间的关系表达;数据支持、节点层级则为推理提供支持;故障原因、发生时间、频次等为记录的故障的相关信息。
修饰符 | 类型 | 名称 | 作用 |
private(私有) | String(字符串) | istop | 相对顶事件,用于确认树图显示起点 |
private | Integer(整型数) | id | 事件ID(identity, 身份标识号码),用于管理事件的标志 |
private | String | head | 节点头,与pid作用建立节点的连接关系 |
private | String | nodename | 节点名称 |
private | String | description | 节点详情 |
private | String | remark | 节点备注信息 |
private | String | pid | 节点尾,与number作用建立节点的连接关系 |
private | String | door | 与或逻辑 |
private | Boolean(布尔型) | ishanppen | 数据支持,表示节点故障是否发生 |
private | Integer | nodelevel | 节点层级,即当前节点在故障树中所处的层级 |
private | String | reason | 故障原因 |
private | Date(时间型) | happentime | 故障发生时间 |
private | Integer | frequency | 故障发生频率 |
private | String | importance | 故障重要度 |
private | String | handresult | 故障的处理情况 |
数据库存储知识模型,设计数据库字段表达节点数据结构。建立节点的数据结构和数据库字段一一映射的关系,采用Mybatis框架技术实现mysql数据的自动封装。例如,数据库创建语句如下:
CREATE TABLE knowledge_base(id INT PRIMARY KEY AUTO_INCREMENT, istop VARCHAR(50), head VARCHAR(50), nodename VARCHAR(50), description VARCHAR(50), remark VARCHAR(50), pid VARCHAR(50), door VARCHAR(50), ishappen BOOLEAN, nodelevel INT, reason VARCHAR(50), happentime DATE, frequency INT, importance VARCHAR(50), handresult VARCHAR(50));
数据库中的一条条数据整体表达某一具体知识模型,数据(故障树节点)之间相互独立且互不干扰,利于大型知识库节点知识的搜索、匹配与跟踪。节点之间的关系是利用head和pid属性值将一条条的数据关联起来的,head和pid相同的节点为父子节点,一个pid可以与多个head对应,pid属性值为0表示为底节点事件。
知识库中的所有知识可以通过ID和节点名查找到,也可以通过节点之间的连接关系查找到,这样就建立了故障树节点的相互关系,从而在用户界面上将知识库表达为故障树形式。
2.3 业务层的逻辑方法设计根据逻辑判断推理和数据封装存储的需要,设计封装了如表 2的方法。通过这些方法,业务层可接受页面层的具体需求,并向数据库发送请求,对一条条的数据按照业务逻辑进行处理,待程序处理后,在用户界面上显示相关信息。
编号 | 方法名 | 作用 | 返回值及说明 |
1 | findBottonAll | 查找所有底层节点 | List所有底层节点集合 |
2 | findLevelAll | 查找当前层级的所有兄弟节点 | List所有当前层级节点集合 |
3 | findMaxLevel | 查找最大层级 | Int返回整数:当前故障树的最大深度 |
4 | findFather | 查找父节点 | Fault返回一个完整节点 |
5 | findById | 根据ID信息查找单个节点 | Fault返回一个完整节点 |
6 | findBrother | 查找兄弟节点(当前节点) | List当前节点的兄弟节点集合 |
7 | findAll | 查找所有节点 | List所有节点集合 |
8 | DeleteFault | 删除节点 | Void没有返回值 |
9 | UpdateFault | 更新节点 | Void没有返回值 |
10 | addFault | 添加节点 | Void没有返回值 |
11 | findTop | 查找顶事件 | Fault返回一个完整节点 |
12 | findSons | 查找所有子节点事件 | List返回可能多个节点集合 |
页面层主要提供图形用户界面,如图 2所示,主要显示故障树及故障诊断结果。
![]() |
图 2 知识库编辑与输入模块界面 Fig.2 Interface of knowledge base editing and inputing module |
在保证知识获取的质量的同时,本文还研究了知识模型多样性表达问题。根据实际需要,故障有3种不同命名方式,故障树表达需要与它相对应,以期满足诊断的各种需要。
3种故障概念表达方式为:
1) 以可观察参量给故障命名的知识模型表达与组织;
2) 以部件对象名给故障命名的知识模型表达与组织;
3) 以故障原因给故障命名的知识模型表达与组织。
3种故障概念表达方式的优缺点见表 3。
故障概念表达方式 | 优点 | 缺点 |
以可观察参量命名 | 简单,直接,高效 | 多个故障之间的关系无法确定 |
以部件对象名命名 | 多个故障报警,可以诊断故障发生范围 | 部件的命名方式不够精准 |
以故障原因命名 | 故障原因清晰明了 | 需要非常丰富的专业知识 |
这3种概念表达方式之间有着直接和间接联系,如以可观察参量为父节点,其子节点可以部件名命名,也可以故障原因命名。这种关系类比于医生治病:第一,可观察参量好比人发热,统一命名为“热病”,目的在于快速诊断病灶类型;第二,根据病灶位置进行命名,例如胃病、肺病等,并进一步诊断出具体病因;第三,根据各类病因及其机制命名疾病,可以预测疾病的程度和影响范围。完整的故障树表达应该是由这3种概念表达方式组成的,以参量数据和部件名为对象分析,可以确定故障影响范围,以具体原因为对象分析,则可以确定故障传播方向与路径。
4 知识库构建工具软件的实现根据需求分析及设计理念,本文开发了一套知识库构建工具软件,这里主要介绍知识库编辑与输入模块、推理模块。
4.1 知识库编辑与输入模块应用实例如图 2所示,知识库编辑与输入模块提供知识库的创建和编辑等功能。领域专家、工程师可以根据权限和需求创建新的知识库,新创建的知识库会自动刷新并添加到下拉框列表。在选择当前知识库后,就可以根据需求对当前选择的知识库进行相应的编辑操作。采用C3P0(数据库连接池)技术完成访问限制,设置连接池最大连接数为20,即目前最多同时允许20个工程师操作同一个知识库。
事件列表显示内容包括事件名、逻辑门关系、详细信息、备注和子事件个数。功能操作包括修改、添加子事件、删除、设置为顶事件显示等。
具体的操作功能如下:
1) 修改。点击“修改”,跳转至事件修改页面。页面信息包括当前修改事件的事件名、父节点名、与或关系、详细信息、备注以及是否有下级子节点等。
设计方法的具体实现:如上文逻辑方法设计,首先根据findById方法查找到当前节点事件,然后根据findFather查找到当前的父节点事件,再根据当前节点的pid属性遍历查找到所有子节点信息,一并输送显示。
2) 添加子事件。点击“添加子事件”,跳转至添加子事件页面。页面信息包括当前添加子事件的事件名、新添加事件的事件名、备注、详细信息以及与或关系等。
设计方法的具体实现:首先根据findById方法查找到当前节点事件,并根据其pid属性进行判断——如果pid属性值不为0(非底事件),则直接调用addFault方法添加子节点事件;如果pid属性值为0(底事件),先修正当前节点事件为中间事件,再调用addFault方法添加子节点事件。
3) 删除。设置顶事件为不可删除,其余事件均为可删除。如果删除的节点含有后代节点,则一并删除其包含的所有后代节点。
4) 设置为顶事件显示。故障树的显示默认为5层高度,但知识库的创建为无限层。
4.2 推理模块应用实例故障树的推理分析算法已较为成熟[20-21],本文采用的推理算法为向上搜索。
以乌溪江湖南镇电站5号水电机组开机过程为例。所构建的故障树见图 3,推理机根据开机命令,自动读入知识库模型后,开始自动智能遍历。首先根据findMaxLevel方法查找到最大层级,循环遍历,层级递减,每一层循环进行以下逻辑判断:根据方法findBottonAll查找到所有底事件,并从事实证据数据库读入数据,遍历所有底层事件与相关数据匹配,ishappen记录真假属性,同时,根据方法findFather和findBrother查找到当前节点的父节点和兄弟节点,根据兄弟节点的数据支持属性ishappen和父节点的逻辑门属性door,记录父节点的ishappen属性值,递归向上搜索。最终诊断结果如图 4所示, 为:主轴密封水电磁阀未能成功开启,导致开机未能成功。
![]() |
图 3 乌溪江湖南镇电站5号水电机组开机流程故障树 Fig.3 Fault tree of starting process for No.5 hydroelectric generating unit of Wuxi River Hunanzhen power station |
![]() |
图 4 乌溪江湖南镇电站5号水电机组开机故障诊断结果 Fig.4 Diagnostic result of starting fault for No.5 hydroelectric generating unit of Wuxi River Hunanzhen power station |
为了提高知识库质量,提高知识库构建的工作效率,本文设计开发了以故障树为核心理念的知识库构建工具软件,得到如下结论:
1) 故障树分析本身是较好的工程知识获取方法,将它作为工具软件开发的核心理念,可很好地适应工程师思维逻辑的方式,显著提高所构建的知识库的质量。
2) 以B/S模式实现多人协作分工构建知识库的功能,对比传统C/S模式,可提高知识库构建的工作效率。
3) 故障概念多样性表达的故障树节点,可更形象地阐释知识库的节点信息,能够满足各种故障诊断需要,表达出故障诱因、故障传播方向和故障影响范围。
总而言之,专家系统对于设备故障问题诊断准确与否,取决于构建的知识库质量的高低,即其正确性、一致性和相对完备性。对于一般工程装备的故障诊断,本文所开发的知识库构建工具软件能够对所构建知识库的质量给予基本保障。但对于大型且复杂程度较高、专业知识要求更高的装备,需要有新的复杂系统认知理论与方法的研究成果,来支持知识库质量的进一步提高。
[1] |
贺倩.
人工智能技术在移动互联网发展中的应用[J]. 电信网技术, 2017(2): 1–4.
HE Qian. The application of artificial intelligence technology in the development of mobile internet[J]. Telecommunications Network Technology, 2017(2): 1–4. |
[2] |
蒋鹏.
机器学习在风险评估中的应用研究[J]. 电子技术与软件工程, 2017(23): 171.
JIANG Peng. Application of machine learning in risk assessment[J]. Electronic Technology and Software Engineering, 2017(23): 171. |
[3] |
张军阳, 杨慧丽, 郭阳, 等.
深度学习相关研究综述[J]. 计算机应用研究, 2018, 35(7): 1921–1928, 1936.
ZHANG Jun-yang, YANG Hui-li, GUO Yang, et al. Review of deep learning[J]. Application Research of Computers, 2018, 35(7): 1921–1928, 1936. |
[4] |
章毅, 郭泉, 王建勇.
大数据分析的神经网络方法[J]. 工程科学与技术, 2017, 49(1): 9–19.
ZHANG Yi, GUO Quan, WANG Jian-yong. Big data analysis using neural networks[J]. Advanced Engineering Sciences, 2017, 49(1): 9–19. |
[5] |
姜永常, 金岩.
知识构建中基于自然语言理解的全信息获取与利用[J]. 图书情报工作, 2015, 59(6): 104–112.
JIANG Yong-chang, JIN Yan. Full information acquisition and utilization based on natural language understanding in knowledge construction[J]. Library and Information Work, 2015, 59(6): 104–112. |
[6] |
安茂春.
故障诊断专家系统及其发展[J]. 计算机测量与控制, 2008, 16(9): 1217–1219.
AN Mao-chun. A survey on fault diagnosis expert systems[J]. Computer Measurement & Control, 2008, 16(9): 1217–1219. |
[7] |
张伟, 张正松.
设备故障诊断知识获取方法的探讨[J]. 清华大学学报(自然科学版), 1998, 38(7): 102–106.
ZHANG Wei, ZHANG Zheng-song. Study on method of knowledge acquisition in malfunction diagnosis[J]. Journal of Tsinghua University (Science and Technology), 1998, 38(7): 102–106. |
[8] |
高国伟, 王亚杰, 李佳卉, 等.
基于知识元的知识库架构模型研究[J]. 情报科学, 2016, 34(3): 37–41.
GAO Guo-wei, WANG Ya-jie, LI Jia-hui, et al. Knowledge base frame structure research based on knowledge element[J]. Information Science, 2016, 34(3): 37–41. |
[9] |
靳留乾, 徐洋.
基于证据推理的确定因子规则库推理方法[J]. 计算机应用研究, 2016, 33(2): 347–361.
JIN Liu-qian, XU Yang. Certainty rule base inference method using evidential reasoning approach[J]. Application Research of Computers, 2016, 33(2): 347–361. DOI:10.3969/j.issn.1001-3695.2016.02.006 |
[10] |
刑立坤, 汪军, 徐洁.
故障诊断专家系统在水电厂的应用[J]. 集成技术, 2013, 2(1): 62–65.
XING Li-kun, WANG Jun, XU Jie. Application of fault diagnosis expert system to hydropower plant[J]. Journal of Integration Technology, 2013, 2(1): 62–65. |
[11] |
胡笑翔. 智能变电站故障诊断软件设计[D]. 成都: 西南交通大学电气工程学院, 2014: 7-63.
HU Xiao-xiang. Fault diagnosis software design for inteligent substation[D]. Chengdu: Southwest Jiaotong University, School of Electrical Engineering, 2014: 7-63. http://cdmd.cnki.com.cn/Article/CDMD-10613-1014252202.htm |
[12] |
曹利锋, 邹树梁, 唐德文.
基于VC++与MATLAB的故障树分析系统[J]. 计算机技术与发展, 2014, 24(1): 77–84.
CAO Li-feng, ZOU Shu-liang, TANG De-wen. Fault tree analysis system based on VC++ and MATLAB[J]. Computer Technology and Development, 2014, 24(1): 77–84. |
[13] |
李斌龙. 汽车制动专家系统推理机的建立及人机界面的设计[D]. 吉林: 吉林大学汽车工程学院, 2006: 1-82.
LI Bin-long. The reasoning machanism construction of auto braking expert system & its I/O internface design[D]. Jilin: Jilin University, College of Automotive Engineering, 2006: 1-82. http://cdmd.cnki.com.cn/Article/CDMD-10183-2007106460.htm |
[14] |
朱赵飞, 包腾飞, 潘建波. 基于故障树知识的大坝安全诊断方法[J]. 水电自动化与大坝监测, 2006, 30(5): 40-42.
ZHU Zhao-fei, BAO Teng-fei, PAN Jian-bo. Fault tree knowledge-based dam safety diagnosis, 2006, 30(5): 40-42. http://www.wanfangdata.com.cn/details/detail.do?_type=perio&id=dbgcytgcs200605012 |
[15] |
卢延鑫.
经典逻辑在人工智能知识推理中的应用[J]. 软件导刊, 2008, 7(1): 22–24.
LU Yan-xin. The application of classical logic on knowledge reasoning of artificial intelligence[J]. Software Guide, 2008, 7(1): 22–24. |
[16] |
陈正, 李华旺, 常亮.
基于故障树的专家系统推理机设计[J]. 计算机工程, 2012, 38(11): 228–250.
CHEN Zheng, LI Hua-wang, CHANG Liang. Design of inference engine for expert system based on fault tree[J]. Computer Engineering, 2012, 38(11): 228–250. DOI:10.3969/j.issn.1000-3428.2012.11.070 |
[17] |
明日科技.
Java从入门到精通[M]. 北京: 清华大学出版社, 2016: 3-212.
Tomorrow Science and Technology. Java from entry to mastery[M]. Beijing: Tsinghua University Press, 2016: 3-212. |
[18] |
赵满来.
可视化Java GUI程序设计教程[M]. 北京: 清华大学出版社, 2015: 3-117.
ZHAO Man-lai. Visual Java GUI program design tutorial[M]. Beijing: Tsinghua University Press, 2015: 3-117. |
[19] |
谢强. 基于MVC模式的物资管理系统的设计与实现[D]. 兰州: 兰州理工大学计算机与通信学院, 2016: 4-58.
XIE Qiang. Design and implementation of material management system based on MVC[D]. Lanzhou: Lanzhou University of Technology, School of Computer and Communication, 2016: 4-58. http://www.wanfangdata.com.cn/details/detail.do?_type=degree&id=D01028088 |
[20] |
司景萍, 马继昌, 牛家骅, 等.
基于模糊神经网络的智能故障诊断专家系统[J]. 振动与冲击, 2017, 36(4): 164–171.
SI Jing-ping, MA Ji-chang, NIU Jia-hua, et al. An intelligent fault diagnosis expert system based on fuzzy neural network[J]. Journal of Vibration and Shock, 2017, 36(4): 164–171. |
[21] |
郭永晋, 孙丽萍.
基于矩阵的故障树分析方法[J]. 哈尔滨工程大学学报, 2016, 37(7): 854–859.
GUO Yong-jin, SUN Li-ping. Fault tree analysis method based on a matrix[J]. Journal of Harbin Engineering University, 2016, 37(7): 854–859. |