基于人工干预及多线程的试错法推求单位线
2011-12-08鲍瑞雪
鲍瑞雪
(河南省洛阳水文水资源勘测局,河南 洛阳 471000)
0 引言
水文预报是水文学的一个重要组成部分, 它是建立在充分掌握客观水文规律的基础上,预报未来径流变化的一门应用性学科。 初期的水文学方法来自对洪水规律的分析和总结,简单、实用,但没有严密的理论基础,基本上属于经验方法,也有人称其为工程师方法。 最早的水文学方法出现于20世纪30 年代,比较有代表性的有API 方法、单位线法和马斯京根法。 这3 种方法被我国的水文工作者称为水文预报的“老三篇”,至今仍被广泛使用[1]。
经验单位线(Unit Hydrography,简称UH)源自美国,于1932 年由舍尔曼(L. K. Sherman)提出,因此又被称为舍尔曼单位线。最初的单位线法只是用于流域汇流计算,后来扩展到河道汇流演算。 推求单位线需用次洪时段净雨量及流域出口断面的径流量和过程,推求方法主要有分析法[2]、试错法[3]、最小二乘法[4~5]。
由于流域汇流的复杂性和测验资料的误差,应用分析法和最小二乘法推求的结果往往会出现锯齿状和负值现象,甚至无法进行分析计算,所以很少有人应用。试错法使用比较广泛,但主要缺点是单位线过程的初始假定比较困难,试错过程的计算大量。鉴于此, 本文试提出建立人工干预机制降低单位线初始化难度、 引入多线程计算方法提高计算速度的思路,并使用VB.NET 编写应用程序,以期提高试错法推求单位线的效率。
1 水文单位线推求原理及思路
1.1 人工干预机制的建立
用试错法推求单位线时, 初始单位线假设的好坏直接影响迭代试算的次数。 这就要求预报人员不但具备丰富的经验, 还要对当地的水文特征有很深的理解。这样就限制了试错法推求单位线的发展。如果使用计算机假设所有单位线的组合,计算量很大。人工干预机制就是预报人员根据经验及单位线的约束关系等,对计算机试算范围做出限定,从而大大减少试算时间。 现假设有一条13 个时段的单位线,计算机假设和人工干预的对比分析结果如表1 所示。
表1 人工干预分析表Table 1 Manual intervention analysis
由表1 可以看出,对该单位线,计算机的计算次数是1 00013次,而人工干预需要6×51×41=12 546次,可见,人工干预设定了较为灵敏的位置,极大地使计算量减少。
1.2 多线程技术的实现
在单个程序中,同时运行多个线程完成不同的工作称为多线程。 它是程序中一个单一的顺序控制流程。 在这个流程中,多个线程共享数据空间,每个线程有自己的执行堆栈和程序计数器,为其执行上下文。 多线程同步完成多项任务,不是为了提高运行效率,而是为了提高资源使用效率,从而提高系统的效率[6]。
使用多线程主要有以下优点[7]:(1)用户界面可以更人性化;(2) 程序的运行速度可能加快;(3)在一些等待任务的实现上释放内存占用空间;(4)把耗时长的程序中的任务放到后台去处理。
在VB.NET 程序设计过程中,并不是线程越多计算速度越快[8]。 为了得到程序合理的线程数,应选取不同测试环境,对多线程进行测试,最终选取适合的线程数进行程序计算。
2 应用及分析
为验证本文所述方法可行性、有效性,作者使用实测资料进行单位线的推求试验,其步骤及结果如下。
2.1 多线程数的确定
进行程序设计之前,首先应确定多线程数。 如,设定一个12 万次的计算循环,在不同平台上分别使用单线程、双线程及三线程来计算,比较计算时间,最后确定程序设计最优的线程数。
经过测试(测试结果如图1 所示),得到双线程计算速度较快的结论。 考虑到因测试环境(Windows XP 操作系统,双核CPU,1G 内存)对结果具有一定的影响,得出“几核CPU 就使用几线程”是比较合理的结论。
图1 多线程速度测试结果Fig.1 Multithread speed test result
2.2 初始单位线的假设
在初始化单位线时,需要考虑3 个方面问题:(1)单位线时段长短。 单位线时段长不是唯一确定的影响因素,也没有规律可循。 程序在单位线初始化设计时,应该考虑单位线时段长度的可变性(例如时段数可在8 到13 之间变化),并生成相应长度的单位线过程。(2)单位线各个时段的变化范围。这一部分是人工干预的主要体现之处。 根据经验,设定好各个时段的变化范围, 可以有效减少计算次数。(3)单位线各个时段变化增量。增量是单位线从初始值到结束值的变化幅度,它可以控制单位线筛选的密度。 实际应用时,可以先使用大增量,初步筛选出单位线变化比较灵敏的区间, 再使用小增量,对此区间作进一步筛选,最后求出符合要求的单位线。 这样可以提高单位线推求的效率。
2.3 单位线的推求
在单位线初始化假设完成后,程序将自动计算每一条单位线推求的流量过程,并与推求单位线的流量过程进行比较。 最后,将满足精度要求的单位线及精度结果保存为文件,为人工进一步筛选提供客观依据。
图2 为某水库单位线的推求结果:预报径流过程与实测径流过程洪峰时段位置相同, 洪量误差10%以内,基本满足精度要求。
图2 某水库洪水单位线验证过程图Fig.2 Flood unit hydrograph verification course of one reservoir
3 结语
在实际的应用中,基于上述思路的计算程序减少了工作量、提高了工作效率,取得了一定的效果。这证明了引入人工干预及多线程的可行性,同时也可以从中得到以下几点认识:
(1)人工干预是一种人脑与电脑的结合,它可以降低程序编写的难度,减少试算时间,大大提高工作效率。
(2)多线程的运用可以提高计算速度,但是并不是线程数越多越好,应根据使用平台的具体测试结确定线程数。
(3)用单位线法假定的降雨在流域内均匀分布,流域汇流为线性系统,与实际不符。 因此,对于有些流域,一条单位线难以满足预报精度的要求,一个预报方案常配有多条单位线。
[1] 林三益. 水文预报[M]. 北京:中国水利水电出版社,2001:1-4.
[2] 李慧珑. 水文预报[M]. 北京:中国水利水电出版社,1993:1-11.
[3] 詹道江,叶守泽. 工程水文学[M].北京:中国水利水电出版社,1987:119-138.
[4] 吴云. 利用最小二乘方原理推求单位线[J]. 太原师范学院学报,2003(3):11-13.
[5] 长江水利委员会. 水文预报方法[M]. 北京:水利电力出版社,1979:132-147.
[6] 冯朝辉,范锐军. VB 下多线程实现机制的比较[J]. 计算机工程与设计,2010(1):228-231.
[7] 张焰林. 基于VB.NET 的多线程技术应用[J]. 计算机系统应用,2009(2):136-138.
[8] Billy Hollis. VB.NET 程序设计教程[M]. 康博, 译. 北京:清华大学出版社,2001:304-315.