【SWAT水文模型】SWAT水文模型建立及应用第六期:SWAT模型率定(SWAT CUP)_swat率定


2、表格视图(Form View)  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/9293c91c9a1c475297c4a220d03059fa.png#pic_center)



> 
> **修改方案说明:**  
>  方案1:v  
>  表示参数由最终值替换  
>  方案2:r(此时min/max范围应为[-1,1])  
>  表示参数由参数初始值×(1+最终值)替换。  
>  方案3:a  
>  表示参数由(初始值+a)替换
> 
> 
> 


#### 输入数据注意事项


* Obsered\_rch.txt 和observed.txt里校准数据如果有多个站点,建议起止时间一致,(小于等于simulation运行的时长),并且开始时间应与simulation开始时间一致
* 注意有缺失数据的格式
* SUFI2\_extract\_rch.def里需要提取的column和reach要确保正确


### 2.2 运行流程


#### Step1:建立SWAT CUP工程


1、选择New建立工程  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/75bd22a5e10b4cecb034d8abd5d1ca73.png#pic_center)


2、选择txtinout文件夹(选择正确的位置才可导入)  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/268a6d67f1374a818ca256cc5407ae6b.png#pic_center)  
 选择SWAT版本:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/cd3c7e5e0a5641199c6a2bb1e7c1da14.png#pic_center)


3、选择校准时的模拟方法  
 (注意不同算法对应的操作界面可能有所不同,以第一个算法SUFI2为例)


* SUFI2:Sequential Uncertainty Fitting version 2连续不确定率定法V2
* GLUE:广义最大似然不确定估计
* ParaSol:参数优化方法
* McMc:蒙特卡罗过程
* PSO:粒子群优化算法


根据需要,选择校准时的模拟方法:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/f38cbef141194d17b2a4a7eaf98e5f1f.png#pic_center)


4、命名并选择输出文件夹(自定义)。注意“Project Name”窗口右侧的默认附加名。  
 程序创建想要的工程目录并复制所有TxtInOut 文件到那里,同样创建名为“Backup”的目录,并复制所有SWAT 文件到那里。Backup 目录文件的参数作为**默认参数**而不会改变。  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/e2d5d4d912664d7b8bb2d289ed2bc378.png#pic_center)  
 点击【Finish】后,弹出以下界面:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/6384df7eb3284fac92fd58e81c949547.png#pic_center)  
 工程自动建立完成后,界面如下:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/706b5de203e5465f8dc6ebf8ff655ec5.png#pic_center)


#### Step2:输入文件参数及数据


**1、Calibration Inputs文件夹:** 参数信息


* **Par\_inf.txt** file——包含参与最优化的输入参数(优化参数个数及模拟次数)。这个文件需要由用户编辑,例子给出了格式,根据需要来编辑,下面解释了参数设定。  
 如果提示参数较少,可以通过 Add a new parameter 按钮新增参数。  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/ce2f02b263d6463db4e8ba0294f3913b.png#pic_center)  
 这里是设置校准参数的地方,需要做的是**更改参数**并为每个参数**设定取值范围**,需要注意的是,参数的修改方法有v\_\_, a\_\_, r\_\_三种,分别是赋值,加值,乘以某值(百分比浮动),具体可见说明书。每个参数后面的两个数字别是在下一次模拟中该参数取值的下界和上界,可以根据需要随便赋值,前提是不能超过理论上的最大范围。  
 **注意1:** swatcup中的Sol\_BD和ALPHA\_BNK两个参数不在swat中的自带调参工具中。  
 **注意2:** .bsn为后缀的参数,是全流域性质的参数,因此不可以按子流域修改,手动调参的时候不能指定某各子流域改参数,因此在此处填写的时候,不用选流域。
* **SUFI2\_swEdit.def**(算法信息)——分别输入起始与终止的模拟次数,分别为1与n。  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/dba8c90d3e654328abef2ad38f6c4811.png#pic_center)
* **File.cio**(SWAT-CUP运行的基本参数)——这是一个SWAT 文件。放在这里是为了方便起见,我们需要从这个文件得到的是模拟的年数和预热期的数目(NYSKIP),以正确地给SWAT-CUP 提供模拟期的起始年和结束年(不包括预热期)。  
 NBYR:number of year simulated,模拟念书(1970-2020年,共51年)  
 IYR:模拟的起始年(1970)  
 IDAF:起始日的年积日(1)  
 IDAL:结束日的年积日(365,此项如果模拟最终年份为闰年,被4整除,则此项为366,输错可能引起错误)  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/7fee6ccdadc84b3c85f82078f6afebb5.png#pic_center)
* **Absolute\_SWAT\_Values.txt**(修改参数的上下界)——所有要被拟合的参数应该在这个文件中并加上它们的绝对最小和最大范围。当前大多数但不是所有参数都包括在此文件中。简单地以所显示的格式添加不存在的参数到这里。  
 此项一般不做修改。  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/0d57874c6cee468182bf6e7480bf0c64.png#pic_center)  
 **2、Observation文件夹:**  
 下面是3 个包含监测值的文件。监测值对应于output.rch(河道)、output.hru(HRU)和output.sub(子流域) 文件中的变量。不同文件的变量现在可以包括在内,以形成多目标目标函数。只要简单地编辑应用于项目的这些文件,不要担心那些不应用的文件。格式应该与如程序包括的例子显示的格式完全一样。这里可以存在**缺测**的数据,如例子文件所显示的那样。  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/bef04819e1dd4be08974e41425ef70d1.png#pic_center)
* 第一列是模拟时段起始日开始的顺序号(例子中的第4、5 个的数据缺失)。
* 第二列是任意格式,这里是变量名、月份和年份。
* 第三列是变量值。输入的时候注意单位,output的月值单位为cms,实测值应该与其对应。


输入观测数据需要只需要激活rch即可,激活需要点击上方的Rch按钮。针对Observed\_rch.txt(河道)文件,格式是:序号(空格)FLOW\_OUT\_月(日)\_年(空格)观测值。  
 **注意**,这里的月(日)是指这一年的第几个月(日)。



> 
> Number of observed variables,指观测变量个数,如果同时校准多个rch的流量,这里填的是rch的个数。  
>  例如,如果要校正5个出口的流量,这里就写5;如果校正2个流量,2个泥沙,这里就写4。  
>  FLOW\_OUT\_1,需改后边的数字,改为每个rch的Gis代码。 141,为rch1的实测数据的个数,如果为月值,2年的数据,个数填24。
> 
> 
> 


![在这里插入图片描述](https://img-blog.csdnimg.cn/295b36d078c7433c86be0acbac9ccd34.png#pic_center)  
 MATLAB输出**相应流量序列代码**如下:



clc
close all
clear
%% 基本设置
pathFiles= ‘.\DataFiles’ ;

%% 导入数据
load(‘RunoffTaohe.mat’);
[nMonth, nStation] = size(RunoffTaohe);
%% 获取径流序号
yearStart = 1970;
yearEnd = 2020;
nYear = yearEnd-yearStart+1;

Q = zeros(nMonth, nStation+2);
Q(:,1:2) = GetYearMonth(yearStart, yearEnd);
Q(:,3:end) = RunoffTaohe;

%% 输出文件 序号(空格)FLOW_OUT_月(日)_年(空格)观测值

for iN=1:nStation
Title = [‘FLOW_OUT’,num2str( iN )];
fid = fopen([pathFiles,Title,‘.txt’],‘wt’);

for iMonth=1:nMonth
    fprintf(fid,'%s',num2str( iMonth ));  
    fprintf(fid,'%s',[' FLOW_OUT_', num2str( Q(iMonth,2) ), '\_', num2str( Q(iMonth,1) )," ",num2str( Q(iMonth,iN+2) )]);   
    fprintf(fid,'\n');
end

end

%% 调用函数
function Output = GetYearMonth(yearStart, yearEnd)
% 此函数获取年月序号

nYear = yearEnd-yearStart+1;
Year(1,:) = yearStart:1:yearEnd;
yearTemp = repmat(Year,12,1);
monthOfYear(:,1) = 1:12;
monthTemp = repmat(monthOfYear,nYear,1);

Output(:,1)= yearTemp(😃;
Output(:,2)= monthTemp(😃;

end


输出结果如下:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/1ad4231cf77a453e89813d972e0e4cd7.png#pic_center)  
 **3、Extraction文件夹:**  
 有2 类与SWAT 输出文件output.rch、output.hru 和output.sub对应的文件,.txt 和.def。如果你有与这些文件变量对应的监测值,则你需要从这些文件中提取相应的模拟值。  
 .txt 文件只包含提取值应该写入的文件的名称,而.def 则定义了需要从哪个子流域提取变量。  
 这些文件相对是不需要解释的。这里再次仅编辑需要的文件。  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/cdcca260fb6142b6bebb3b8c68e96197.png#pic_center)  
 由于本案例仅输入河道数据,更改var\_file\_rch文件如下:  
 【注意】:这里填写子流域代码时,必须从小到大填写!不按照上下游的顺序!  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/2df9767f0a66478bb298f6f3bf7e1f52.png#pic_center)  
 更改SUFI2\_extract\_rch文件如下:



> 
> 2,变量个数,不是rch的个数,而是变量的种类,不同的rch都输出为flowout,因此变量个数为1;但是如果同时校正流量和泥沙,不管矫正多少个出口,这里都为2.  
>  7,变量所在swat输出文件的列(SWAT输出文件的列与Output的列数两者相差1) 流域的总数量,根据实际情填写;  
>  3,第一个变量,Flow\_out,用到的子流域个数,如果选择4个子流域的Flow\_out,则填4;  
>  1\_\_3\_\_7,第一变量的子流域的代码,有多个出口,则需在中间隔2个空格; 1990,包括预热期在内的模拟起始年份;  
>  2001,模拟结束年份; 2,模拟的时间步长,1日,2月,3年。
> 
> 
> 


【注意】:这里填写子流域代码时,必须从小到大填写!不按照上下游的顺序!



> 
> 【总结】:variables和 observed variables的区别  
>  variables:单独的variables意味着变量的种类,种类为流量、泥沙、N含量,是指的类别 observed  
>  variables:是指观测的变量,为流域出口的各种变量的和,一个出口的3种变量则为3,3个出口的1个变量,也为3
> 
> 
> 


![在这里插入图片描述](https://img-blog.csdnimg.cn/db4d1b52cffe4dc2ab05be94f84d3959.png)


**4、定义Objective Function**  
 应该编辑observed.txt 文件。这个文件包含了observed\_rch.txt、observed\_hru.txt 和observed\_sub.txt 文件中的所有信息,加上一些计算目标函数的附加信息。  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/5f70236e38294b1a91dd8f3d4e54ae92.png#pic_center)  
 同样地,Var\_file\_name.txt 包含了应该包括在目标函数中的所有变量的名字。这些名字与Extraction 部分var\_file\_\*.txt 中的名字类似。  
 【注意】:这里填写子流域代码时,必须从小到大填写!不按照上下游的顺序!  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/5516c84b9e964f3cb65b2c95274761a2.png)


#### Step2:Executable Files(执行文件)


Executable Files在SWAT-CUP 担任引擎的角色。4 个批处理文件表明应该或不应该运行。


* SUFI2\_pre.bat——这个批处理文件运行预处理程序,现在包括运行拉丁超立方抽样程序。这个文件通常不需要编辑。
* SUFI2\_run.bat——这个程序执行SUFI2\_execute.exe,运行SWAT\_Edit.exe,提取批处理文件,还有SWAT2009.exe。
* SUFI2\_post.bat——运行后处理批处理文件,运行目标函数计算、新参数计算、95ppu计算、行为模拟的95ppu和无监测值变量的95ppu等程序。  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/6f4d52bc21994540a07d65b011672366.png#pic_center)
* SUFI2\_Extract.bat——这个批处理文件应该包含所有有或没有监测值的提取程序的名字。目前支持6个程序:  
 这个文件必须编辑,且不想要运行的程序应该“被注释掉”如下所示:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/92620922ba9044619c96f80ac1d449c2.png#pic_center)  
 下一步,编辑过所有输入文件后,就可以执行Calibration中的程序。这一部分中,执行以下3步:
* Sufi2\_pre.bat——这个命令运行Sufi2\_pre.bat 文件。在每一个新迭代启动前都必须运行这个文件。
* SUFI2\_run.bat——这个命令运行批处理文件。这个文件在第8 步中做了说明。
* SUFI2\_post.bat——在所有模拟结束之后,这个命令执行第8 步中说明的后处理批处理文件。


所有步骤执行完成后,即可进行下一步,校准输出。


#### Step3:校准输出


##### 文件说明


* 95ppu plot——这个命令展示了所有变量的95ppu,也展示了当前迭代的监测值和最佳模拟值。
 **自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

**因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**

![img](https://img-blog.csdnimg.cn/img_convert/a3b1d9e4b053f71e695e0f83f5c02395.png)

![img](https://img-blog.csdnimg.cn/img_convert/8c8811242c55a2aaa6326d6ddbf6d3d5.png)

![img](https://img-blog.csdnimg.cn/img_convert/e5dfe07c598276bad626742d41acc878.png)

![img](https://img-blog.csdnimg.cn/img_convert/f9a5fd55faf440222e387e573ec1a5e2.png)

![img](https://img-blog.csdnimg.cn/img_convert/6c361282296f86381401c05e862fe4e9.png)

![img](https://img-blog.csdnimg.cn/img_convert/9f49b566129f47b8a67243c1008edf79.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)**

ttps://img-blog.csdnimg.cn/img_convert/9f49b566129f47b8a67243c1008edf79.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)**

![](https://img-blog.csdnimg.cn/img_convert/1c531b573427f864792d80125a08f3f5.jpeg)
  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值