任伟建 韩开旭 霍凤财
(东北石油大学电气信息工程学院,黑龙江 大庆 163318)
大气污染事故指会对人体有致毒的气体,由于泄漏、燃烧及爆炸等,在有限的时间内急剧扩散并给人员带来伤害的事故[1]。相较于其他污染事故,大气污染的排污途径和方式具有不确定性,事故具有突发性,毒物在有限的时间内会急剧扩散。大气污染事故处理,即在污染出现的第一个小时内[2],为降低事故所带来的危害和影响,而构建的全面的突发污染应急救援系统。在此,笔者根据泄漏扩散、火灾及爆炸等突发性大气污染事故类型的应急处理处置特点,基于规则引擎技术和动态路径规划,研发其应急处理系统。
1.1 规则引擎及其优化
现有的大气污染事故救援决策辅助系统包含了成熟的计算模型[3],并融入了很多非结构化且具有先验特点的知识,如业务决策支持和辅助分析。如果依照传统的系统构建思路,把事故救援处置的业务流程直接嵌入到突发污染应急救援系统中,就会导致系统升级和扩展困难;此外,直接嵌入业务流程到系统中,还不得不采用if-else等多重分支嵌套语句,由于系统救援决策的业务流程分支组合繁多,使得系统的修改和扩展变得难上加难。为此,笔者提出了一种基于规则引擎的方法,以期从根源上解决上述问题。
规则引擎技术是一种组件开发技术,可以将规则文件和业务流程嵌入到应用程序中,其主要工作是将系统中业务层的逻辑和分支分离出来,同时将已规则化的业务逻辑当作数据对象提交给规则引擎,并与已加载的业务逻辑进行规则比对,启动符合条件的业务逻辑,触发程序中相应的操作。
突发性大气污染事故的救援路径规划与事故的污染扩散状态有着很大的关系,事故的污染扩散程度是规划救援路径的首要条件。
突发性大气污染事故与其他环境污染事故的区别在于,污染物质在周围空气中的扩散受污染物本身性质、气象因素与下垫面的影响极大,因此如何准确估计突发事故中污染物的扩散浓度与范围成为研究重点,直接影响到应急处置其他阶段的策略制定,如疏散、救援路径制定及灾害风险后果评估等。文献[3]总结了适用于突发性大气污染事故的相关模型的多个模型的核心公式与适用条件,但其中的公式需在理想状态下才能模拟,比如:要求大气处于某种稳态及下垫面平坦等。
根据文献[3]中的公式,可以求出以事故源为原点的污染区域的空间浓度和污染范围,不同的大气污染事故都有对应的浓度危害区域标准,根据相应的安全标准,可以在地理信息系统上动态规划出致死区域、重伤区域、轻伤区域和安全区域,并根据事故现场的实际情况实时调整。前3个区域都属于首要的人群疏散区域,同时也是救援路径和疏散路径规划需要避开的区域。
传统的最短路径算法(如Dijkstra)都是基于静态网络环境的,没有考虑动态交通信息,很难直接应用于动态网络环境[4]。以往的动态路径研究多基于蚁群算法及遗传算法等[5],对于动态路况信息的更新也只能由人工采集进行[6];对于有些危险区域,是无法由人工采集路况信息的,如:毒气覆盖区域,这就需要根据突发大气污染事故对应的大气扩散模型和实时的大气稳态级别,即时计算出毒气覆盖区域的浓度,以判断相应路况的危险程度,进而得出道路的实时路阻系数。
笔者提出的方法需要根据危险区域的危险程度来确定相应道路的路阻系数,也就是道路安全通过的代价。处在致死区域的代价最高,处在重伤区域和轻伤区域的依次次之,横跨不同危险区的道路代价则按危险程度高的代价计算。最后将路阻系数结合到A*算法中形成新的路径规划方法,该方法可以即时规划出最优路径,并根据实时变动的路阻系数对救援线路进行调整,具有对随机事件和突发事件的实时处理功能,可有效应用于救援车辆路径的规划上。
突发性大气污染事故包括有毒气/液态化学品泄漏、易燃气体/液体导致的火灾及爆炸等类型。毒气/液态化学品泄漏会对人直接造成中毒伤害;而易燃气/液体导致的火灾的危害来自于火焰的炙烤和燃烧带来的有毒有害产物;爆炸的破坏来源于爆炸时刻的冲击波能量。根据突发性大
气污染事故的应急处理与救援类型,需要考虑的因素及其基本处理流程如图1所示。
图1 大气污染事故救援处置流程
突发污染应急救援系统采用对象-关系型数据库Oracle Spatial来存储所有数据,Oracle Spatial支持空间中的对象、索引、操作函数及操作符等功能,可以在ArcGisServer与ArcSDE的支持下完成地理信息数据的发布与交互。C#+.NetFramework作为微软主推的开发架构,可以将.Drools.Net融入到系统中,管理并发布所有的规则内容,实现业务层和用户层的分离和独立。
通过设计并实现一个面向多种突发大气污染类型且环境复杂的救援处理系统,可避免单一种类的模型模拟大气污染扩散的局限性,提高应急决策的精确性和针对性。基于规则引擎的核心功能在获取相关的规则参数后,结合系统内置的模型与方法,通过规则文件进行逻辑匹配,自动生成具有较高参考价值的应急处理处置方案。笔者设计的突发污染应急救援系统的整体架构如图2所示。
图2 系统整体架构
2.3.1应急处理处置规则
依照大气污染事故救援处置流程,突发污染应急救援系统中的规则引擎主要设计了大气模型选择、风险级别评估和救援路径规划三大类规则,规则引擎的流程如图3所示。通过后台数据将初始化数据(地点、类型、风速、地形等)传至规则引擎后,通过预先编写的规则选择大气扩散模型,并依照所匹配的模型来计算扩散的浓度和面积,识别风险区级别并规划最优救援路径等。
图3 规则文件调用流程
Drools.Net作为主流的规则引擎技术之一,基于Rete和Leaps算法,可以提供高效的匹配规则方式。采用规则引擎,可以将业务逻辑和业务数据分离,减少了开发过程中数据层和业务层的耦合度,更容易适应与时俱进的成长型业务流程。
Drool.Net与Java版本不同,它不依赖Jre虚拟机,在应用时需要单独将drools-3.0.dll、IKVM.GNU.Classpath.dll、drools.dotnet.dll这3个文件加载到项目中,同时引用命名空间(using org.drools.dotnet.compiler;using org.drools.dotnet.rule)后,才可以在项目开发中调用,规则创建与调用的局部代码如下:
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泄漏扩散模型匹配规则
为方便规则文件的管理,需要对其数据结构进行规范化设计,一个标准的规则结构分为条件部分与行为部分。大气污染扩散模拟模型的正确匹配对于处置大气污染扩散事故的效果而言至关重要,参考文献[3]中大气污染扩散模型的条件因子并融入空间算子后,所设计的大气污染模型选择规则见表1。
表1 大气污染模型选择规则
注:“是”表示进行布尔型运算;“否”表示不进行布尔型运算;“无”表示此项不参与规则运算。
此处的动态路径规划基于ArcGIS Server平台,开发语言采用C#,编程环境为VS2010。
首先在Arccatalog中创建拓扑规则,必须保证数据为Geodatabase格式,且满足要进行拓扑规则检查的要素类在同一要素集下。通过规则引擎和上文提到的初始化必须数据,判断并选取合适的大气扩散模型;根据大气扩散模型和事发点的经纬坐标,求取污染范围或危险疏散区域,将相应范围的多边形作为擦除区域多边形;将目标特征与擦除区域多边形进行补集运算,只有落在擦除区域多边形外的区域可以保留下来,即非污染区。需要注意的是,擦除区域多边形只能是面元素,不能使用点元素或线元素。
在计算出非污染区后,直接应用A*算法就可以得出传统路径规划。但是实际应用中,可能会要求救援人员深入污染区,或者时间紧迫需要通过污染区的捷径来完成救援工作,这时就要用到本研究针对路阻因子的改进。
根据污染区的3个级别,分别对应3种不同的高风险道路代价,通过大气扩散模型,先将求出的污染区范围坐标信息传到ArcGIS Server的ArcObject接口——IGeometry中,然后调用IFeatureLayer要素图层接口,选择相应的查询图层,在IGeometry的几何范围内,对目标图层(道路图层)的要素进行查询检索,可以得到一个道路要素的集合,对该集合内的道路要素遍历,将每一条道路的代价进行大幅升高,便可以得到污染区内动态更新后的路阻因子了。
将上述方法依不同的权重进行3次修改,即可得到致死区、重伤区和轻伤区更新后的路阻因子。把这些路阻因子赋给用于动态规划的A*算法[7],即可得到更准确的动态道路规划结果,如图4所示,三角标志点为救援力量的动态位置,白色线为传统最优路径规划结果,黑色线为改进后的动态规划结果。本模块的局部核心代码如下:
///
///尝试寻路
///
///开始节点
private void TryToFindPaht(PathNode node)
{
if(openPath.Count>0)
{
closePath.Add(openPath[0]);//每次从开启列表中取第一个添加到关闭列表,注意这个列表已经是排序后的,第一个即是F值最小的
openPath.RemoveAt(0);//把该节点从开启列表中移除
}
AddOpenNode(node);//以这个节点为基准,把它四周的节点添加到开启列表中,排除障碍物、已经在开启列表或关闭列表中的
//当目标节点已经在开启列表中时表示寻路成功
if(IsInOpenPaht(endNode))
{
closePath.Add(endNode);//将目标节点添到关闭列表中
endNode.ParentPoint=currentNode.Point;//目标节点的父节点为当前节点
findSuccess=true;
return;
}
SortPathByF();//依F值从小到大排序
if(openPath.Count>0)
{
currentNode=openPath[0];//从开启列表中取F值最小的作为当前节点
TryToFindPaht(currentNode);//递归调用,再次寻路
}
}
…
…
图4 针对事故危险区的动态最优路径规划
从图4中可以看出,虽然白线更短,但是穿越了大部分大气污染区;为了安全起见,黑线虽然更长,但是仍为最佳路径。这就是笔者设计的动态路径规划与传统路径规划的最大区别。
以大庆油田某油罐爆炸燃烧事故演习为例,现场初始信息:平均风速1.25m/s、风向东北、大气稳态B级、爆炸燃烧源高度12m。
突发性大气污染应急救援系统的污染系统主界如图5所示,获取事故类型、地点坐标及现场气象等信息后,根据事先定义好的规则文件,自动在大气扩散模型库中精确匹配相应的大气扩散模型。最终,系统会对运算结果以文字、图片及表格等形式输出。通过ArcGIS Server的空间拓扑运算,可以计算出事故的影响范围,估算敏感点与风险源,规划最优疏散救援路径,并在地图上进行标绘,最后给出整体的事故救援疏散解决方案。
图5 污染系统主界面
此次进行的油罐爆炸演练,证明该程序可以在第一时间根据所需信息判断出污染的事故类型,根据大气扩散模型模拟出扩散的浓度与范围,并根据规则文件提示处置方法供救援者参考,如自动推荐疏散途径及最小代价的救援规划等。相比较传统的应急处置救援系统,使得救援和指挥具有高效性、灵活性和实用性。
笔者对大气污染扩散事故应急救援的工作程序进行了分析,总结分析了适合于泄漏、火灾或爆炸等不同空气污染类型对应的数学依据和理论公式的应用范围,对规则引擎进行改进,融合了空间
因子,基于ArcGIS Server技术,建立了面向多种空气污染类型(燃烧及爆炸等)和多种自然环境(不同气象和地形)的突发事故救援系统。根据多种参数(气象、地形及自定义参数等)对大气污染扩散的模型进行划分,能够根据事故的属性信息,依托规则引擎选择大气污染扩散模型。针对以往动态路径规划的不足,改进了动态规划算法,将事故污染的危险区作为路阻系数之一加入到算法中,既将危险区考虑到救援路径规划代价中,又避免了人工进入事故危险区采集路况信息,使得实时路径规划更具有实效性和灵活性。当然,该系统的模块还有很多可以继续改进的空间,规则的前件和后件的数量不多;规则的内容的粒度还不够小、不够细致;针对危险区域的动态路径规划仍然有很大的发展空间,如将区域多边形内部的浓度作为限制条件结合到路径代价计算上,可以更精确地计算出各个路径的真实代价,而不是机械地躲避危险区域。