張 琪,王 瑜,徐 圓,朱群雄
(北京化工大學(xué) 信息科學(xué)與技術(shù)學(xué)院,北京100029)
傳統(tǒng)的應(yīng)急救援[1,2]推理一般采取兩種方式:①案例推理[3-5],系統(tǒng)通過對輸入數(shù)據(jù)進行決策分析,得出最優(yōu)解決方案,此類系統(tǒng)必須花費大量時間更新和維護知識庫[6];②既定流程推理方式,系統(tǒng)通過對文本預(yù)案進行剖析組合,形成固定流程的節(jié)點序列,利用虛擬現(xiàn)實技術(shù)重現(xiàn)演練流程[7,8],此類系統(tǒng)的演練流程固定不變,且必須由指定的員工執(zhí)行唯一正確操作,否則系統(tǒng)無法完成所有演練任務(wù)推演。
針對以上問題,本文提出了一種以物理實體為對象的客觀推理系統(tǒng)。系統(tǒng)采用XML配置文件[9]來構(gòu)建客觀對象的推理狀態(tài)關(guān)系集合,客觀推理機通過讀取配置文件來構(gòu)建具有多種狀態(tài)映射關(guān)系的推理關(guān)系樹,而一個狀態(tài)內(nèi)具體包含的執(zhí)行語句序列則由狀態(tài)對應(yīng)的腳本文件控制。最終,根據(jù)初始條件,客觀推理機重復(fù)輪詢已經(jīng)滿足要求的狀態(tài)節(jié)點,通過消息通信模塊使之與對應(yīng)腳本關(guān)聯(lián)[10],從而調(diào)用相應(yīng)函數(shù)接口,改變虛擬人物或設(shè)備的狀態(tài)。實驗結(jié)果表明,化工廠的虛擬現(xiàn)實救援演練中,系統(tǒng)可以根據(jù)客觀對象狀態(tài)的改變來執(zhí)行不同的演練流程分支,提高了虛擬應(yīng)急演練的多樣性和適應(yīng)性。
圖1描述了客觀推理仿真系統(tǒng)的系統(tǒng)模塊結(jié)構(gòu)。本系統(tǒng)總體分為4大功能模塊:狀態(tài)配置模塊、通信模塊、客觀推理模塊、應(yīng)急預(yù)案腳本模塊。狀態(tài)配置模塊負責(zé)用文本預(yù)案中的抽象邏輯管理構(gòu)建客觀推理的邏輯關(guān)系樹;通信模塊負責(zé)消息發(fā)送、接收和處理,是客觀推理模塊和三維仿真部分的重要連接樞紐;客觀推理模塊負責(zé)遍歷邏輯關(guān)系樹,從而查找滿足條件的狀態(tài)和表達式,并通過luabind將推理機和腳本預(yù)案連接,達到執(zhí)行客觀推理仿真的目標。
圖1 系統(tǒng)模塊結(jié)構(gòu)
配置文件是以XML數(shù)據(jù)庫形式存儲的應(yīng)急演練邏輯關(guān)系,客觀推理機通過解析特定的文本格式,將客觀對象的狀態(tài)集合、表達式集合以及對應(yīng)的推導(dǎo)關(guān)系集合存入樹形邏輯關(guān)系結(jié)構(gòu),方便演練過程中對任務(wù)的執(zhí)行邏輯進行推導(dǎo)。
(1)狀態(tài)集合
<state id="0"funcName="smog1"branch="br1_1">smog_state1</state>
狀態(tài)是客觀推理過程的基本單位,一個客觀對象可以擁有多個狀態(tài),但每個狀態(tài)只屬于一個客觀對象??陀^推理機的每一個對象及其狀態(tài)都與一個預(yù)案腳本唯一對應(yīng),腳本內(nèi)的一個狀態(tài)又可以包含若干不可分割的元操作序列。id是狀態(tài)的唯一標識碼,funcName是該狀態(tài)所屬的預(yù)案腳本名稱,branch是狀態(tài)的分支標簽,smog_state1 是狀態(tài)的名稱。
(2)狀態(tài)轉(zhuǎn)移集合
<transition backward="0"forward="1"/>
通過狀態(tài)的唯一標識碼id來構(gòu)建狀態(tài)間的邏輯推導(dǎo)關(guān)系,包括一對一、一對多、多對一的狀態(tài)關(guān)系映射。backward表示推導(dǎo)的前件,forward表示推導(dǎo)的后件,經(jīng)由客觀推理機解析后,上述XML 語句會構(gòu)建一條狀態(tài)id=0到狀態(tài)id=1的推導(dǎo)關(guān)系,要執(zhí)行狀態(tài)id=1,則至少要保證狀態(tài)id=0已經(jīng)執(zhí)行完畢。
(3)表達式集合
<expression id="0"type="no_op"fact="a">expr1 </expression>
表達式可以理解為狀態(tài)執(zhí)行所必須滿足的條件,不同的type產(chǎn)生結(jié)果的方式不同,而只有當(dāng)結(jié)果為true,才說明該表達式已經(jīng)完成。id 是表達式唯一標識碼,表達式type具有4種類型,分別是no_op (無操作)、not(非)、and (與)、or(或),fact作為標準事實,作用是根據(jù)不同的type和表達式產(chǎn)生bool值,從而決定該表達式的完成狀態(tài)。
(4)表達式轉(zhuǎn)移集合
<extransition type="bro-bro"backward="0"forward="1"/>
表達式轉(zhuǎn)移集合的作用就是根據(jù)type類型,將表達式的前后件以對應(yīng)關(guān)系存儲。表達式轉(zhuǎn)移的type具有2種類型:parent-child(父子節(jié)點)、bro-bro(兄弟節(jié)點)。
(5)狀態(tài)—表達式轉(zhuǎn)移集合
<exstate type="ex-state"backward="0"forward="58"/>
該集合的作用是完善推理邏輯關(guān)系樹,當(dāng)表達式的運算結(jié)果為true時,客觀推理機通過該轉(zhuǎn)移集合完成表達式到狀態(tài)的遷移推演。作為現(xiàn)實世界的抽象,遷移關(guān)系只能由表達式到狀態(tài),反之則不行。
作為客觀推理系統(tǒng)和虛擬現(xiàn)實三維仿真部分的連接紐帶,利用先進先出的消息隊列來存儲待處理的原始消息內(nèi)容,所有消息都以字符串形式存儲,再通過對字符串分段解析,得到對應(yīng)的傳遞參數(shù),從而完成消息的格式轉(zhuǎn)換和發(fā)送。通信模塊從三維仿真部分接收消息并提取待恢復(fù)執(zhí)行的腳本文件名和腳本執(zhí)行狀態(tài)標簽,然后由客觀推理機在內(nèi)部輪詢查找待恢復(fù)腳本文件中滿足條件的文件,最后恢復(fù)相應(yīng)的腳本,將執(zhí)行指令經(jīng)由通信模塊傳遞給三維仿真部分進行操作,同時實時監(jiān)聽指令執(zhí)行的反饋結(jié)果。
客觀推理系統(tǒng)用C++設(shè)計編寫,腳本預(yù)案用lua腳本語言設(shè)計編寫,二者通過luabind實現(xiàn)通信。
(1)lua腳本調(diào)用C++函數(shù)
luabind提供了將C++類對象注冊給lua腳本調(diào)用的方法,可以讓lua腳本調(diào)用C++數(shù)據(jù)成員、重載操作符和成員函數(shù)。
luabind采用module方式將C++類對象的內(nèi)容提供給lua腳本調(diào)用。比如要注冊vector3類,那么首先要申明類名vector3,并注冊具有3個形參的構(gòu)造函數(shù)constructor<double,double,double> (),這相當(dāng)于在lua和vector3之間建立起一個連接。然后可以使用.def_readwrite("x",&vector3::x)方法注冊vector3 類的數(shù)據(jù)成員x,使用.def(self==vector3())方法注冊vector3 的==操作符,從而讓lua腳本能使用此操作符進行vector3類對象的不同數(shù)據(jù)成員的比較。也可以使用.def("register",&vector3::register)方法注冊vector3 的成員函數(shù)regiseter(),實現(xiàn)lua腳本調(diào)用C++類的成員函數(shù)。
(2)C++函數(shù)讀寫lua腳本變量
luabind::object table=luabind::globals(Lua);table["person"]="true";
通過luabind庫的globals函數(shù)可以得到lua腳本全局變量列表,然后以待修改變量名為參數(shù),可以讓C++通過luabind修改lua腳本對應(yīng)全局變量的值。
(3)lua協(xié)程和虛擬機
客觀推理機只是負責(zé)狀態(tài)和表達式的推導(dǎo),但它們所對應(yīng)腳本文件恢復(fù) (resume)和掛起 (yield)需要lua的協(xié)程機制完成,腳本文件語句的執(zhí)行狀態(tài)需要lua 虛擬機控制。
lua協(xié)程是多任務(wù)處理的一種機制,協(xié)程的執(zhí)行控制權(quán)是由程序顯示告知的,可以對協(xié)程進行resume和yield操作,由此控制應(yīng)急演練的多任務(wù)。每一次yield之前都必須調(diào)用register()函數(shù)來告訴推理機下次應(yīng)當(dāng)恢復(fù)的腳本名稱。
lua虛擬機創(chuàng)建成功后會生成一個棧,將對應(yīng)lua腳本的待執(zhí)行語句順序存入棧,配合lua協(xié)程,將執(zhí)行完畢的語句出棧,使得棧中永遠保存未執(zhí)行語句序列,保證順序流程下的lua語句不會重復(fù)執(zhí)行。
客觀推理機以狀態(tài)和表達式為基礎(chǔ)節(jié)點,以設(shè)備為對象對應(yīng)急演練流程進行推理,推理機制的建立并非依托于指定的參演真人角色的特定任務(wù),而是由客觀對象間關(guān)聯(lián)屬性決定。如石化工廠物料罐起火事件會推演出消防員噴水救火事件,火勢的減少乃至熄滅過程并不必須由特定消防員在特定時刻進行特殊類型噴水來完成,在客觀推理機制下,對火焰和水等粒子對象都賦予相關(guān)屬性,火焰熄滅的必要條件是一定數(shù)量的水粒子與其發(fā)生作用,抑制火焰粒子自生長。本文提及的客觀推理機制涉及以下4個方面的推理:
(1)正向推理
應(yīng)急救援演練設(shè)備之間的關(guān)聯(lián)性大多都可以由正向推理來完成。當(dāng)待執(zhí)行狀態(tài)的所有前件都執(zhí)行完畢,且沒有表達式約束或者約束結(jié)果為true,那么推理機就會恢復(fù)狀態(tài)所對應(yīng)的lua腳本文件,執(zhí)行l(wèi)ua文件內(nèi)的相關(guān)語句序列,直到第一次遇到coroutine.yield()才將lua腳本的協(xié)程掛起,實時監(jiān)聽客觀推理機對腳本的resume操作。正向推理一般用于對應(yīng)急救援演練具有決定性質(zhì)的設(shè)備災(zāi)害的推演,因為這樣的節(jié)點事件一旦發(fā)生就具有不可挽回性,更加符合演練真實情況。
(2)表達式推理
表達式作為狀態(tài)執(zhí)行的必要條件,其自身擁有單體或倒序多叉樹結(jié)構(gòu),能夠滿足條件之間的與、或、非組合。no_op是判斷演練過程的fact與標準fact的一致性,not可以看做no_op的取非操作,以上二者都是針對單體表達式;而and和or分別表示將當(dāng)前父節(jié)點的fact值與其所有孩子節(jié)點做與、或操作,是針對倒序多叉樹結(jié)構(gòu)的表達式集合。只有當(dāng)應(yīng)急演練過程中某一表達式經(jīng)過type運算后,得到的fact結(jié)果為true,才能繼續(xù)流程的推導(dǎo)。
(3)可逆推理
狀態(tài)是客觀推理系統(tǒng)的基礎(chǔ)不可分割節(jié)點,但狀態(tài)同時也對應(yīng)這lua腳本內(nèi)的一段語句序列。當(dāng)客觀推理機將執(zhí)行主動權(quán)交給腳本系統(tǒng)時,所有滿足條件的lua腳本文件都會自動執(zhí)行,直到遇到y(tǒng)ield。利用這一特性,本系統(tǒng)實現(xiàn)了應(yīng)急救援演練的非決定性可逆流程的關(guān)聯(lián)操作。
以閥門valve為推理對象,根據(jù)valve的狀態(tài)來控制water粒子的產(chǎn)生和消失。在每次的yield 之前必須通過register()函數(shù)來通知客觀推理機,下次恢復(fù)的Script-Name。當(dāng)真人操作valve對象,客觀推理機會將執(zhí)行主動權(quán)交給腳本,腳本進入while循環(huán)嘗試判斷water粒子的狀態(tài)。這樣的推理一直持續(xù)到真人提交done 操作,此時break跳出循環(huán),同樣會跳過下一次yield,這樣便可以執(zhí)行到state_work_done("water_state1")通知推理機產(chǎn)生water粒子的狀態(tài)已經(jīng)完成。
(4)多分支推理
多分支推理是根據(jù)關(guān)鍵事件結(jié)果的不一致性來推演出不同演練流程。系統(tǒng)通過配置文件來設(shè)置分支變量值,再通過lua腳本的goto跳轉(zhuǎn)語句實現(xiàn)分支的遷移,每一個分支對應(yīng)一個客觀對象的基本狀態(tài)。
圖2為客觀推理機4種推理機制的混合結(jié)構(gòu),每一個圓圈序號表示一個狀態(tài)或表達式,每一個狀態(tài)都至少對應(yīng)一個lua腳本文件,支持若干可逆推理流程。圖2以石化廠區(qū)罐體起火的應(yīng)急救援流程為例,不同標簽對應(yīng)含義如下:0表示物料罐起火,1表示打電話給消防部門,2表示開噴淋閥門給罐體降溫,3表示出現(xiàn)黑色濃煙,4表示根據(jù)火勢對周圍的影響來選擇不同的分支流程,branch_1表示火焰引發(fā)左側(cè)罐體著火的應(yīng)急救援流程,branch_2表示火焰熄滅的應(yīng)急救援流程。
圖2 推理流程結(jié)構(gòu)
客觀推理機執(zhí)行后便輪詢可執(zhí)行狀態(tài),此時物料罐起火并伴有黑煙。此時系統(tǒng)推演出應(yīng)當(dāng)打電話并給罐體降溫,接著根據(jù)火勢的影響推演出不同的分支流程。由于救火不利可能導(dǎo)致次生災(zāi)害,引燃左側(cè)物料罐,若恰好火焰燃點滿足表達式e6條件,客觀推理機便恢復(fù)branch_1的狀態(tài)5對應(yīng)腳本的執(zhí)行主動權(quán)。也可能由于噴水及時,火勢得到控制,則客觀推理機會恢復(fù)branch_2的狀態(tài)9對應(yīng)腳本的執(zhí)行主動權(quán)。
本文提出的基于虛擬現(xiàn)實的化工廠救援客觀仿真推理系統(tǒng)在某石化企業(yè)罐區(qū)應(yīng)用并取得顯著效果。
圖3所示為巡檢人員吸入硫化氫氣體中毒倒地后觸發(fā)報警,救援人員用擔(dān)架逆風(fēng)向?qū)⑵渌椭涟踩恢玫姆抡孢^程,涉及正向和多分支推理。人員中毒倒地正向地觸發(fā)報警救人狀態(tài),但人員救治是否及時則會產(chǎn)生不同的分支,救治成功則可繼續(xù)進行隔離毒氣的流程推演,救治失敗則應(yīng)急救援演練失敗。
圖4所示為物料罐起火后,消防人員開噴淋罐閥給罐體降溫避免罐體爆炸的仿真過程,過程涉及可逆和表達式推理。當(dāng)物料罐起火,人員開啟噴淋罐閥則環(huán)繞罐體的水環(huán)出現(xiàn),關(guān)閉閥門則水環(huán)消失,這一過程可以反復(fù)操作查看效果,直到最終確認提交才判定狀態(tài)是否完成。而火焰熄滅的前提表達式條件則是足夠的水粒子和火焰粒子發(fā)生作用,導(dǎo)致火焰熄滅。
圖3 應(yīng)急救援案例的傷員救治仿真
圖4 應(yīng)急救援案例的起火救援仿真
本文針對傳統(tǒng)應(yīng)急演練的不足,以客觀設(shè)備為推理對象,仿真實現(xiàn)了面向化工安全的應(yīng)急救援流程。本系統(tǒng)以客觀設(shè)備為對象抽取并建立設(shè)備之間的邏輯關(guān)系,混合使用了正向、可逆、表達式和多分支這4種推理方式,利用客觀推理機驅(qū)動應(yīng)急演練腳本,所構(gòu)建的推理邏輯關(guān)系樹中狀態(tài)的完成度只和客觀對象自身相關(guān),而無需指定特定人員完成該狀態(tài)。本文所提出的客觀推理系統(tǒng)能夠快速適應(yīng)石化廠區(qū)應(yīng)急演練需求的變化,且在仿真演練過程中,會根據(jù)操作人員的不同操作產(chǎn)生不同的演練流程,增加了演練的多樣性,有助于提高受訓(xùn)人員的反應(yīng)能力。
[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 的風(fēng)中麥浪波動效果模擬 [J].計算機應(yīng)用,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).[王俊杰,蔡志聰,朱群雄.虛擬工廠安全仿真系統(tǒng)設(shè)計與實現(xiàn) [J].計算機與應(yīng)用化學(xué),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).[江志英,朱群雄,徐圓.一種基于虛擬現(xiàn)實技術(shù)的化工安全實時干預(yù)機理仿真平臺 [J].計算機與應(yīng)用化學(xué),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).[劉一松,王莉莉,李倩倩.基于狀態(tài)演算的通用游戲系統(tǒng)的自動推理 [J].計算機工程與設(shè)計,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). [易濤,朱群雄,劉鵬濤.基于應(yīng)急演練的化工安全模糊專家系統(tǒng)[J].化工學(xué)報,2011,62 (10):2818-2827.]