刘家玮 刘 波,2,3 龚梦星 黄天天
(1.湖南农业大学信息科学技术学院 长沙 410128)
(2.邵阳学院湘西南农村信息化服务湖南省重点实验室 邵阳 422000)
(3.湖南省农村农业信息化工程技术研究中心 长沙 410128)
我国山地面积占全国土地总面积的2/3以上,而近几年人类的生产活动对环境产生了较大的影响,导致山洪灾害频繁发生。为了避免或减轻山洪灾害对人民生命财产的损失,需要进行灾情演进的可视化展示和危险性预测研究。
在山洪灾情演进可视化方面,通过构建一维或二维演进模型来实现灾情演进的动态展示是一类较为成熟的方法,但该类方法所构建的模型对灾害演进的动态过程刻画较差,可视性方面存在着较大的缺陷。对比之下,三维建模技术更能够提高河流、山地场景的可视化程度,因此在灾情演进动态展示方面得到了广泛的应用。黄健采用三维GIS平台技术中的OpenGL技术建立地形三维模型,快速逼真地获取了监控区的三维实景图,使系统能够及时反映灾害体的动态变形情况,提高了地质灾害的预警精度[1];魏一行等采用CSG法建立大坝周边场景模型,结合GUI技术、粒子系统动力学解算等技术进行洪水演进三维动态情景仿真研究,提高了防汛部门预警及决策的效率[2];姜仁贵等采用瓦片金字塔模型和矩形格网络模型分别实现了研究地区三维地形的构建和洪水淹没分析,实现了洪水淹没动态三维仿真[3];谭德宝等采用Vega Prime+OpenGL联合开发模式,实现了对超大流量天然河道洪水演进的三维可视化展示[4];Singh H等讨论了Web 3D开源技术在洪水模拟和查询方面的应用[5];Liu X J等在建立的三维场景中采用纹理映射技术和光滑粒子流体动力学方法实现了洪水演进的动态可视化,从而能更直观、真实地反映水文信息[6]。在山洪灾害防治领域,需根据灾情的演进情况进行危险性预测,分析出相应的危险性等级,并根据不同的危险性等级做出不同的预警提示。由于决策树分类算法具有分类效率高、便于理解等特点,因此在地质灾害的危险性预测方面已有广泛的应用。毛伊敏等提出了基于不确定决策树算法在滑坡危险性预测的方法,取得了不错的预测效果[7];赵建华等通过决策树算法建立了一种滑坡灾害危险性评价方法,实现了滑坡灾害区域评价与预测[8];周仲礼等将模糊综合评判法和决策树算法结合起来,建立了泥石流危险性评价模型,实现对危险性级别的准确判断[9];Joevivek V等提出了一种利用最优监督学习方法和决策树算法进行洪水危险性预测的研究工作[10]。
本文介绍了Unity 3D利用超声波测深仪测出的河道地形及DEM数据构建三维河流地形及河流横截面,实现山洪灾情演进可视化,根据灾情的演进情况使用决策树算法构建的危险性分析模块对危险性级别进行预测。通过与传统的山洪灾害防治系统相比,本文提出的系统模型具有如下优势:系统通过Unity 3D和DEM数据结合建立三维模型,可以充分发挥Unity 3D能够大量构建地形而几乎不受计算资源限制的优势,以比较高的速率构建三维模型[11];系统在用Unity 3D构建模型时嵌入了编写有马斯京根算法的洪水演进模型脚本,并将洪水的演进反映到河流横截面中提高了系统的可视化程度;系统利用决策树算法构建数学模型来进行危险性预测,提高了预警的实时性及准确性;系统通过网页端来展示实际及预测的数据,并通过一个二维地图实现了网页端与三维模型的交互,具有不错的交互性。为了更好地对系统的性能进行介绍,本文主要是针对山洪灾害中的河流洪水来进行研究,研究区域为长沙县郎梨地区附近的河段。
本文所构建系统的核心是洪水三维动态演进模型,该模型由洪水演进模块、危险性预测模块和预警响应模块组成,其中洪水演进模块又可以分为水文预测模块、三维河流地形模块。在该模型中由马斯京根法构建的水文预测模块将预测的水位、流量数据通过脚本程序输入到三维河流地形模块中,并在三维河流地形模块中将预测的水位以河流水位的升降及河流覆盖面积的变化的形式,分别在构建的三维河流横截面及河流地形上动态演进出来。洪水演进模块中的水位、流量会传输到由决策树算法构建的危险性预测模块中,通过该模块可以分析出危险性等级。该模型根据危险性等级的不同会向不同的用户发送相关的预警短信,这样用户不仅能够实时了解山洪灾害的受灾情况,还能通过构建的三维河流场景中河流流水位及覆盖面积的变化直观地观察到灾情的演进情况。图1展示了洪水三维动态预测演进模型的结构。
下面分别从该模型建立的关键技术、模型中各个模块的构建过程来详细地介绍该模型是如何关联的。
2.1.1 决策树C4.5算法原理及预测过程
决策树C4.5算法是对ID3算法的改进,C4.5算法以ID3算法为基础,使用信息增益率代替信息增益来选择分类属性。C4.5算法既支持对离散属性的处理,又支持对连续属性的处理,它选择信息增益率最大的属性作为分类属性,递归的构造决策树。以下为决策树算法中用到的相关计算公式。
图1 洪水三维动态预测演进模型的结构图
在以上公式中D代表已知类属性样本的一个训练集。设Ci(i=1,2,…,n)为类标记属性具有n个不同的值,Pi代表D中任意一个样本属于类Ci的不等于零的概率;A代表训练集中的一个属性,则式(1)用来计算训练集D中样本的类标号所需的平均信息熵;式(2)用来计算属性A中的v个不同的值对训练集D的划分所对应的信息熵;式(3)用来计算属性A所对应的信息增益;式(4)用来计算使信息增益规范化的分裂信息的大小;式(5)用来计算属性A所对应的信息增益率的大小。
决策树算法的输入为训练集,输出为由训练集训练得到的一颗决策树,下面为决策树算法的具体执行过程[12]:
1)对训练集进行数据预处理。
2)创建节点,选取训练集中的候选属性集。
3)对候选属性集中的数据进行离散化处理后,计算每个属性所对应的信息增益率。
4)在候选集中找出信息增益率最大的属性作为分裂属性。
5)对分裂属性的每个可能值分支,将分支节点插入队列中。
6)从候选属性集中减去当前使用属性。
7)从队列中取出一个节点,递归执行步骤3)~6),直到候选属性减为空。
8)为各个叶子节点分配类标号,算法结束运行。
在决策树预测未知数据的过程中,首先要进行数据预处理,数据预处理首先需要对原始数据进行筛选,需要将一些有空白项或者错误属性的记录清理掉[7],在进行数据预处理后选取一部分数据作为训练集用来建立分类模型,该模型随后将运用于属性集,用来对属性集中的未知类标号进行预测[13],训练集和属性集都是作为决策树算法的输入用来建立决策树的,决策树建立后需要对决策树进行相应地剪枝从而达到优化的效果,最后就会得到所需预测的结果。
2.1.2 马斯京根法
马斯京根法是一种广泛用于水文预报中建立预报模型的方法,通过这种方法建立数学模型主要包括收集研究河段的水文数据、确定相关参数K、x和Δt、利用演算方程进行计算、对演算结果进行检查等步骤。
通过马斯京根法构建水文信息预报模型需要使用如下方程:
式(6)即为马斯京根流量演算方程。当确定参数 K,x和时段 Δt后,就根据式(7)~(10)可求得C0、C1和C2。上述公式中 Q上,1,Q上,2分别代表时段始、末上断面入流量;Q下,1,Q下,2分别代表时段始、末下断面出流量。Δt代表计算时段,K和x分别代表稳定流时的河段传播时间和流量比重因素[14]。
山洪灾害三维动态演进的整体思路如图2所示。首先是利用Unity 3D可以构建海量三维地形的优势,结合DEM数据和通过超声波测深仪探测到的河道水下地形数据分别构建河流水平面以上地形和河流横截面。这样可以让用户从多角度观察到当前河道的情况;其次是利用马斯京根法并结合传感器检测到的水位、流量等相关的水文信息来构建一个水文预测模块,将该模块预测到的流量信息通过水位-流量对应关系映射出水位信息;最后将这些预测的流量、水位信息编写到一个可以在Unity 3D中运行的水位升降脚本中,通过该脚本并结合Unity 3D中对应的动态水插件将河流的升降动态地反映到河流水平面和河流横截面中。
图2 山洪灾害三维动态演进的整体思路
1)水文预报模块
本文采用马斯京根法根据采集到的流量、水位等信息构建了水文预报模块,为了提高建模的效率以及方便将预报模型移植到网页端及Unity 3D河流三维模型中,笔者在理解马斯京根法的基础上编写了相关程序实现了试算法确定相关参数、求出预测流量等操作。首先从湖南省水文信息查询系统(http://61.187.56.156/wap/index_sq.asp)中获取了2016年7月2日至7月6日长沙县郎梨地区附近河段的相关水文数据。通过在所编写的程序中步长从0.01开始遍历参数x至0.5,结合已获取的相关水文信息,利用试算法建立W-Q′关系曲线。经过遍历发现当x在0.4左右时W-Q′关系曲线的斜率K在一定极小的误差范围内为一定值,所以通过试算法确定x为0.4,K为12,Δt为12。以下是试算法程序的算法流程。
(1)定义一个变量x,设定x的初值为0.01。
(2)若x的值小于0.5,则根据给出的流量数据按照方程 Q′=x(Q上-Q下)+Q下(Q′为储流量、Q上为上断面流量、Q下为下断面流量)求出一组Q′值并保存在数组中。
(4)将所求得的一组槽蓄变量累加起来得到各时段末的W(t)。
(5)求出各个时段ΔW/ΔQ′的值,并将这些值两两相减取绝对值。
(6)如果上述绝对值组中有超过百分之九十以上的数趋近于0则打印出x及k=ΔW/ΔQ′的值并终止程序,否则将x加0.01后从步骤(2)开始继续执行此函数。
基于前面的信息结合式(7)~(10)可以算出C0=0.09,C1=0.82,C2=0.09,根据式(6)可以算出对应的实测流量。为了更直观地对预测流量的精度进行展示,笔者绘制了一个折线图将实际流量和预测流量进行一个对比。
图3 实际与预测流量对比图
从图3中可以看出通过该预报模型预测的流量具有不错的精度。
为了在预测流量的同时将水位的预测信息直观地显示出来,可以将郎梨站历年汛期时所采集的大量流量和水位数据,以流量为自变量,水位为因变量采用一元回归分析法建立流量与水位之间的映射关系如图4所示。
图4 水位流量关系图
2)三维河流地形模块
三维虚拟环境建模方式的选取是地形、河流三维场景等流域三维仿真模拟的关键[15]。传统的地理三维建模大多采用WebGIS,但这是建立在大量的航拍遥感图像的基础上的,这种需要大量数据建模的做法受到了计算资源有限的限制。本文中采用的Unity 3D几乎可以无限制地构建三维地理模型。为了使构建的三维地理模型更加真实,本文中采用了将DEM(数字高程模型)导入到Unity 3D来构建河流水平面以上的地形,将超声波测深仪采集到的河流水下地形数据写入到一个可构造河流水下地形的脚本中实现对河流横截面的构建。具体的地形及河流三维模型的构造步骤如下。
(1)利用ArcGIS生成DEM地形数据。
(2)将DEM数据导入Unity 3D中生成相应的三维地形模型。
(3)在Unity 3D中构建另一个场景,并将河流水下地形构建脚本映射到该场景中生成河流横截面效果图,如图5所示。
(4)利用Unity 3D中提供的水体建模插件来为场景中的河道添加水体。
(5)在已构建的地形场景中设置GUI控件But⁃ton和Text用来实现场景交互及相关信息的显示,如图6所示。
图5 河流横截面
图6 三维水上地形
上述将DEM数据和Unity 3D结合起来构建河流地形模型具有如下优点:1)Unity 3D软件几乎可以不受限制地构造地形,这克服了其他借助大量航拍图像来构造三维模型对计算机资源需求量大的缺点。2)克服了Unity 3D中采用涂刷工具绘制地形效率低、工作量大、不能生成真实地形等缺点。3)直接利用DEM数据地形建模,使得建模速度大大提高,还可以对地形进行多次编辑,提高真实感及动态交互效果。4)利用超声波测深仪核实所构数据的准确性。
构建危险性预测模块的核心思想是把洪水演进模块中预测的水位、流量输入到由决策树算法训练得到的数学模型中进行训练从而得出相应的危险性等级,这就完成了危险性等级的预测,不同危险性等级会触发预警响应模块中的短语发送接口向不同用户发送预警短信。下面是该模块具体的实现过程。
1)数据预处理
在该系统中从传感器采集来的大量原始数据中包含一些脏数据,例如噪音数据、不完整数据、不一致数据等。这些脏数据将给数据挖掘过程带来干扰。结合山洪灾害数据中数据重复率较高、数据孤立点多的特点,在此系统中采用数据预处理中的数据清理技术来对数据进行预处理。其处理过程可以分成如下几步:(1)属性删除:将大量的重复数据删除。(2)属性值概化:把一些可以用量词来表述的属性进行概化处理。例如可以把山洪灾害中的受灾程度概化为{受灾大,受灾小,受灾无}。
2)训练集的建立
结合山洪灾害中河流洪水的危险性等级的影响因素,选天气、主要河段水位(m)、主要河段流量(m3.s-1)作为属性集合,选危险性等级作为类标号。数据来源是湖南省水文信息查询系统(http://61.187.56.156/wap/index_sq.asp),选取了长沙县郎梨地区2015年、2016年汛期(4月~7月)的天气、主要河段水位、流量等5559条记录作为训练集。在此训练集中天气为离散属性,天气的取值集合为{多云,阴,晴,雷雨,阵雨,小雨,中雨,大雨,暴雨}。主要河段水位、主要河段流量为连续属性。危险性等级作为类标号,其取值集合为{a,b,c,d},a代表安全级别,b代表轻度预警,c代表中度预警,d代表重度预警。根据属性集合和类标号,建立了如表1所示的训练集。
表1 训练样本
3)离散属性和连续属性的处理
C4.5算法主要通过对每个节点的信息增益率的计算来得出分裂规则,下面是上述训练集中各个属性的信息增益率的计算。首先根据式(1)计算类标号危险性等级所对应的信息熵:
上述训练集中天气为离散属性,利用式(2)可以得到信息熵,利用式(3)可以得到信息增益,最后利用式(4)、(5)计算得到天气的信息增益率为
上述训练集中的水位、流量为连续属性。在C4.5算法中,在面对属性为连续型的样例集合时,首先要将其离散化,转化为离散的训练样例集。在训练样本中主要河段水位和主要河段流量为连续属性,对连续属性的划分应选择最佳分裂点。首先将连续属性进行预先的排序,再从各个相邻的两个排过序的属性值中选择两个属性值的中点作为候选分裂点,这样就完成了对连续属性的离散化操作。通过对各个候选分裂点的信息增益进行计算,选择信息增益最大的点作为最佳分裂点。最后利用式(4)、(5)可以计算得到最佳分裂点处的信息增益率。经过计算水位和流量的信息增益率如下:
4)决策树的生成
采用自顶向下的递归算法来生成决策树,对于离散属性每次选取分类属性的原则是选择信息增益率最大,而且所获取的信息增益又不低于所有属性信息增益的平均值的属性作为分支节点[16]。对于连续属性选择分类标准的原则是先对连续属性进行相应地离散化处理后,再计算各候选分裂点中信息增益最大的点作为最终的分裂点。生成决策树后还应该对决策树进行修剪,图7为经过修剪后的决策树。
5)危险性预测模块评估
将该模块所做的危险性等级预测与长沙县郎梨地区在2015年和2016年汛期的预警情况进行对比,发现该模型预测的结果是较为准确的,但通过模型预测结果与实际情况的对比,也发现了该系统在长沙县的不同地区的预测精度存在一定的差异,这种差异在经过评估后分析发现是由于数据预处理不够造成的,为了解决这一问题在后期的开发过程中应该对数据预处理过程进行改进。
图7 生成的决策树
图8为系统体系结构图。该系统利用超声波测深仪及GPS定位仪采集河道水下的地形数据,通过物联网技术中的无线传感器技术来实现对水位、流量等数据的采集,并将采集到的相关数据传送到数据采集器通过GPRS网络传输到数据库服务器存储起来。
图8 系统体系结构
Unity 3D接收相应的DEM数据映射成河流水平面以上地形,数据库服务器中存储的河道水下地形数据传送到Unity 3D结合相关算法映射成河流横截面,河道中的动态河流效果是通过Unity 3D中的动态水流插件设计而成的,在Unity 3D中还通过编写脚本结合马斯京根算法构建了一个洪水演进模块,通过该模块可以将水位的升降变化映射到河流横截面的水位升降及河流水平面以上的河流覆盖面积的变化上,为了更好地查看预测水位、流量,还利用了Unity 3D自带的GUI Text以文本框的形式对相关预测信息进行展示。
数据库服务器中存储的历史水位、流量以及互联网天气接口中的历史天气数据会传送到决策树算法建立的训练模型中进行训练,最终得到一个能够判定危险性级别的预测模块。Unity 3D构建的洪水演进模块所预测的相关水位、流量会输入到该危险性预测模块中进行测试从而得到相关的危险性等级,不同的危险性等级可以触发系统发送预警短信给不同的用户。
网页前端能够读取数据库中的相关数据并以折线图、柱状图的方式展示当前的实际水位、流量以及预测的水位流量,在网页端,用户可以在收到相应的预警短信后通过网页前端调用短信发送接口向各个监控点发送决策短信。在此系统中网页前端与Unity 3D构造的三维动态演进模型是通过网页端中的二维河段地图联系起来的,在二维河段地图中会根据各个河段不同的预警情况做出不同颜色的标注,颜色越深代表情况越紧急,用户点击不同颜色的标注就可以进入到所对应的三维场景中了。这样就可以在很大程度上提高防洪预警的效率,极大地保护了人们的生命财产安全。
本系统对2017年长沙县郎梨地区的汛期进行了相关测试并取得不错的效果,图9为系统测试时网页前端水位预测图,其中深色的柱状代表预测水位,浅色的柱状代表实际水位。图10为系统所构建的三维动态演进效果图。
图9 网页前端预测图
图10 三维动态演进效果图
本文主要研究了山洪灾害演进的可视化展示和危险性预测,针对传统的山洪灾害预测精度不高、灾害场景可视化较差等不足,将决策树算法、马斯京根法、Unity 3D建模、DEM和水文信息探测技术相结合构造了洪水三维动态预测演进模型,有效地解决了山洪灾情演进的动态展示及灾情危险性预测等问题,能够让用户从多个角度对灾情演进进行观测,并根据不同的危险性级别向不同用户发送预警短信。