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

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

下载地址

您可以从Github下载👉👉项目文件

作者简介

很高兴认识您!
我叫卢家波,河海大学水文学及水资源博士研究生,研究兴趣为高效洪水淹没预测、洪水灾害预警、机器学习、替代模型和降阶模型。
变化环境下,极端洪水事件多发,我希望能通过研究为水灾害防御做出贡献,为人民服务。
欢迎交流讨论和研究合作,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进行模型的参数率定。

  • 10
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
SCE-UA(Shuffled Complex Evolution-University of Arizona)算法是一种用于参数估计和优化问题的进化算法,适于连续参数空间。源自于传统的演化算法,如遗传算法和进化策略,并结合了复杂系统中的随机性和有序性。 该算法主要针对复杂的非线性、非凸优化问题,特别适用于模型参数估计、水文学、气象学和环境科学等领域。SCE-UA算法的基本思想是通过随机生成一组不同的参数向量,并使用交叉和变异操作产生新的参数向量组成的群体。然后,根据设定的适应度函数对每个参数向量进行评估,并选择适应度较高的一部分进行下一代的繁衍。 在每一代中,SCE-UA算法通过对参数向量进行随机扰动和重排来增加群体的多样性和全局搜索能力。这种通过交换参数向量来增加多样性的操作被称为“complex shuffling”或“complexation”。 SCE-UA算法通过迭代搜索过程来不断优化参数向量,并最终找到一个逼近最优解的解集。该算法通过自适应调整步长和交叉率等参数,以平衡全局搜索和局部搜索之间的权衡。 在Matlab中,你可以使用SCE-UA算法来解决参数估计和优化问题。有一些第三方工具箱或代码库提供了SCE-UA算法的实现,如“SCE-UA Global Optimization Algorithm Toolbox”和“SCE-UA Optimization Algorithm”。 希望我对SCE-UA算法能够给你提供一些帮助!如果你有更多关于该算法的问题,可以继续问我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

卢家波

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

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

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

打赏作者

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

抵扣说明:

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

余额充值