2022/2/28
实现SCE-UA算法率定新安江模型
您可以从Github下载项目文件。
如有问题,欢迎交流探讨! 邮箱:[email protected] 卢家波
来信请说明博客标题及链接,谢谢。
用自己编写的SCE-UA算法自动率定自己编写的三水源新安江模型,检验SCE-UA算法实用性。本地路径E:\Research\Practice\XAJ+SCEUA\XAJ+SCEUA
https://github.com/lujiabo98/XAJ-SCEUA
XAJ+SCEUA.sln
Release
和x64
下,重新生成解决方案E:\Research\Practice\XAJ+SCEUA\XAJ+SCEUA\SCEUA\IOexamples
下的scein.txt
和E:\Research\Practice\XAJ+SCEUA\XAJ+SCEUA\XAJ\IOexamples
下的非示例文件粘贴到E:\Research\Practice\XAJ+SCEUA\XAJ+SCEUA\x64\Release
路径下将新安江模型嵌入SCE-UA算法中,主要在functn()
函数中实现以下三步:
functn()
中先把自动生成的参数写入到新安江模型的输入文件中;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。
总的来讲,SCE-UA算法收敛效率明显低于Dakota,率定质量与Dakota大致相当,优先选择Dakota进行模型的参数率定。