【PEST++】02 新安江模型参数自动率定

PEST++系列文章

【PEST++】01 参数优化与灵敏度分析
【PEST++】02 新安江模型参数自动率定
【PEST++】03 水文模型不确定性和灵敏度分析
【PEST++】04 用户手册笔记

一、背景

1.1 模型简介

新安江模型是河海大学水文院赵人俊教授于上世纪80年代提出的一个具有世界影响力的水文模型。新安江模型是分布式模型,可用于湿润地区与半湿润地区的湿润季节。当流域面积较小时,新安江模型采用集总模型,当面积较大时,采用分块模型。它把全流域分为许多块单元流域,对每个单元流域作产汇流计算,得出单元流域的出口流量过程。再进行出口以下的河道洪水演算,求得流域出口的流量过程。把每个单元流域的出流过程相加,就求得了流域的总出流过程。
该模型按照三层蒸散发模式计算流域蒸散发,按蓄满产流概念计算降雨产生的总径流量,采用流域蓄水曲线考虑下垫面不均匀对产流面积变化的影响。在径流成分划分方面,对三水源情况,按“山坡水文学”产流理论用一个具有有限容积和测孔、底孔的自由水蓄水库把总径流划分成饱和地面径流壤中水径流地下水径流。在汇流计算方面,单元面积的地面径流汇流一般采用单位线法,壤中水径流和地下水径流的汇流则采用线性水库法。河网汇流一般采用分段连续演算的Muskingum法或滞时演算法1

具体的建模过程和程序源代码,可以参见本人的另一篇博客新安江模型C++实现

1.2 PEST++简介

PEST(Parameter Estimation)自动率定程序是由John Doherty博士于1994年基于GML算法开发的独立于模型参数估计和不确定性分析的综合软件,其具有逆海森方法和最速下降法的优点,可以通过较少的模型运行次数,得到最优的参数结果2 。2009年,Welter等人在美国地质调查局的资助下基于原有的PEST参数自动率定程序开发PEST++非嵌入式参数率定程序3 。PEST++可以进行高度参数化的反演以及使用差分迭代的全局优化,在需要的时候会自动进行奇异值分解辅助反演,易用性更强4

使用PEST++做模型参数的自动率定需要准备的文件,请参见博客PEST++参数优化

1.3 所用程序

本次率定主要用到新安江模型程序xaj.exe和PEST++套件程序(pestpp.exe和tsproc.exe)。xaj.exe是使用MATLAB R2016a编译输出的,读者如果未安装MATLAB,将无法运行xaj.exe,安装附件中的MCR_R2016a_win64_installer.exe即可。PEST++套件程序(pestpp.exe和tsproc.exe)都是通过命令行运行的程序,直接点击无法运行。为方便读者使用,笔者已编写自动率定脚本自动率定.bat,读者直接点击运行即可。如读者想探索命令行运行的方式,可在率定文件夹内右键选择在此处打开命令窗口(如无此选项,请自行百度解决),在命令行分别输入.\tsproc.exe tsproc.dat tsproc.rec.\pestpp.exe xaj.pst 即可自动率定。

二、原理

新安江模型参数多,采用人机交互的方式率定耗时多,准确度低。本文尝试使用PEST++自动率定。

2.1 目标函数

本文采用单目标进行参数优化,以流域出口断面模拟流量过程与实测流量过程差的平方和最小为优化目标5 ,目标函数公式为:
m i n f = ∑ i = 1 n ( Q m o d , i − Q o b s , i ) 2 minf= \sum\limits_{i=1}^n(Q_{mod,i}-Q_{obs,i})^2 minf=i=1n(Qmod,iQobs,i)2

式中: f f f为目标函数; i i i为时段序号; n n n为总时段数; Q m o d , i Q_{mod,i} Qmod,i表示第 i i i时段的出口断面流量模拟值; Q o b s , i Q_{obs,i} Qobs,i表示第 i i i时段的出口断面流量实测值。

2.2 参数范围

在这里插入图片描述
图中给出范围的参数为需要率定的参数,其余采用图中默认值。

三、过程

3.1 准备文件

在开始率定之前,需要准备各种必需的文件,均为文本文件(txt),后缀名需要改为要求的格式。

3.1.1 实测值文件

将流域出口断面流量过程实测值处理成**站点样本文件(SSF)**格式,即站点标识符、时间、实测值的形式,得到observedflow.ssf文件。该文件其实是后缀名修改为.ssf的文本文件,具体形式如下图。在这里插入图片描述
图中estimate为站点标识符,统一时间序列值取同一个名字;01/01/1989 00:00:00为时间,格式必须按照mm/dd/yyyy hh:mm:ss,注意中间至少有一个空格;0.52为实测值。

3.1.2 参数及参数组文件

将需要率定的参数名、初始值、上下限、所属参数组列于文件parameter.txt中。将各参数所属的各组以及步长列于group.txt中。每个参数都属于一个参数组,多个参数可以属于同一个参数组,同一参数组的参数具有物理意义上的联系。一般将没有关系的参数分别设为一个参数组即可。
在这里插入图片描述

▲参数文件parameter.txt

其中none表示不操作;fixed表示固定参数值;log表示取对数;tied_xx表示与xx绑定初始值比例。
在这里插入图片描述

▲参数组文件group.txt

参数组文件包括参数文件中涉及到的所有参数组

3.1.3 模板文件

每一个含有待率定参数的模型输入文件都需要对应的模板文件,以方便PEST++自动率定程序每次迭代计算后构建新的模型输入文件。将模型输入文件中待率定参数值的位置替换为参数名,并使用标识符括起来,即为模板文件。模板文件的后缀名必须为.tpl,文件名则随意,可以与模型输入文件名相同,也可以不同。
在这里插入图片描述

▲模型输入文件input.txt

在这里插入图片描述

▲模板文件input.tpl

其中ptf表示 P ‾ E S T \underline{P}EST PEST t ‾ e m p l a t e \underline{t} emplate template f ‾ i l e \underline{f}ile file,#为标识符,注意之间有一个半角空格。原来参数的位置用参数名替代,并用两个标识符括起来,注意标识符之间的空白部分是空格,而不能用Tab键输入。

3.1.4 命令行文件

命令行文件通常是批处理脚本,由模型应用程序和时间序列处理程序及控制文件组成。后缀名从.txt修改为.bat。时间序列处理程序及控制文件将在后面介绍。
在这里插入图片描述

▲命令行文件batch.bat

3.2 编写时间序列控制文件

在准备好上述文件之后,由于模型输出值为一个时间序列,即流域出口断面流量过程模拟值为固定时间间隔的系列值,因此需要时间序列处理程序tsproc.exe将模拟值序列处理成与实测值序列相同时间间隔的序列,这一步骤称为内插tsproc.exe为PEST++自动率定套件的一部分,可以使用命令行单独运行。需要指出的是,时间序列处理控制文件不仅能使模拟值与实测值相匹配,还可以自动生成PEST++控制文件、指令文件,对处理目标函数为时间序列的自动率定问题非常有用。
时间序列控制文件由多个数据块组成。下面介绍如何编写时间序列控制文件tsproc.dat。tsproc.dat是运行tsproc.exe所必需的文件。

3.2.1 设置关键词和日期格式

时间序列控制文件由多个数据块组成,其中SETTINGS数据块必须位于文件的开头,用来设置全局的关键词,其余数据块的关键词与之相同或为all,则将被执行,否则将不执行。日期格式可以设置为dd/mm/yyyymm/dd/yyyy
在这里插入图片描述

▲SETTINGS数据块

3.2.2 读取模拟值及实测值

模拟值和实测值都以站点样本文件(SSF)格式分别存储在flow.ssf和observedflow.ssf文件中。通过GET_MUL_SERIES_SSF数据块读取,并分别存储在mod_est和mea_est系列中。
在这里插入图片描述
在这里插入图片描述

▲GET_MUL_SERIES_SSF数据块

3.2.3 内插模拟值

由于实测值是一系列不规则的时间序列值,因此需要将固定时间步长的模拟值内插成与实测值时间相对应的序列。这一步使用NEW_TIME_BASE数据块,生成的新模拟值序列为i_mod_est。
在这里插入图片描述

▲NEW_TIME_BASE数据块

3.2.4 写入输出文件

使用LIST_OUTPUT数据块,将生成的i_mod_est和i_mod_test序列写入xaj.out输出文件中。
在这里插入图片描述

▲LIST_OUTPUT数据块

3.2.5 写入PEST++控制文件和模型指令文件

使用时间序列处理程序tsproc.exe不仅可以处理模型输出的模拟值序列,还可以自动生成运行PEST++所必需的PEST++控制文件model.pst和模型指令文件model.ins。使用WRITE_PEST_FILES数据块,首先将含有待率定参数的模型输入文件与模板文件对应起来,然后指定各观测值所占权重,最后给出参数文件、参数组文件及命令行文件名。运行时间序列控制文件,即可生成控制文件和指令文件。
在这里插入图片描述

▲WRITE_PEST_FILES数据块

四、结果

4.0 安装MATLAB Runtime

由于本人采用MATLAB R2016a编写新安江模型,并将其编译成xaj.exe可执行程序,因此需要相应版本的MATLAB Runtime运行库的支持。在MATLAB官网下载MATLAB Runtime R2016a (9.0.1)版本的运行库安装到电脑即可,文件大小约1G,下载较慢,耐心等待。
在这里插入图片描述
下载到电脑后,要进行安装。安装较为简单,这里不再介绍,如遇到问题,可自行百度。
如果不进行该步,在下一步率定参数会遇到这样的错误。
在这里插入图片描述

4.1 率定参数

上述文件准备好后,即可开始自动率定。点击自动率定.bat即可开始,大约需要一个小时。参数率定结果见xaj.par文件的第二列数据。
在这里插入图片描述

▲输入y后回车

在这里插入图片描述

▲率定结果文件xaj.par

在这里插入图片描述

▲率定结果

4.2 参数检验

率定结束后,点击参数检验.bat,查看test.txt即可得1995-1996年数据参数检验结果。
在这里插入图片描述

▲率定参数1995-1996年相对误差统计 text.txt

在这里插入图片描述

▲率定参数1996年检验

五、附件

率定所需文件见附件

附上一些学习资料,供参考。
官网PEST++源代码、官方文档:pestpp 4.2.1TSPROC User manual

参考手册下载地址:

作者简介

很高兴认识您!
我叫卢家波,河海大学水文学及水资源博士研究生,研究兴趣为高效洪水淹没预测、洪水灾害预警、机器学习、替代模型和降阶模型。
变化环境下,极端洪水事件多发,我希望能通过研究为水灾害防御做出贡献,为人民服务。
欢迎交流讨论和研究合作,vx Jiabo_Lu
主页 https://lujiabo98.github.io
简历 https://lujiabo98.github.io/file/CV_JiaboLu_zh.pdf
博客 https://blog.csdn.net/weixin_43012724?type=blog
来信请说明博客标题及链接,谢谢。

参考文献


  1. 新安江模型,百度百科 ↩︎

  2. 杨博,陈莹,陈兴伟,刘梅冰,高路.基于PEST的HSPF模型径流模拟优化[J].中国水土保持科学,2018,16(02):9-16. ↩︎

  3. Doherty, J., White, J. and Welter, D., 2018c PEST and PEST++: An Overview. Watermark Numerical Computing, Brisbane, Australia. ↩︎

  4. White, J.T., Welter, D.E. and Doherty, J., 2018. Manual for Version 4 of PEST++. Published by CAELUM. ↩︎

  5. Jeremy T. White,Michael N. Fienen,Paul M. Barlow,Dave E. Welter. A tool for efficient, model-independent management optimization under uncertainty[J]. Environmental Modelling and Software,2018,100. ↩︎

  • 25
    点赞
  • 93
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 43
    评论
### 回答1: pest 模型默认参数是指在进行参数估计时,若没有指定具体的参数值,那么模型会使用默认的参数值进行估计。不同的pest 模型可能有不同的默认参数,下面以传统的线性回归模型为例,介绍一下其默认参数。 在线性回归模型中,常使用的默认参数是最小二乘法(OLS)。最小二乘法默认使用的参数是均值方差,即模型通过计算样本观测值和样本均值之间的差异,确保差异的平方和最小。这意味着模型默认参数会寻找与实际观测数据最接近的预测数据。 具体来说,在OLS回归模型中,假设存在一个因变量Y和一个自变量X,模型的默认参数会根据训练数据集的特征推测出最佳的拟合函数。默认参数下,模型会将通过最小化残差平方和的方式,找出使得拟合函数尽量接近数据的斜率和截距。在OLS模型中,斜率表示因变量Y与自变量X的线性关系的变化率,截距表示对于自变量为0时,因变量的预测值。 需要注意的是,虽然默认参数在很多情况下效果还不错,但在某些特殊情况下,可能无法准确预测结果。因此,根据实际需求和问题的复杂程度,我们可能需要通过指定特定参数来优化模型的性能。 ### 回答2: pest模型默认参数指的是,在使用pest模型进行数据分析或预测时,模型所使用的初始参数的默认取值。 具体而言,pest模型是一种常用的参数估计方法,用于在数据不完全或有噪声的情况下,估计模型参数值。默认参数指的是,在没有明确给定参数值的情况下,pest模型使用的默认取值。 由于不同的问题和数据具有不同的特征,故因此pest模型的默认参数需要根据具体情况进行设定。一般来说,pest模型的默认参数是基于统计学和经验推断得出的。 例如,在进行线性回归分析时,pest模型的默认参数一般为最小二乘法(OLS),即最小化残差平方和,通过计算预测值与实际观测值之间的差异来估计模型参数。 然而,在实际应用中,根据具体问题和数据的特点,我们可能需要调整pest模型的默认参数,以获得更好的拟合效果或更准确的预测结果。常用的调整方法包括使用加权最小二乘法、选择不同的模型形式或尝试其他的优化算法等。 总之,pest模型默认参数pest模型在缺乏具体参数值时所使用的默认取值。我们可以根据具体问题和数据的特点,对这些默认参数进行调整,以获得更好的分析和预测结果。 ### 回答3: pest模型是一种用于非线性参数估计的统计建模方法,在该模型中,参数的默认设置会根据特定的推断问题而有所不同。一般来说,pest模型默认参数包括参数的初始值、参数的下限和上限、迭代次数等。 首先,参数的初始值是指在参数估计过程开始时,待估计的参数的初始值。对于pest模型而言,这些初始值可以是根据先验知识、历史数据或者经验得出的。默认参数通常是合理的初始值,以保证模型的收敛性和准确性。如果默认初始值效果不佳,研究者可以根据需要进行调整。 其次,参数的下限和上限是指参数的取值范围。在pest模型中,使用参数的下限和上限可以避免参数估计值超出合理范围。默认参数的选择依赖于特定的实际问题和模型假设。为了保证参数估计的稳定性和有效性,合理的下限和上限是很关键的。 此外,迭代次数也是参数估计过程中的一个重要默认参数pest模型使用迭代的方式逐步更新参数估计,直到达到设定的收敛准则。迭代次数的选择可以影响参数估计的精确度和稳定性。合理的默认迭代次数能够在保证估计质量的同时尽量减少计算时间。 总之,pest模型默认参数的选择是根据特定的估计问题和模型假设而定的。这些默认参数的目的是尽可能地为用户提供一个准确和稳定的参数估计结果,并可以根据具体需求进行调整。
评论 43
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卢家波

如果对你有帮助,请我喝杯茶吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值