任偉建 韓開旭 霍鳳財
(東北石油大學(xué)電氣信息工程學(xué)院,黑龍江 大慶 163318)
大氣污染事故指會對人體有致毒的氣體,由于泄漏、燃燒及爆炸等,在有限的時間內(nèi)急劇擴(kuò)散并給人員帶來傷害的事故[1]。相較于其他污染事故,大氣污染的排污途徑和方式具有不確定性,事故具有突發(fā)性,毒物在有限的時間內(nèi)會急劇擴(kuò)散。大氣污染事故處理,即在污染出現(xiàn)的第一個小時內(nèi)[2],為降低事故所帶來的危害和影響,而構(gòu)建的全面的突發(fā)污染應(yīng)急救援系統(tǒng)。在此,筆者根據(jù)泄漏擴(kuò)散、火災(zāi)及爆炸等突發(fā)性大氣污染事故類型的應(yīng)急處理處置特點,基于規(guī)則引擎技術(shù)和動態(tài)路徑規(guī)劃,研發(fā)其應(yīng)急處理系統(tǒng)。
1.1 規(guī)則引擎及其優(yōu)化
現(xiàn)有的大氣污染事故救援決策輔助系統(tǒng)包含了成熟的計算模型[3],并融入了很多非結(jié)構(gòu)化且具有先驗特點的知識,如業(yè)務(wù)決策支持和輔助分析。如果依照傳統(tǒng)的系統(tǒng)構(gòu)建思路,把事故救援處置的業(yè)務(wù)流程直接嵌入到突發(fā)污染應(yīng)急救援系統(tǒng)中,就會導(dǎo)致系統(tǒng)升級和擴(kuò)展困難;此外,直接嵌入業(yè)務(wù)流程到系統(tǒng)中,還不得不采用if-else等多重分支嵌套語句,由于系統(tǒng)救援決策的業(yè)務(wù)流程分支組合繁多,使得系統(tǒng)的修改和擴(kuò)展變得難上加難。為此,筆者提出了一種基于規(guī)則引擎的方法,以期從根源上解決上述問題。
規(guī)則引擎技術(shù)是一種組件開發(fā)技術(shù),可以將規(guī)則文件和業(yè)務(wù)流程嵌入到應(yīng)用程序中,其主要工作是將系統(tǒng)中業(yè)務(wù)層的邏輯和分支分離出來,同時將已規(guī)則化的業(yè)務(wù)邏輯當(dāng)作數(shù)據(jù)對象提交給規(guī)則引擎,并與已加載的業(yè)務(wù)邏輯進(jìn)行規(guī)則比對,啟動符合條件的業(yè)務(wù)邏輯,觸發(fā)程序中相應(yīng)的操作。
突發(fā)性大氣污染事故的救援路徑規(guī)劃與事故的污染擴(kuò)散狀態(tài)有著很大的關(guān)系,事故的污染擴(kuò)散程度是規(guī)劃救援路徑的首要條件。
突發(fā)性大氣污染事故與其他環(huán)境污染事故的區(qū)別在于,污染物質(zhì)在周圍空氣中的擴(kuò)散受污染物本身性質(zhì)、氣象因素與下墊面的影響極大,因此如何準(zhǔn)確估計突發(fā)事故中污染物的擴(kuò)散濃度與范圍成為研究重點,直接影響到應(yīng)急處置其他階段的策略制定,如疏散、救援路徑制定及災(zāi)害風(fēng)險后果評估等。文獻(xiàn)[3]總結(jié)了適用于突發(fā)性大氣污染事故的相關(guān)模型的多個模型的核心公式與適用條件,但其中的公式需在理想狀態(tài)下才能模擬,比如:要求大氣處于某種穩(wěn)態(tài)及下墊面平坦等。
根據(jù)文獻(xiàn)[3]中的公式,可以求出以事故源為原點的污染區(qū)域的空間濃度和污染范圍,不同的大氣污染事故都有對應(yīng)的濃度危害區(qū)域標(biāo)準(zhǔn),根據(jù)相應(yīng)的安全標(biāo)準(zhǔn),可以在地理信息系統(tǒng)上動態(tài)規(guī)劃出致死區(qū)域、重傷區(qū)域、輕傷區(qū)域和安全區(qū)域,并根據(jù)事故現(xiàn)場的實際情況實時調(diào)整。前3個區(qū)域都屬于首要的人群疏散區(qū)域,同時也是救援路徑和疏散路徑規(guī)劃需要避開的區(qū)域。
傳統(tǒng)的最短路徑算法(如Dijkstra)都是基于靜態(tài)網(wǎng)絡(luò)環(huán)境的,沒有考慮動態(tài)交通信息,很難直接應(yīng)用于動態(tài)網(wǎng)絡(luò)環(huán)境[4]。以往的動態(tài)路徑研究多基于蟻群算法及遺傳算法等[5],對于動態(tài)路況信息的更新也只能由人工采集進(jìn)行[6];對于有些危險區(qū)域,是無法由人工采集路況信息的,如:毒氣覆蓋區(qū)域,這就需要根據(jù)突發(fā)大氣污染事故對應(yīng)的大氣擴(kuò)散模型和實時的大氣穩(wěn)態(tài)級別,即時計算出毒氣覆蓋區(qū)域的濃度,以判斷相應(yīng)路況的危險程度,進(jìn)而得出道路的實時路阻系數(shù)。
筆者提出的方法需要根據(jù)危險區(qū)域的危險程度來確定相應(yīng)道路的路阻系數(shù),也就是道路安全通過的代價。處在致死區(qū)域的代價最高,處在重傷區(qū)域和輕傷區(qū)域的依次次之,橫跨不同危險區(qū)的道路代價則按危險程度高的代價計算。最后將路阻系數(shù)結(jié)合到A*算法中形成新的路徑規(guī)劃方法,該方法可以即時規(guī)劃出最優(yōu)路徑,并根據(jù)實時變動的路阻系數(shù)對救援線路進(jìn)行調(diào)整,具有對隨機(jī)事件和突發(fā)事件的實時處理功能,可有效應(yīng)用于救援車輛路徑的規(guī)劃上。
突發(fā)性大氣污染事故包括有毒氣/液態(tài)化學(xué)品泄漏、易燃?xì)怏w/液體導(dǎo)致的火災(zāi)及爆炸等類型。毒氣/液態(tài)化學(xué)品泄漏會對人直接造成中毒傷害;而易燃?xì)?液體導(dǎo)致的火災(zāi)的危害來自于火焰的炙烤和燃燒帶來的有毒有害產(chǎn)物;爆炸的破壞來源于爆炸時刻的沖擊波能量。根據(jù)突發(fā)性大
氣污染事故的應(yīng)急處理與救援類型,需要考慮的因素及其基本處理流程如圖1所示。
圖1 大氣污染事故救援處置流程
突發(fā)污染應(yīng)急救援系統(tǒng)采用對象-關(guān)系型數(shù)據(jù)庫Oracle Spatial來存儲所有數(shù)據(jù),Oracle Spatial支持空間中的對象、索引、操作函數(shù)及操作符等功能,可以在ArcGisServer與ArcSDE的支持下完成地理信息數(shù)據(jù)的發(fā)布與交互。C#+.NetFramework作為微軟主推的開發(fā)架構(gòu),可以將.Drools.Net融入到系統(tǒng)中,管理并發(fā)布所有的規(guī)則內(nèi)容,實現(xiàn)業(yè)務(wù)層和用戶層的分離和獨立。
通過設(shè)計并實現(xiàn)一個面向多種突發(fā)大氣污染類型且環(huán)境復(fù)雜的救援處理系統(tǒng),可避免單一種類的模型模擬大氣污染擴(kuò)散的局限性,提高應(yīng)急決策的精確性和針對性。基于規(guī)則引擎的核心功能在獲取相關(guān)的規(guī)則參數(shù)后,結(jié)合系統(tǒng)內(nèi)置的模型與方法,通過規(guī)則文件進(jìn)行邏輯匹配,自動生成具有較高參考價值的應(yīng)急處理處置方案。筆者設(shè)計的突發(fā)污染應(yīng)急救援系統(tǒng)的整體架構(gòu)如圖2所示。
圖2 系統(tǒng)整體架構(gòu)
2.3.1應(yīng)急處理處置規(guī)則
依照大氣污染事故救援處置流程,突發(fā)污染應(yīng)急救援系統(tǒng)中的規(guī)則引擎主要設(shè)計了大氣模型選擇、風(fēng)險級別評估和救援路徑規(guī)劃三大類規(guī)則,規(guī)則引擎的流程如圖3所示。通過后臺數(shù)據(jù)將初始化數(shù)據(jù)(地點、類型、風(fēng)速、地形等)傳至規(guī)則引擎后,通過預(yù)先編寫的規(guī)則選擇大氣擴(kuò)散模型,并依照所匹配的模型來計算擴(kuò)散的濃度和面積,識別風(fēng)險區(qū)級別并規(guī)劃最優(yōu)救援路徑等。
圖3 規(guī)則文件調(diào)用流程
Drools.Net作為主流的規(guī)則引擎技術(shù)之一,基于Rete和Leaps算法,可以提供高效的匹配規(guī)則方式。采用規(guī)則引擎,可以將業(yè)務(wù)邏輯和業(yè)務(wù)數(shù)據(jù)分離,減少了開發(fā)過程中數(shù)據(jù)層和業(yè)務(wù)層的耦合度,更容易適應(yīng)與時俱進(jìn)的成長型業(yè)務(wù)流程。
Drool.Net與Java版本不同,它不依賴Jre虛擬機(jī),在應(yīng)用時需要單獨將drools-3.0.dll、IKVM.GNU.Classpath.dll、drools.dotnet.dll這3個文件加載到項目中,同時引用命名空間(using org.drools.dotnet.compiler;using org.drools.dotnet.rule)后,才可以在項目開發(fā)中調(diào)用,規(guī)則創(chuàng)建與調(diào)用的局部代碼如下:
using org.drools.dotnet.compiler;
using org.drools.dotnet.rule;
…
Package pkg=builder.getPackage();
WorkingMemory engine=ruleBase.NewWorkingMemory();
TestModel model=new TestModel();
engine.AssertObject(model);
RuleBase ruleBase=RuleBaseFactory.NewRuleBase();
ruleBase.AddPackage(pkg);
engine.FireAllRules();
…
2.3.2泄漏擴(kuò)散模型匹配規(guī)則
為方便規(guī)則文件的管理,需要對其數(shù)據(jù)結(jié)構(gòu)進(jìn)行規(guī)范化設(shè)計,一個標(biāo)準(zhǔn)的規(guī)則結(jié)構(gòu)分為條件部分與行為部分。大氣污染擴(kuò)散模擬模型的正確匹配對于處置大氣污染擴(kuò)散事故的效果而言至關(guān)重要,參考文獻(xiàn)[3]中大氣污染擴(kuò)散模型的條件因子并融入空間算子后,所設(shè)計的大氣污染模型選擇規(guī)則見表1。
表1 大氣污染模型選擇規(guī)則
注:“是”表示進(jìn)行布爾型運算;“否”表示不進(jìn)行布爾型運算;“無”表示此項不參與規(guī)則運算。
此處的動態(tài)路徑規(guī)劃基于ArcGIS Server平臺,開發(fā)語言采用C#,編程環(huán)境為VS2010。
首先在Arccatalog中創(chuàng)建拓?fù)湟?guī)則,必須保證數(shù)據(jù)為Geodatabase格式,且滿足要進(jìn)行拓?fù)湟?guī)則檢查的要素類在同一要素集下。通過規(guī)則引擎和上文提到的初始化必須數(shù)據(jù),判斷并選取合適的大氣擴(kuò)散模型;根據(jù)大氣擴(kuò)散模型和事發(fā)點的經(jīng)緯坐標(biāo),求取污染范圍或危險疏散區(qū)域,將相應(yīng)范圍的多邊形作為擦除區(qū)域多邊形;將目標(biāo)特征與擦除區(qū)域多邊形進(jìn)行補(bǔ)集運算,只有落在擦除區(qū)域多邊形外的區(qū)域可以保留下來,即非污染區(qū)。需要注意的是,擦除區(qū)域多邊形只能是面元素,不能使用點元素或線元素。
在計算出非污染區(qū)后,直接應(yīng)用A*算法就可以得出傳統(tǒng)路徑規(guī)劃。但是實際應(yīng)用中,可能會要求救援人員深入污染區(qū),或者時間緊迫需要通過污染區(qū)的捷徑來完成救援工作,這時就要用到本研究針對路阻因子的改進(jìn)。
根據(jù)污染區(qū)的3個級別,分別對應(yīng)3種不同的高風(fēng)險道路代價,通過大氣擴(kuò)散模型,先將求出的污染區(qū)范圍坐標(biāo)信息傳到ArcGIS Server的ArcObject接口——IGeometry中,然后調(diào)用IFeatureLayer要素圖層接口,選擇相應(yīng)的查詢圖層,在IGeometry的幾何范圍內(nèi),對目標(biāo)圖層(道路圖層)的要素進(jìn)行查詢檢索,可以得到一個道路要素的集合,對該集合內(nèi)的道路要素遍歷,將每一條道路的代價進(jìn)行大幅升高,便可以得到污染區(qū)內(nèi)動態(tài)更新后的路阻因子了。
將上述方法依不同的權(quán)重進(jìn)行3次修改,即可得到致死區(qū)、重傷區(qū)和輕傷區(qū)更新后的路阻因子。把這些路阻因子賦給用于動態(tài)規(guī)劃的A*算法[7],即可得到更準(zhǔn)確的動態(tài)道路規(guī)劃結(jié)果,如圖4所示,三角標(biāo)志點為救援力量的動態(tài)位置,白色線為傳統(tǒng)最優(yōu)路徑規(guī)劃結(jié)果,黑色線為改進(jìn)后的動態(tài)規(guī)劃結(jié)果。本模塊的局部核心代碼如下:
///
///嘗試尋路
///
///開始節(jié)點
private void TryToFindPaht(PathNode node)
{
if(openPath.Count>0)
{
closePath.Add(openPath[0]);//每次從開啟列表中取第一個添加到關(guān)閉列表,注意這個列表已經(jīng)是排序后的,第一個即是F值最小的
openPath.RemoveAt(0);//把該節(jié)點從開啟列表中移除
}
AddOpenNode(node);//以這個節(jié)點為基準(zhǔn),把它四周的節(jié)點添加到開啟列表中,排除障礙物、已經(jīng)在開啟列表或關(guān)閉列表中的
//當(dāng)目標(biāo)節(jié)點已經(jīng)在開啟列表中時表示尋路成功
if(IsInOpenPaht(endNode))
{
closePath.Add(endNode);//將目標(biāo)節(jié)點添到關(guān)閉列表中
endNode.ParentPoint=currentNode.Point;//目標(biāo)節(jié)點的父節(jié)點為當(dāng)前節(jié)點
findSuccess=true;
return;
}
SortPathByF();//依F值從小到大排序
if(openPath.Count>0)
{
currentNode=openPath[0];//從開啟列表中取F值最小的作為當(dāng)前節(jié)點
TryToFindPaht(currentNode);//遞歸調(diào)用,再次尋路
}
}
…
…
圖4 針對事故危險區(qū)的動態(tài)最優(yōu)路徑規(guī)劃
從圖4中可以看出,雖然白線更短,但是穿越了大部分大氣污染區(qū);為了安全起見,黑線雖然更長,但是仍為最佳路徑。這就是筆者設(shè)計的動態(tài)路徑規(guī)劃與傳統(tǒng)路徑規(guī)劃的最大區(qū)別。
以大慶油田某油罐爆炸燃燒事故演習(xí)為例,現(xiàn)場初始信息:平均風(fēng)速1.25m/s、風(fēng)向東北、大氣穩(wěn)態(tài)B級、爆炸燃燒源高度12m。
突發(fā)性大氣污染應(yīng)急救援系統(tǒng)的污染系統(tǒng)主界如圖5所示,獲取事故類型、地點坐標(biāo)及現(xiàn)場氣象等信息后,根據(jù)事先定義好的規(guī)則文件,自動在大氣擴(kuò)散模型庫中精確匹配相應(yīng)的大氣擴(kuò)散模型。最終,系統(tǒng)會對運算結(jié)果以文字、圖片及表格等形式輸出。通過ArcGIS Server的空間拓?fù)溥\算,可以計算出事故的影響范圍,估算敏感點與風(fēng)險源,規(guī)劃最優(yōu)疏散救援路徑,并在地圖上進(jìn)行標(biāo)繪,最后給出整體的事故救援疏散解決方案。
圖5 污染系統(tǒng)主界面
此次進(jìn)行的油罐爆炸演練,證明該程序可以在第一時間根據(jù)所需信息判斷出污染的事故類型,根據(jù)大氣擴(kuò)散模型模擬出擴(kuò)散的濃度與范圍,并根據(jù)規(guī)則文件提示處置方法供救援者參考,如自動推薦疏散途徑及最小代價的救援規(guī)劃等。相比較傳統(tǒng)的應(yīng)急處置救援系統(tǒng),使得救援和指揮具有高效性、靈活性和實用性。
筆者對大氣污染擴(kuò)散事故應(yīng)急救援的工作程序進(jìn)行了分析,總結(jié)分析了適合于泄漏、火災(zāi)或爆炸等不同空氣污染類型對應(yīng)的數(shù)學(xué)依據(jù)和理論公式的應(yīng)用范圍,對規(guī)則引擎進(jìn)行改進(jìn),融合了空間
因子,基于ArcGIS Server技術(shù),建立了面向多種空氣污染類型(燃燒及爆炸等)和多種自然環(huán)境(不同氣象和地形)的突發(fā)事故救援系統(tǒng)。根據(jù)多種參數(shù)(氣象、地形及自定義參數(shù)等)對大氣污染擴(kuò)散的模型進(jìn)行劃分,能夠根據(jù)事故的屬性信息,依托規(guī)則引擎選擇大氣污染擴(kuò)散模型。針對以往動態(tài)路徑規(guī)劃的不足,改進(jìn)了動態(tài)規(guī)劃算法,將事故污染的危險區(qū)作為路阻系數(shù)之一加入到算法中,既將危險區(qū)考慮到救援路徑規(guī)劃代價中,又避免了人工進(jìn)入事故危險區(qū)采集路況信息,使得實時路徑規(guī)劃更具有實效性和靈活性。當(dāng)然,該系統(tǒng)的模塊還有很多可以繼續(xù)改進(jìn)的空間,規(guī)則的前件和后件的數(shù)量不多;規(guī)則的內(nèi)容的粒度還不夠小、不夠細(xì)致;針對危險區(qū)域的動態(tài)路徑規(guī)劃仍然有很大的發(fā)展空間,如將區(qū)域多邊形內(nèi)部的濃度作為限制條件結(jié)合到路徑代價計算上,可以更精確地計算出各個路徑的真實代價,而不是機(jī)械地躲避危險區(qū)域。