【水文模型】09 新安江模型SCE-UA算法自动率定

2022/2/28
实现SCE-UA算法率定新安江模型

新安江模型标准版

河海大学水文水资源学院现已发布新安江模型标准版,各位网友可下载使用,https://shxy.hhu.edu.cn/research/xaj

下载地址

您可以从Github下载C++版本的👉👉项目文件

时空软件基于本C++版本的源程序,开发了新安江模型和SCE-UA算法的C#实现,有需要的网友可下载使用。

作者简介

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

目的

用自己编写的SCE-UA算法自动率定自己编写的三水源新安江模型,检验SCE-UA算法实用性。本地路径E:\Research\Practice\XAJ+SCEUA\XAJ+SCEUA

概述

给定参数初始值,运行新安江模型,将新安江模型计算结果与实测值对比,判断是否达到设定的终止条件。若否,通过SCE-UA算法调整参数,再次运行新安江模型,直到达到终止条件,参数自动率定流程结束。
在这里插入图片描述
模型参数:新安江模型待率定的参数值,如流域蓄水容量SM;
前处理:将SCE-UA算法率定得到的模型参数值写入模型输入文件中;
模型输入:新安江模型的模型参数、初始条件、降雨蒸发边界条件等;
模型输出:新安江模型计算得到的流量等水文要素;
后处理:从新安江模型输出结果中提取出待比较的流量时间序列;
结果对比:新安江模型计算结果与相应实测值的对比,如纳什效率系数、均方根误差等精度评价指标;
终止条件:有3种,1)迭代次数达到设定值;2)参数收敛性达到阈值;3)模型精度评价指标达到阈值。

如何使用

  1. 下载所有文件https://github.com/lujiabo98/XAJ-SCEUA
  2. 用 VS 2019打开XAJ+SCEUA.sln
  3. 解决方案下右键选择属性,所有配置,所有平台下,将C++语言标准设为 ISO C++20 标准
  4. Releasex64下,重新生成解决方案
  5. E:\Research\Practice\XAJ+SCEUA\XAJ+SCEUA\SCEUA\IOexamples下的scein.txtE:\Research\Practice\XAJ+SCEUA\XAJ+SCEUA\XAJ\IOexamples下的非示例文件粘贴到XAJ+SCEUA.exe的生成目录下(可能为E:\Research\Practice\XAJ+SCEUA\XAJ+SCEUA\x64\Release,需读者根据自己的设置情况来找XAJ+SCEUA.exe在哪里生成)
  6. 点击 本地Windows调试器 ,即可运行SCE-UA自动优化程序
    在这里插入图片描述

技术路线

将新安江模型嵌入SCE-UA算法中,主要在functn()函数中实现以下三步:

  1. 【前处理】在functn()中先把自动生成的参数写入到新安江模型的输入文件中;
  2. 【运行模型】再调用新安江模型模型计算出结果;
  3. 【后处理】最后计算出NSE,将1-NSE作为functn()函数返回值。

实现方法

将新安江模型和SCE-UA算法的源代码放在同一个解决方案中,主函数是SCE-UA算法,新安江模型写成函数形式,供functn()调用。

在函数functn()中添加了三个函数,分别为前处理、运行模型和后处理

前处理

PreProcessing()函数根据参数模板文件parameter.tpl比对待率定参数数组,将优化算法生成的参数数值写入待率定模型的参数输入文件parameter.txt中。

运行模型

RunModel()函数调用新安江模型程序

后处理

PostProcessing()函数调用ReadValues()从待率定模型(在这里指新安江模型)输出结果中读取数据(出口断面流量数据Q.txt);调用CalculateNSE()计算纳什效率系数NSE;因为SCE-UA算法为最小化算法,因此返回1-NSE,这样当1-NSE越小时,NSE越接近1。

与Dakota算法对比

  • 从效率上讲,Dakota高于SCE-UA,同样是率定新安江模型的7个敏感参数,Dakota共调用模型136次,而SCE-UA则调用模型1240次,是Dakota的9.1倍。
  • 从质量上讲,SCE-UA高于Dakota,同样是率定新安江模型的7个敏感参数,SCE-UA的纳什效率系数为0.882869,Dakota的纳什效率系数为0.8677575,SCE-UA比Dakota高0.015,1.74%。
  • 从时间上讲,Dakota耗时81.068 s,SCE-UA耗时80.252 s,大致相同。

总的来讲,SCE-UA算法收敛效率明显低于Dakota,率定质量与Dakota大致相当,优先选择Dakota进行模型的参数率定。

水文学及水资源的模型参数优化中,找到全局最优解是提升模型预测准确性的重要环节。SCE-UA算法(Sequential Compensation-based Evolutionary Algorithm for the Uncertain Environment)是一种特别适用于复杂多峰函数优化的进化算法,它能够有效地搜索不确环境中的全局最优解。具体到新安江模型参数优化的问题,SCE-UA算法是如何实现这一目标的呢? 参考资源链接:[SCE-UA算法优化新安江模型:实证分析与效果](https://wenku.csdn.net/doc/1izycoeop5?spm=1055.2569.3001.10343) 首先,SCE-UA算法通过序列化地应用补偿策略和进化策略,逐步缩小搜索范围。算法的基本思想是将整个种群分为若干个子种群(也称作“子群体”),每个子种群独立进化,同时在子种群之间进行信息交换和补偿,以此来保证种群的多样性。这一过程有助于跳出局部最优解,提高搜索到全局最优解的概。 其次,算法中采用的适应性机制允许种群在搜索空间中自适应地调整搜索步长和方向,这在处理多参数、多目标的优化问题时尤为重要。在新安江模型的应用中,算法利用适应性机制动态地调整参数,以减少水量误差和绝对值误差,直至达到全局最优解。 为了实现这一点,SCE-UA算法通常会使用特的目标函数来评估模型预测值与实际观测值之间的差异。在《SCE-UA算法优化新安江模型:实证分析与效果》一文中,研究者选择了总体水量误差作为日模型的目标函数,而使用绝对值误差作为次洪模型的目标函数。通过这些目标函数,算法能够对模型参数进行精确调整,从而使模型输出更接近实际水文过程。 最后,SCE-UA算法水文学及水资源模型优化中的优势在于其能够处理高维空间和多峰分布的优化问题,即使在目标函数复杂且存在大量局部最优解的情况下,仍能够保持良好的全局搜索能力。在安徽呈村流域的应用实例中,该算法成功地优化了新安江模型参数,并通过和检验验证了模型的改进效果,显示出其在实际应用中的潜力。 总的来说,结合《SCE-UA算法优化新安江模型:实证分析与效果》一文的内容,我们可以了解到SCE-UA算法在实现新安江模型参数全局最优解中的关键作用及其操作机制。这一成果不仅提升了新安江模型在特流域的应用效果,也为其他水文模型的优化提供了有益的参考和借鉴。 参考资源链接:[SCE-UA算法优化新安江模型:实证分析与效果](https://wenku.csdn.net/doc/1izycoeop5?spm=1055.2569.3001.10343)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

卢家波

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

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

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

打赏作者

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

抵扣说明:

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

余额充值