以下文章来源于经纬石旁话遥测 ,作者何朝阳 许强等
武汉大学学报信息科学版编辑部
↑ 点击上方「中国测绘学会」
可快速关注我们
摘 要
监测预警是地质灾害防灾减灾的重要手段。在滑坡实时监测预警中,预警模型的调度算法直接关系到预警的成功与否。传统的做法是根据一定时间间隔启动预警服务,这种方法易于实现,但受到预警时间间隔的影响,其预警结论及处置建议的发布存在一定的延迟,无法达到真正的实时预警。
如何通过预警模型和实时监测数据快速得到预警等级, 如何控制好预警信息发送的时间与频率,是需要解决的两个关键问题。
为了尽量缩短从数据采集到预警信息发出的时间间隔,为后续预警处置赢得更多时间,从预警流程和模型调度算法的角度研究基于时间驱动和数据驱动的预警模型调度方式,结合实时监测数据类型及其特征,提出预警模型调度策略及预警信息发布策略,以期提高滑坡的预警精度;研发一套预警等级求解器,采用多线程思路,构建基于策略的预警模型通用计算框架,实现对滑坡的实时过程跟踪预警,充分发挥预警平台的作用。
中国幅员辽阔,地形地貌、地质背景复杂,地质灾害频繁发生。据统计,中国每年因地质灾害导致的直接经济损失占自然灾害总经济损失的20%以上,造成大量的人员伤亡与财产损失,给人民的生产生活带来极大的影响。
滑坡是地壳表层的岩、土体突然发生下滑、带有动力特性的地质灾变现象,是自然界中常见的一种地质灾害。在中国发生的各类地质灾害中,滑坡造成的损失最为严重。
例如,2009年4月26日发生在云南省昭通市威信县扎西镇小坝村的滑坡造成20人死亡,2人受伤;2010年8月8日,甘肃省舟曲县泥石流导致1765人死亡;2013年7月10日10:30左右,四川省都江堰市中兴镇三溪村五里坡发生大规模山体滑坡,约264万m3的山体在前期降雨的影响下启动,造成161人死亡;2017年6月24日,四川省茂县叠溪镇新磨村突发特大高位顺层岩质滑坡,为汶川地震后发生的规模最大的一次岩质滑坡,此次滑坡灾害共造成10人死亡,73人失踪,整个新磨村被毁的重大损失;2018年发生在金沙江的白格堰塞湖事件使避险转移达3.42万人。
2018年10月10日,习近平总书记在中央财经委员会第三次会议中强调,要建立高效科学的自然灾害防治体系,提高自然灾害防治能力,实施自然灾害监测预警信息化工程,提高多灾种和灾害链综合监测、风险早期识别和预报预警能力。
因此,监测预警是地质灾害防灾减灾的重要手段,如何最大限度地减少地质灾害带来的生命安全和财产损失,是摆在人们面前的一项长期而紧迫的任务。
为实现这些目标,对滑坡地质灾害实施实时动态跟踪的监测预警,必然少不了预警模型和预警系统的支撑。在预警模型方面,许强等提出基于滑坡变形演化过程的实时预警模型,取得了较好的应用效果。
本文从另一个角度出发,重点关注滑坡预警模型的调度算法,这是滑坡实时监测预警中的关键和核心问题之一,同时也是最容易忽视的一个问题。
运用合理的模型调度算法可以及时地发出预警,适用的预警信息发布策略可以保障尽可能少地发出错误、冗余预警信息,为提升预警精度提供技术支撑。构建通用的预警等级求解器,通过数据分析智能选择预警模型的调度方式,是本文研究的目标。
图 1 为滑坡监测预警流程图。预警模型的调度与计算是整个滑坡实时监测预警系统最核心的部分,而监测数据贯穿其整个流程,从监测方案的设计、监测设备的选型与安装,到监测数据的传输、集成与处理,再到预警模型的计算和最终预警信息的发布。
图 1 滑坡监测预警流程图
因此,基于实时监测数据和预警模型实现自动、实时、稳定的预警模型调度,是一项必不可少的技术。预警计算模块需要对系统接收到的实时监测数据进行预处理,包括异常数据剔除、数据修匀、数据拟合等,再结合预警模型、参数、阈值等快速计算出预警等级,进一步发布预警信息。
本文的研究内容主要集中在预警模型调度环节,即保障整个监测预警过程能实时稳定地处理监测数据,快速发布预警信息。通过优化预警模型的调度算法和预警流程,满足监测预警的时效性需求,达到预警信息不漏发、不多发、及时发的目标。
滑坡监测预警系统是管理滑坡地质灾害信息与实时预测预报滑坡的有效措施,在监测一个或多个滑坡变量的条件下,在变量发生突变时能快速有效地发出预警信息。
国内外学者基于不同的监测指标构建了各类监测预警系统,取得了较多成果,如基于降雨监测资料,Keefer等、Segoni等利用I-D模型(I为降雨强度,D为降雨持续时间)和降雨阈值研发了实时滑坡预警系统并取得了较好应用;浙江省突发性地质灾害实时预警预报系统与应用示范构建的实时气象信息与地质灾害空间信息的时空耦合模型可以实现地质灾害预警预报信息的实时发布;巫山县地质灾害实时监测系统基于实时监测数据和预警模型,将预警结果进行发布与共享;地质灾害防治与地质环境保护国家重点实验室近年来研发的地质灾害监测预警与决策支持系统[22-24]实现了对监测数据的实时集成与处理[25-26],能对预警信息进行在线发布。
滑坡实时监测预警系统的核心是基于实时监测数据并结合预警模型进行计算,从而得到预警等级。预警模型本身非常重要,预警模型的调度也同样重要,即如何启动滑坡监测预警模块进行预警计算,如何发布预警信息。
目前,行业内应用比较广泛且最容易实现的一种预警模型调度方式是时间驱动,其预警流程如图 2所示,即通过定时任务让预警程序在一定时间间隔后(如5 min、10 min、1 h等)重复启动,循环滚动处理监测数据,计算预警等级,发布预警成果等。
图 2 基于时间驱动的监测预警流程图
基于时间驱动的调度方式存在两个明显的问题:
①预警延迟。无法实现实时预警,受到预警模型调度时间间隔的影响,每次预警都有一定延迟,几分钟的延迟往往可能会错过最佳预警时间窗口而导致预警失败。
②浪费计算资源。如果某一时间段内没有新的监测数据接入,但仍然要启动预警计算,就会造成计算资源的浪费,占用计算资源,影响下一次的预警任务。
对于监测设备而言,采用较高的采样频率可以捕捉到完整的变形过程,为预警赢得时间,如果采样时间间隔过大,可能会出现上次采样时数据没有变化,还没到下次采样时滑坡已经发生。对于滑坡预警系统而言,同样存在这个问题,如果固定时间间隔,调度预警模型在上次预警时滑坡可能处于稳定状态,还没到下次预警时滑坡已经变形失稳。
如图 3所示,贵州织金县少普镇联盟村箐脚组崩塌中的GNSS(global navigation satellite system)监测设备(GP02)的监测数据时间间隔为1 h(图 3(a)),系统中记录的最后数据时间为04:00,还未到05:00崩塌已经发生,未能捕捉到完整的变形曲线,滑坡实时监测预警系统基于04:00的监测数据只发出了黄色预警(图 3(b)),如果04:00以后能够加密监测采样频率,获取完整的监测曲线,则能成功发出红色临滑预警。因此,监测数据采样频率和预警模型调度频率在临滑阶段同样具有重要意义,直接影响到预警的成功与否。
图 3 箐脚组崩塌(GP02)预警过程
从时间驱动方式来看,受到预警时间间隔的影响,无法实现真正的实时预警。为解决时间驱动中的弊端,本文提出一种新的预警模型调度思路,即数据驱动,以监测数据流为主导,在监测预警平台接收到新的监测数据后,立即启动预警程序,通过数据驱动程序进行预警计算。
基于数据驱动的预警流程如图 4所示,现场的监测数据采用消息队列遥测传输(message queuing telemetry transport,MQTT)技术进行传输,即现场数据通过MQTT协议传输到监测中心服务器,再进入RabbitMQ(一款实现高级消息队列协议的开源中间件)队列。
一方面,数据实时集成服务通过订阅RabbitMQ队列,将监测数据实时集成到数据库中;另一方面,预警服务在RabbitMQ中订阅实时监测数据,一旦消息队列中有监测数据,则立即调用相应的预警模型进入预警流程。得益于消息队列技术,从现场数据采集到预警信息发出,整个流程耗时可以控制在几十到几百毫秒内,从而实现真正的预警秒级响应。
图 4 基于数据驱动的监测预警流程图
当然,数据驱动无法完全取代时间驱动模式,结合实际需求,可以采用两种方式相结合的混合计算调度模式,即采用数据驱动的方式处理状态量和累积量数据,采用时间驱动的方式处理雨量数据。时间驱动和数据驱动各有优势,适用于不同的预警计算需求,两种预警模型调度方法对比如表 1所示。
表 1 基于时间驱动和数据驱动两种调度方法的比较
在地质灾害监测工作中,监测指标通常有地表位移、深部位移、裂缝宽度、液位、渗压、雨量等,针对这些监测数据的设备特征和数据特征,可将用于常规预警模型计算的监测数据分为3类:状态量、累积量与雨量数据。
1) 状态量表示所测得的监测值为对应监测时刻的状态量,本次采样值不受上次采样时间的影响,如泥位计、渗压计、含水率计、温度计等这类设备监测值,只表征采样时监测对象的状态。
2) 累积量表示所测得的监测数据为一个时间段内的累积量,如裂缝计、位移计等,在预警时更关注监测值的变化速率。
3) 雨量数据可认为是一种特殊的累积量参数,本次采样值受上次采样时间的影响,所测得的雨量值为上次采样时间到本次采样时间之间的累计雨量,但由于雨量计求解的参数和其他累积量不一样,所以单独分为一类。
根据这3类数据的数据特征和求解的参数不同,分别采用不同的预警模型进行预警计算,主要的监测数据类型如表 2所示。
表 2 常见监测数据分类及计算参数
基于时间驱动和数据驱动的监测数据流分别如图 5、6所示。在时间驱动模式下(图 5),预警模块通过一定的时间间隔从数据库中获取监测数据来进行预警分析与预警信息发布。
而在数据驱动模式下(图 6),利用RabbitMQ中的Fanout模式(广播模式)将交换机(Exchange)里的消息发送给所有绑定该交换机的队列(Queues),每个队列中的数据一致,预警模块通过订阅队列中的监测数据,队列中一旦有新的监测数据,则立即启动预警分析与预警信息发布功能,且与数据实时集成服务相互独立,互不影响。
图 5 基于时间驱动的监测数据流
图 6 基于数据驱动的监测数据流
为节省计算资源,避免数据拥堵,本文通过总结历史预警数据,提出如下预警模型调度策略:
1) 状态量数据采用数据驱动模式。由于基于状态量数据的预警模型只需将监测数据和阈值进行比较即可,且每条数据都有可能包含监测对象的异常信息,因此不能采用时间驱动的方式进行调度。
2) 雨量数据采用时间驱动模式。由于基于雨量数据的预警模型主要是对历史雨量数据进行分析来得到一场雨的累计雨量、雨强等参数,因此无法通过数据驱动进行实时计算。
3) 对于位移数据,如果滑坡处于稳定状态,则采用时间驱动模式,否则采用数据驱动的模式。滑坡从变形到失稳都有一个演化过程,抓住这一普适性的特征规律[12-14]即可实现对滑坡的过程预警。如果通过监测数据判定滑坡处于稳定状态,则不需要对其进行实时监控,只需要定时计算相关参数,关注变形趋势即可。具体策略见表 3。
表3 累积量(位移)数据的数据驱动策略
4) 时间驱动的任务简化。在实际预警计算时,对于同一套监测设备而言,如果距离上一次预警结束后,没有采集到新的监测数据,那么本次的预警结果和上次的预警结果一样,此时可自动跳过该监测设备的预警计算,从而极大地减少数据库的访问次数和计算任务量,以节省预警时间。
本文采用4级预警体系(C1~C4),为了求解器的输出规范,还定义了一个安全级(C0,严格意义上不属于预警级别),表示监测对象处于稳定状态,无需特别关注。预警级别如表 4所示。
表 4 预警级别表
预警计算就是结合监测数据、预警模型、预警参数等计算预警等级。为了实现对各类监测数据和不同预警模型的处理,需要设计一套通用的预警等级求解器,通过输入监测数据和预警模型,返回预警等级,如图 7所示。
图 7 预警计算示意图
预警等级求解器是根据地质灾害监测中常见类型的监测数据特征进行设计,不仅考虑了适用于滑坡监测预警的计算,还考虑了对整个预警系统的扩展,可以支持其他类型的地质灾害预警,如泥石流、崩塌等。
一般而言,地质灾害监测预警中的监测数据主要分为3大类,即状态类数据、累积量(位移)数据和雨量数据,根据这3类数据的特征分别进行预警等级的计算。预警等级求解器的计算流程如图 8所示。
图 8 预警等级求解器的计算流程
(1)状态类数据
状态类数据,顾名思义,其监测数据表示某一时刻的状态。崩塌仪、断线仪的监测数据只有两种,0表示正常,1表示发生险情(崩塌、泥石流),其预警等级分别定义为安全级(C0)和警报级(C4),其他类型的状态类监测设备如泥位计、地下水位计、含水率计等,则根据相应的预警参数、阈值定义不同的预警等级,这类数据处理比较简单,只需将监测数据和预设的阈值进行比较,即可得出预警等级。
(2)累积量数据
累积量数据主要是指和变形、位移相关的监测数据。位移数据是滑坡实时监测预警中的重要监测指标,是滑坡变形演化最直观的反应,也是滑坡监测中最容易、最常用的手段。要实现对滑坡的过程预警,主要是基于滑坡的位移监测数据进行分析。
位移数据的计算预警等级主要是根据当前位移-时间曲线,结合预警模型计算各个预警参数,如变形速率、变形加速度、变形速率增量、改进切线角模型等,综合判断滑坡的变形演化过程及趋势,得到最终的预警等级。此外,可以根据位移监测曲线自动识别滑坡的匀速变形阶段,进一步划分变形演化阶段。
(3)雨量数据
雨量数据也是各类地质灾害监测中常见的一种数据类型,尤其是在泥石流、降雨型滑坡监测中。雨量数据是一种累计量,即监测数据值是相邻两条数据时间段内的累计雨量(这里的累计雨量与一场雨的累计雨量含义不同)。
基于雨量数据的预警模型最关键的指标是根据历史雨量数据求解降雨强度、累计雨量、降雨持续时间等参数,而累计雨量、降雨持续时间的计算离不开对一场雨开始时间的计算。一场雨的界定有很多划分方法[29-30],结合对雨场的划分,已在预警系统中实现了对降雨开始时间的自动搜索与雨场的自动划分[27],再结合相应的预警模型(如I-D、E-I、E-D模型等,其中E为累计雨量)可以得到最终的预警等级,从而实现对泥石流及降雨型滑坡的临滑预警。
为了快速获取滑坡的预警等级结果,结合预警模型的相关算法,开发预警任务分配调度管理器,构建多线程预警计算框架。
线程是一个应用程序中的最小单元,当实时预警模块启动后,会产生一个进程,而进程执行相关计算任务需要依赖线程,也就是说,进程中的最小执行单位就是线程,并且一个进程中至少有一个线程。
一般情况下,单线程程序执行串行的思路,上一个预警任务执行完后,再执行下一个预警任务(图 9(a))。为了加快预警计算,提升整个系统的运行效率,可以采用多线程的并行执行方式(图 9(b))。
在一个进程内开启多个线程,将计算任务按照一定的策略动态分配给不同的线程,各个线程同时执行。当然,线程并不是越多越好,还需要协调预警任务执行速率与数据库读写速率瓶颈之间的平衡。
图 9 单线程与多线程执行过程示意图
每一次预警涉及到大量的计算过程和数据库读写访问。为了更好地优化计算过程,本研究根据预警任务量、计算节点资源、预警耗时等指标构建智能预警策略,将预警任务动态分配到各个线程,通过异步锁机制,实现各个线程间的数据共享与通信,保障线程的数据安全,同时基于Redis高速缓存缓解中心数据库的读写压力,实现分布式计算,极大缩短一次完整预警所需的时间,满足大规模(特别是省级平台)滑坡实时监测预警应用场景的性能需求。
基于上述思路,采用系统服务技术,研发多线程预警计算框架(图 10),构建基于策略的滑坡实时过程预警模块,可实现对滑坡的定时预警、数据驱动预警,也可以手动触发预警模块。
图 10 多线程预警计算框架示意图
预警信息的发布也需要制定相关的策略,控制预警短信发送的频率,避免短信接收人频繁收到预警短信而产生垃圾短信(因为这样反而达不到预期的预警效果),因此预警信息的发布策略非常关键,这也是监测预警系统中最关键的一道出口。相关策略如表 5所示,其中预警等级提升规则的优先级最高,即只要预警等级较上次增加,则不管其他条件是否满足,都要发送预警信息。
表 5 预警信息发布策略
近年来,通过大量的应用实践,本系统收集到许多监测资料,基于本文的预警模型已成功预警多个滑坡,如表 6所示,但也有一些滑坡由于时间太短导致未能提前预警(如表 6的案例5),因此预警的时效性非常重要。
表 6 近年来本系统成功预警案例
目前,监测预警的流程大致分为5个步骤:
1) 现场监测设备采集监测数据。
2) 通过GPRS(general packet radio service)/北斗等传输手段将数据传回监测数据接收服务器。
3) 对监测数据进行粗差过滤、异常数据识别等操作后,集成到预警平台的数据库中。
4) 自动预警系统读取监测数据并进行预警计算,得到预警等级及预警短信。
5) 由短信发送服务将预警短信发送到责任人手机中。
从整个流程上看,本文提出的基于策略的预警模型调度算法明显缩短了步骤3)、4)的处理时间。
为了对比分析预警模型的不同调度算法对预警滞后时间的影响,本文选取黑方台陈家6号滑坡的部分实测监测曲线,分别采用不同的调度方式处理监测数据。图 11为采用时间驱动(时间间隔为5 min)、数据驱动和智能策略3种方式处理监测数据生成预警信息的时效性对比结果。
图 11 预警模型不同调度方式的时效性对比
表 7 基于数据驱动的监测预警流程图
在滑坡实时监测预警中,预警模型的选取和调度非常重要,预警的时效性也不容忽视,如果红色预警信息发出的滞后时间过长,会降低其时效性,甚至导致预警失败。本文对监测预警整个环节中的时间进行分析,研究预警模型的调度算法,寻求最小限度地缩短预警时间,及时发出预警信息,实现真正的实时预警,得到以下结论与认识:
1) 基于监测数据的特征,可将用于常规预警模型计算的监测数据分为3类:状态量、累积量与雨量数据。
2) 预警模型的调度算法主要有时间驱动和数据驱动,两种算法各有优势,适用于不同的场景,将两种调度算法充分结合,可实现更合理的快速预警。
3) 对于位移类的监测数据,基于策略的智能调度方式在滑坡变形初期可采用时间驱动模式,进入加速变形阶段后,采用数据驱动的模式进行预警模型调度,可以极大地减少预警计算次数,且能保证及时捕捉到关键的变形信息;对于状态类数据,可采用数据驱动的模式进行预警,以保障预警的及时性;对于雨量数据和雨量预警模型,建议采用时间驱动进行预警,结合数据特征确定时间间隔。
4) 本文研发了一套预警等级求解器,采用多线程思路构建基于上述策略的预警模型通用计算框架,实现对滑坡的实时预警,同时提出预警信息发布策略,尽可能避免产生过多的预警信息而又不丢失关键预警信息,真正实现对滑坡的动态实时跟踪过程预警。
END
来源:经纬石旁话遥测
编辑:张永超
初审:齐 阳
审核:彭震中