- JDK版本:1.8
- MAVEN版本: 3.9.2
- 版本控制语言: github
- 仓库地址: https://github.com/xx1902/hhu_sw
- 文件结构如下
![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的模板
-
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."); }
-
开发过程截图
流域站点: 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)进一步精确计算
可知最优参数x1在(185, 205), x2在(-0.6, 0.6), x3在(25, 40), x4在1.1附近(0.9, 1.2)
可对代码进行修改, 对循环范围做出修正
对跑出来的数据进行降序降序, 可进一步得出x1在(199, 202), x2在0.6附近(0.55, 0.65), x3在40附近(39.1, 40.9), x4在(1.01, 1.09)
对代码修改
进一步修改,将x1, x2, x3, x4范围分别落在199, 0.55, 39.1, 1.07左右
得出最终的最佳参数组合:
x1 = 199.098
x2 = 0.540
x3 = 39.119
x4 = 1.075
NSE = 0.873728447
成员 | 分工 |
---|---|
李明翰 | 负责组内模型代码的复写工作,数据处理以及图表绘制工作 |
李献东 | 组内模型代码框架的安排工作,安排组内任务分工,优化模型性能 |
秦兴康 | 完成GR4J框架中的各类封装函数,制作汇报PPT |
经过这段时间的课程学习和大作业的完成,我们对对水文学有初步的了解,我们学到了如何进行团队合作开发项目,学会了类与类之间的关系设计,学会了进行代码版本控制, 经过这次模型开发, 大大增加了我们的成就感, 让我们对编程更加感兴趣。
课程优点: 教学了版本控制, 一个在大学中从未被其他专业课程提起的团队合作知识点
不足:教学过程中, 代码演示字体过小, 后排同学看不到, 李明翰同学说课程难度太小, 模型简单, 建议下次加大难度