基于SCE-UA算法的GR4J模型参数率定:在长江上游龙川江流域的应用研究
水文模拟是水资源评估与管理中的关键环节,其中GR4J作为一种结构简洁、参数精简的日尺度集总式降雨-径流模型,在实际应用中表现出良好的适应性和精度。本文以长江上游龙川江流域为研究区域,采用SCE-UA全局优化算法对GR4J模型进行参数自动率定,并验证其在该区域的适用性。
一、GR4J模型基本原理
GR4J(Généralisé à 4 paramètres Journalier)由法国学者Perrin等人提出,是一种广泛应用于日尺度径流模拟的水文模型。该模型通过两个储水单元——表层土壤水库和深层地下水水库,来刻画流域内的主要水文响应过程。
模型共包含五个核心参数,其物理意义及取值范围如下:
- X1:土壤蓄水能力,单位为毫米(mm),典型范围为100–1200 mm;
- X2:地下水交换系数,反映地下水流向地表或反之的趋势,取值区间一般为-5至3 mm;
- X3:地下水蓄水容量,表示深层含水层的最大持水能力,范围通常设定在20–300 mm之间;
- X4:单位线的时间参数,控制快速径流的时滞效应,建议取值范围为1.1–4.9天;
- Kc:蒸发修正系数,用于调整实测蒸发数据的输入,允许浮动于0.01–3.0之间。
这些参数共同决定了降水如何转化为地表径流与地下排泄,从而实现对出流过程的动态模拟。
二、SCE-UA优化算法介绍
SCE-UA(Shuffled Complex Evolution - University of Arizona)是由Duan等人发展的一种高效全局寻优方法,特别适用于非线性、多峰、高维的复杂系统参数反演问题,如水文模型率定。
该算法融合了单纯形搜索、遗传算法的重组机制以及竞争演化策略,具有以下优势:
- 兼具局部精细搜索与全局探索能力;
- 通过“复合形”分组并周期性洗牌操作促进信息交流;
- 有效避免陷入局部最优解,提升收敛稳定性;
- 已被广泛验证在多种水文模型中具备优异性能。
三、代码实现流程解析
3.1 GR4J模型核心类设计
构建GR4J模型的核心在于封装时间序列输入(降水、蒸发)与输出(模拟流量),并通过状态变量迭代完成每日水量平衡计算。以下是Java语言下的主要类结构定义:
public class GR4JModel {
private List<LocalDateTime> dateTimeList;
private List<Double> P; // 日降水量
private List<Double> E; // 日潜在蒸散发
private List<Double> Q0; // 实测日流量
private BasinInfo basinInfo;
public double runGR4JModel(GR4JPara para, List<Double> qsimList) {
// 执行完整的模拟过程
// 包括产流模块、单位线汇流、地下水补给等关键步骤
}
}
该类负责组织驱动数据,并调用内部逻辑完成从输入到输出的完整水文响应链条。
3.2 参数优化器构建
为了实现自动化参数识别,将GR4J模型嵌入SCE-UA框架中,构造专用优化器类。该类继承自SCEUA基类,并重写目标函数接口:
public class GR4JModelOptimizer extends SCEUA {
private GR4JModel gr4jModel;
@Override
protected double Function(double[] p) {
GR4JPara gr4jPara = new GR4JPara(p);
List<Double> Qsim = new ArrayList<>();
return gr4jModel.runGR4JModel(gr4jPara, Qsim);
}
}
在此结构中,每次参数向量传入后,均触发一次完整模拟,并返回目标函数值(如Nash-Sutcliffe效率系数NSE的负值或其他误差指标)作为优化依据。
3.3 主程序执行流程
主函数负责初始化数据、配置优化参数并启动求解过程,具体步骤如下:
public static void GR4JModelTest_ParaOptimization() throws IOException {
// 1. 加载流域基本信息与观测数据
GR4JModel gr4jModel = new GR4JModel(basinInfo, dataPath, 2014, 2023);
// 2. 设置SCE-UA优化参数
SCEUA_Para sceuaPara = new SCEUA_Para(
new double[]{300, 0, 250, 4.8, 1.0}, // 初始猜测值
new double[]{10, -50, 10, 1.1, 0.1}, // 参数下界
new double[]{3000, 50, 3000, 30.9, 3}, // 参数上界
10000, false, true // 最大迭代次数及其他标志位
);
// 3. 创建优化器并运行
GR4JModelOptimizer optimizer = new GR4JModelOptimizer(gr4jModel, sceuaPara, true);
SCEUA_Report sceuaReport = optimizer.RunSCEUA();
// 4. 获取最优参数并进行率定期评估
GR4JPara gr4jModelPara = new GR4JPara(sceuaReport.getPara());
double nse = gr4jModel.runGR4JModel(gr4jModelPara, QsimList);
System.out.printf("Calibration: NSE = %s %n", nse);
// 5. 在独立验证期测试模型泛化能力
GR4JModel gr4jModel2 = new GR4JModel(basinInfo, dataPath, 2014, 2023);
double nse2 = gr4jModel2.runGR4JModel(gr4jModelPara, QsimList2);
}
[此处为图片2]
四、结语
本研究表明,结合SCE-UA优化算法与GR4J模型可有效提升参数率定效率与模拟精度。通过对长江上游龙川江流域的实际案例分析,证实了该方法在复杂自然条件下的稳健性与实用性,为后续区域水资源规划与极端水文事件预测提供了可靠的技术支持。
4. 核心技术要点
4.1 单位线的构建方法
GR4J模型通过S曲线来生成单位线,该过程是模型的关键组成部分之一。具体实现如下:
List<Double> SH1 = new ArrayList<>();
List<Double> SH2 = new ArrayList<>();
for (int i = 1; i < (int) para.getX4(); i++) {
Double temp = Math.pow(i / para.getX4(), 2.5);
SH1.add(temp);
temp = 0.5 * Math.pow(i / para.getX4(), 2.5);
SH2.add(temp);
}
4.2 土壤水分动态计算
土壤产流与蒸发量的计算采用双曲正切(tanh)函数进行非线性拟合,公式如下:
Ps = para.getX1() * (1 - Math.pow(S / para.getX1(), 2)) *
Math.tanh(Pn / para.getX1()) / (1 + S / para.getX1() * Math.tanh(Pn / para.getX1()));
Es = S * (2 - S / para.getX1()) * Math.tanh(En / para.getX1()) /
(1 + (1 - S / para.getX1()) * Math.tanh(En / para.getX1()));
4.3 模型性能评估指标
采用Nash-Sutcliffe效率系数(NSE)作为主要评价标准,其计算逻辑封装在以下方法中:
public static double Cal_NSE(double[] Vact, double[] Vsim, int startPoint, double threshold) {
double numerator = 0.0;
double denominator = 0.0;
double meanObs = Arrays.stream(Vact).skip(startPoint).average().orElse(0.0);
for (int i = startPoint; i < Vact.length; i++) {
numerator += Math.pow(Vsim[i] - Vact[i], 2);
denominator += Math.pow(Vact[i] - meanObs, 2);
}
return 1.0 - numerator / denominator;
}
5. 实际应用效果
在长江上游龙川江流域的应用显示,模型具有良好的模拟表现:
- 率定期NSE值:0.75–0.85
- 验证期NSE值:0.70–0.80
- 水量平衡误差:低于5%
模型对降雨-径流过程的模拟较为准确,尤其在汛期(5月至10月)表现出较高的精度和稳定性。
6. 实践经验总结
- 参数初值设定:合理的初始参数范围有助于提升优化收敛速度与效率。
- 数据质量保障:输入气象与水文数据的准确性直接决定模型输出的可靠性。
- 优化策略选择:采用分阶段、多轮次的优化方式,有助于逼近全局最优解。
- 模型泛化能力验证:必须设置独立的验证期以检验模型的外推性能和鲁棒性。
7. 总结
GR4J模型结合SCE-UA优化算法,为流域尺度的水文过程模拟提供了一种高效且稳健的技术路径。本文所实现的Java代码结构清晰、模块分明,具备良好的可读性与扩展潜力,可供相关科研人员与工程技术人员参考使用。实际应用中,仍需结合具体流域的地理与气候特征,对模型结构和参数进行适应性调整与充分验证。


雷达卡


京公网安备 11010802022788号







