Skip to content

Latest commit

 

History

History
178 lines (100 loc) · 5.51 KB

大作业报告.md

File metadata and controls

178 lines (100 loc) · 5.51 KB

G4RJ模型开发过程

开发代码:JAVA

部分代码截图

  • 文件结构如下

![295406ca7b24696f28d6d99cd0b7deb6](../../qq/file/Tencent Files/1686610549/nt_qq/nt_data/Pic/2024-06/Ori/295406ca7b24696f28d6d99cd0b7deb6.jpg)

  • Calculate文件封装计算的式子, 例如:

    /***
     * @description 单位线计算UH
     * @param: maxDayDelay
    * @param: SH
     * @return double[]
     * @author Marchino
     * @date 23:21 2024/6/15
     */
    public static double[] calUH(int maxDayDelay, double[] SH){
        double[] UH = new double[maxDayDelay];
        for (int i = 0; i < maxDayDelay; i++) {
            if (i == 0) {
                UH[i] = SH[i];
            } else {
                UH[i] = SH[i] - SH[i - 1];
            }
        }
        return UH;
    }
  • DataReader文件为工具类, 封装读取txt的代码

    /***
     * @description 读取参数格式如:   1.5  6.5    0.9393
     * @param: filePath
     * @return java.util.List<java.lang.String[]>
     * @author Marchino
     * @date 22:51 2024/6/15
     */
    public static List<String[]> colAndRowRead(String filePath) {
        List<String[]> data = new ArrayList<>();
    
        try (BufferedReader br = new BufferedReader(new FileReader(filePath))) {
            String line;
            while ((line = br.readLine()) != null) {
                String[] values = line.split("\t");
                data.add(values);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    
        return data;
    }
  • DataRow为输出Excel的模板

    image-20240620234623266

  • simulateGr4j为主要模拟gr4j的函数, 部分代码image-20240620234946241

  • WriteExcel: 将数据输出为Excel文件的工具类

    public void writeExcel(List<DataRow> dataRows, String fileName) {
    
        ExcelWriter excelWriter = EasyExcel.write(fileName).build();
        WriteSheet writeSheet = EasyExcel.writerSheet("Sheet1").head(DataRow.class).build();
        excelWriter.write(dataRows, writeSheet);
        excelWriter.finish();
    
        System.out.println("Excel file written successfully.");
    
    }
  • 开发过程截图

c1c2a85fb4da515091ad71ac7ba00933

流域选择及径流模拟

流域站点: 13600A

第一次通过暴力算法, x1步长为10, x2步长为1, x3步长为10, x4初始为0.1, 每步+0.4进行计算, 如果当前x1,x2,x3,x4组合没有计算出NSE值大于0.78的则退出当前x4循环, x3+10, 进行下一步运算, 如果当前组合值有NSE大于0.78, 则修改x4(步长0.1)进一步精确计算

image-20240621000315839

image-20240620235810511

可知最优参数x1在(185, 205), x2在(-0.6, 0.6), x3在(25, 40), x4在1.1附近(0.9, 1.2)

可对代码进行修改, 对循环范围做出修正

image-20240621001752956

image-20240621001809619

对跑出来的数据进行降序降序, 可进一步得出x1在(199, 202), x2在0.6附近(0.55, 0.65), x3在40附近(39.1, 40.9), x4在(1.01, 1.09)

对代码修改

image-20240621002457589

image-20240621002522612

进一步修改,将x1, x2, x3, x4范围分别落在199, 0.55, 39.1, 1.07左右

image-20240621123531725

image-20240621122814868

得出最终的最佳参数组合:

x1 = 199.098

x2 = 0.540

x3 = 39.119

x4 = 1.075

NSE = 0.873728447

作业分工及总结

成员 分工
李明翰 负责组内模型代码的复写工作,数据处理以及图表绘制工作
李献东 组内模型代码框架的安排工作,安排组内任务分工,优化模型性能
秦兴康 完成GR4J框架中的各类封装函数,制作汇报PPT

​ 经过这段时间的课程学习和大作业的完成,我们对对水文学有初步的了解,我们学到了如何进行团队合作开发项目,学会了类与类之间的关系设计,学会了进行代码版本控制, 经过这次模型开发, 大大增加了我们的成就感, 让我们对编程更加感兴趣。

​ 课程优点: 教学了版本控制, 一个在大学中从未被其他专业课程提起的团队合作知识点

​ 不足:教学过程中, 代码演示字体过小, 后排同学看不到, 李明翰同学说课程难度太小, 模型简单, 建议下次加大难度