APP下载

基于虚拟现实的化工厂救援客观推理系统设计

2015-12-23朱群雄

计算机工程与设计 2015年8期
关键词:推理机脚本表达式

张 琪,王 瑜,徐 圆,朱群雄

(北京化工大学 信息科学与技术学院,北京100029)

0 引 言

传统的应急救援[1,2]推理一般采取两种方式:①案例推理[3-5],系统通过对输入数据进行决策分析,得出最优解决方案,此类系统必须花费大量时间更新和维护知识库[6];②既定流程推理方式,系统通过对文本预案进行剖析组合,形成固定流程的节点序列,利用虚拟现实技术重现演练流程[7,8],此类系统的演练流程固定不变,且必须由指定的员工执行唯一正确操作,否则系统无法完成所有演练任务推演。

针对以上问题,本文提出了一种以物理实体为对象的客观推理系统。系统采用XML配置文件[9]来构建客观对象的推理状态关系集合,客观推理机通过读取配置文件来构建具有多种状态映射关系的推理关系树,而一个状态内具体包含的执行语句序列则由状态对应的脚本文件控制。最终,根据初始条件,客观推理机重复轮询已经满足要求的状态节点,通过消息通信模块使之与对应脚本关联[10],从而调用相应函数接口,改变虚拟人物或设备的状态。实验结果表明,化工厂的虚拟现实救援演练中,系统可以根据客观对象状态的改变来执行不同的演练流程分支,提高了虚拟应急演练的多样性和适应性。

1 客观推理仿真系统的设计与实现

图1描述了客观推理仿真系统的系统模块结构。本系统总体分为4大功能模块:状态配置模块、通信模块、客观推理模块、应急预案脚本模块。状态配置模块负责用文本预案中的抽象逻辑管理构建客观推理的逻辑关系树;通信模块负责消息发送、接收和处理,是客观推理模块和三维仿真部分的重要连接枢纽;客观推理模块负责遍历逻辑关系树,从而查找满足条件的状态和表达式,并通过luabind将推理机和脚本预案连接,达到执行客观推理仿真的目标。

图1 系统模块结构

1.1 配置文件解析模块

配置文件是以XML数据库形式存储的应急演练逻辑关系,客观推理机通过解析特定的文本格式,将客观对象的状态集合、表达式集合以及对应的推导关系集合存入树形逻辑关系结构,方便演练过程中对任务的执行逻辑进行推导。

(1)状态集合

<state id="0"funcName="smog1"branch="br1_1">smog_state1</state>

状态是客观推理过程的基本单位,一个客观对象可以拥有多个状态,但每个状态只属于一个客观对象。客观推理机的每一个对象及其状态都与一个预案脚本唯一对应,脚本内的一个状态又可以包含若干不可分割的元操作序列。id是状态的唯一标识码,funcName是该状态所属的预案脚本名称,branch是状态的分支标签,smog_state1 是状态的名称。

(2)状态转移集合

<transition backward="0"forward="1"/>

通过状态的唯一标识码id来构建状态间的逻辑推导关系,包括一对一、一对多、多对一的状态关系映射。backward表示推导的前件,forward表示推导的后件,经由客观推理机解析后,上述XML 语句会构建一条状态id=0到状态id=1的推导关系,要执行状态id=1,则至少要保证状态id=0已经执行完毕。

(3)表达式集合

<expression id="0"type="no_op"fact="a">expr1 </expression>

表达式可以理解为状态执行所必须满足的条件,不同的type产生结果的方式不同,而只有当结果为true,才说明该表达式已经完成。id 是表达式唯一标识码,表达式type具有4种类型,分别是no_op (无操作)、not(非)、and (与)、or(或),fact作为标准事实,作用是根据不同的type和表达式产生bool值,从而决定该表达式的完成状态。

(4)表达式转移集合

<extransition type="bro-bro"backward="0"forward="1"/>

表达式转移集合的作用就是根据type类型,将表达式的前后件以对应关系存储。表达式转移的type具有2种类型:parent-child(父子节点)、bro-bro(兄弟节点)。

(5)状态—表达式转移集合

<exstate type="ex-state"backward="0"forward="58"/>

该集合的作用是完善推理逻辑关系树,当表达式的运算结果为true时,客观推理机通过该转移集合完成表达式到状态的迁移推演。作为现实世界的抽象,迁移关系只能由表达式到状态,反之则不行。

1.2 通信模块

作为客观推理系统和虚拟现实三维仿真部分的连接纽带,利用先进先出的消息队列来存储待处理的原始消息内容,所有消息都以字符串形式存储,再通过对字符串分段解析,得到对应的传递参数,从而完成消息的格式转换和发送。通信模块从三维仿真部分接收消息并提取待恢复执行的脚本文件名和脚本执行状态标签,然后由客观推理机在内部轮询查找待恢复脚本文件中满足条件的文件,最后恢复相应的脚本,将执行指令经由通信模块传递给三维仿真部分进行操作,同时实时监听指令执行的反馈结果。

1.3 客观推理机和脚本的协同工作机制

客观推理系统用C++设计编写,脚本预案用lua脚本语言设计编写,二者通过luabind实现通信。

(1)lua脚本调用C++函数

luabind提供了将C++类对象注册给lua脚本调用的方法,可以让lua脚本调用C++数据成员、重载操作符和成员函数。

luabind采用module方式将C++类对象的内容提供给lua脚本调用。比如要注册vector3类,那么首先要申明类名vector3,并注册具有3个形参的构造函数constructor<double,double,double> (),这相当于在lua和vector3之间建立起一个连接。然后可以使用.def_readwrite("x",&vector3::x)方法注册vector3 类的数据成员x,使用.def(self==vector3())方法注册vector3 的==操作符,从而让lua脚本能使用此操作符进行vector3类对象的不同数据成员的比较。也可以使用.def("register",&vector3::register)方法注册vector3 的成员函数regiseter(),实现lua脚本调用C++类的成员函数。

(2)C++函数读写lua脚本变量

luabind::object table=luabind::globals(Lua);table["person"]="true";

通过luabind库的globals函数可以得到lua脚本全局变量列表,然后以待修改变量名为参数,可以让C++通过luabind修改lua脚本对应全局变量的值。

(3)lua协程和虚拟机

客观推理机只是负责状态和表达式的推导,但它们所对应脚本文件恢复 (resume)和挂起 (yield)需要lua的协程机制完成,脚本文件语句的执行状态需要lua 虚拟机控制。

lua协程是多任务处理的一种机制,协程的执行控制权是由程序显示告知的,可以对协程进行resume和yield操作,由此控制应急演练的多任务。每一次yield之前都必须调用register()函数来告诉推理机下次应当恢复的脚本名称。

lua虚拟机创建成功后会生成一个栈,将对应lua脚本的待执行语句顺序存入栈,配合lua协程,将执行完毕的语句出栈,使得栈中永远保存未执行语句序列,保证顺序流程下的lua语句不会重复执行。

1.4 推理机模块

客观推理机以状态和表达式为基础节点,以设备为对象对应急演练流程进行推理,推理机制的建立并非依托于指定的参演真人角色的特定任务,而是由客观对象间关联属性决定。如石化工厂物料罐起火事件会推演出消防员喷水救火事件,火势的减少乃至熄灭过程并不必须由特定消防员在特定时刻进行特殊类型喷水来完成,在客观推理机制下,对火焰和水等粒子对象都赋予相关属性,火焰熄灭的必要条件是一定数量的水粒子与其发生作用,抑制火焰粒子自生长。本文提及的客观推理机制涉及以下4个方面的推理:

(1)正向推理

应急救援演练设备之间的关联性大多都可以由正向推理来完成。当待执行状态的所有前件都执行完毕,且没有表达式约束或者约束结果为true,那么推理机就会恢复状态所对应的lua脚本文件,执行lua文件内的相关语句序列,直到第一次遇到coroutine.yield()才将lua脚本的协程挂起,实时监听客观推理机对脚本的resume操作。正向推理一般用于对应急救援演练具有决定性质的设备灾害的推演,因为这样的节点事件一旦发生就具有不可挽回性,更加符合演练真实情况。

(2)表达式推理

表达式作为状态执行的必要条件,其自身拥有单体或倒序多叉树结构,能够满足条件之间的与、或、非组合。no_op是判断演练过程的fact与标准fact的一致性,not可以看做no_op的取非操作,以上二者都是针对单体表达式;而and和or分别表示将当前父节点的fact值与其所有孩子节点做与、或操作,是针对倒序多叉树结构的表达式集合。只有当应急演练过程中某一表达式经过type运算后,得到的fact结果为true,才能继续流程的推导。

(3)可逆推理

状态是客观推理系统的基础不可分割节点,但状态同时也对应这lua脚本内的一段语句序列。当客观推理机将执行主动权交给脚本系统时,所有满足条件的lua脚本文件都会自动执行,直到遇到yield。利用这一特性,本系统实现了应急救援演练的非决定性可逆流程的关联操作。

以阀门valve为推理对象,根据valve的状态来控制water粒子的产生和消失。在每次的yield 之前必须通过register()函数来通知客观推理机,下次恢复的Script-Name。当真人操作valve对象,客观推理机会将执行主动权交给脚本,脚本进入while循环尝试判断water粒子的状态。这样的推理一直持续到真人提交done 操作,此时break跳出循环,同样会跳过下一次yield,这样便可以执行到state_work_done("water_state1")通知推理机产生water粒子的状态已经完成。

(4)多分支推理

多分支推理是根据关键事件结果的不一致性来推演出不同演练流程。系统通过配置文件来设置分支变量值,再通过lua脚本的goto跳转语句实现分支的迁移,每一个分支对应一个客观对象的基本状态。

图2为客观推理机4种推理机制的混合结构,每一个圆圈序号表示一个状态或表达式,每一个状态都至少对应一个lua脚本文件,支持若干可逆推理流程。图2以石化厂区罐体起火的应急救援流程为例,不同标签对应含义如下:0表示物料罐起火,1表示打电话给消防部门,2表示开喷淋阀门给罐体降温,3表示出现黑色浓烟,4表示根据火势对周围的影响来选择不同的分支流程,branch_1表示火焰引发左侧罐体着火的应急救援流程,branch_2表示火焰熄灭的应急救援流程。

图2 推理流程结构

客观推理机执行后便轮询可执行状态,此时物料罐起火并伴有黑烟。此时系统推演出应当打电话并给罐体降温,接着根据火势的影响推演出不同的分支流程。由于救火不利可能导致次生灾害,引燃左侧物料罐,若恰好火焰燃点满足表达式e6条件,客观推理机便恢复branch_1的状态5对应脚本的执行主动权。也可能由于喷水及时,火势得到控制,则客观推理机会恢复branch_2的状态9对应脚本的执行主动权。

2 应用实例

本文提出的基于虚拟现实的化工厂救援客观仿真推理系统在某石化企业罐区应用并取得显著效果。

图3所示为巡检人员吸入硫化氢气体中毒倒地后触发报警,救援人员用担架逆风向将其送至安全位置的仿真过程,涉及正向和多分支推理。人员中毒倒地正向地触发报警救人状态,但人员救治是否及时则会产生不同的分支,救治成功则可继续进行隔离毒气的流程推演,救治失败则应急救援演练失败。

图4所示为物料罐起火后,消防人员开喷淋罐阀给罐体降温避免罐体爆炸的仿真过程,过程涉及可逆和表达式推理。当物料罐起火,人员开启喷淋罐阀则环绕罐体的水环出现,关闭阀门则水环消失,这一过程可以反复操作查看效果,直到最终确认提交才判定状态是否完成。而火焰熄灭的前提表达式条件则是足够的水粒子和火焰粒子发生作用,导致火焰熄灭。

图3 应急救援案例的伤员救治仿真

图4 应急救援案例的起火救援仿真

3 结束语

本文针对传统应急演练的不足,以客观设备为推理对象,仿真实现了面向化工安全的应急救援流程。本系统以客观设备为对象抽取并建立设备之间的逻辑关系,混合使用了正向、可逆、表达式和多分支这4种推理方式,利用客观推理机驱动应急演练脚本,所构建的推理逻辑关系树中状态的完成度只和客观对象自身相关,而无需指定特定人员完成该状态。本文所提出的客观推理系统能够快速适应石化厂区应急演练需求的变化,且在仿真演练过程中,会根据操作人员的不同操作产生不同的演练流程,增加了演练的多样性,有助于提高受训人员的反应能力。

[1]GAO Zhiying,ZHU Qunxiong.Simulation of wavy dynamic effect of wheat fields based on VRML [J].Journal of Computer Applications,2009,29 (6):332-334 (in Chinese).[郜智英,朱群雄.基于VRML 的风中麦浪波动效果模拟 [J].计算机应用,2009,29 (6):332-334.]

[2]FENG Xianfu,ZHANG Zaoping.Analysis on chemical industry park emergency drill escape paths based on WebGIS [J].Procedia Engineering,2012,45:722-726.

[3]WANG Junjie,CAI Zhicong,ZHU Qunxiong.Design and development of virtual plant system of simulation for security[J].Computers and Applied Chemistry,2011,28 (3):338-342 (in Chinese).[王俊杰,蔡志聪,朱群雄.虚拟工厂安全仿真系统设计与实现 [J].计算机与应用化学,2011,28(3):338-342.]

[4]Liu Wenmao.Emergency resources demand prediction using case-based reasoning [J].Safety Science,2011,50 (3):530-534.

[5]JIANG Zhiying,ZHU Qunxiong,XU Yuan.A mechanism simulation platform of real-time intervention for chemical security based on virtual reality technology [J].Computers and Applied Chemistry,2012,29 (11):1326-1330 (in Chinese).[江志英,朱群雄,徐圆.一种基于虚拟现实技术的化工安全实时干预机理仿真平台 [J].计算机与应用化学,2012,29(11):1326-1330.]

[6]Paula Potes Ruiz,Bernard Kamsu Foguem,Bernard Grabot.Generating knowledge in maintenance from experience feedback[J].Knowledge-Based Systems,2014,35 (3):1-17.

[7]LIU Yisong,WANG Lili,LI Qianqian.Automated reasoning of general game playing system based on state calculus [J].Computer Engineering and Design,2012,33 (1):328-331(in Chinese).[刘一松,王莉莉,李倩倩.基于状态演算的通用游戏系统的自动推理 [J].计算机工程与设计,2012,33(1):328-331.]

[8]Tal Sobol-Shikler.Automatic inference of complex affective states[J].Computer Speech and Language,2010,25 (1):45-62.

[9]Lin Xudong,Wang Ning.XML normalization based on entity segments[J].Information Sciences,2013,239:85-95.

[10]YI Tao,ZHU Qunxiong,LIU Pengtao.An emergency drilling-based fuzzy expert system for chemical safety [J].CIESC Journal,2011,62 (10):2818-2827 (in Chinese). [易涛,朱群雄,刘鹏涛.基于应急演练的化工安全模糊专家系统[J].化工学报,2011,62 (10):2818-2827.]

猜你喜欢

推理机脚本表达式
酒驾
安奇奇与小cool 龙(第二回)
一个混合核Hilbert型积分不等式及其算子范数表达式
表达式转换及求值探析
浅析C语言运算符及表达式的教学误区
面向对象的几何定理推导系统的设计与实现
快乐假期
基于Naive Bayesian算法改进的智能诊病系统研究
小编的新年愿望
继电保护整定计算模块的设计