基于 R 语言实现的 SX 水库中长期优化调度模型,采用 DDDP(逐次逼近动态规划)求解,以总发电量最大为目标,完成代表年法与长系列法两种调度方案的计算与结果分析。
项目以 Data.xlsx 中的工程资料与水文资料为输入,分别完成:
Run1944.r:以 1944 年为计划年的代表年法优化调度;RunAll.r:1941-1990 年共 50 年长系列优化调度。
两个脚本共用同一套数据读取、曲线拟合与 DDDP 求解框架,输出逐旬水位、流量、发电量等详细结果,以及水位过程线、流量对比、收敛分析等图表。
| 文件 | 说明 |
|---|---|
Run1944.r |
1944 计划年优化调度主程序 |
RunAll.r |
1941-1990 长系列优化调度主程序 |
Data.xlsx |
工程资料与水文资料(入库流量、水位库容、关系曲线等) |
dddp_1944_detailed_results.xlsx |
1944 年逐旬详细调度结果 |
dddp_results_50yr.rds |
50 年 DDDP 求解结果缓存 |
中长期优化调度任务报告.pdf |
课程设计报告 |
大作业 中长期优化调度任务书.doc |
作业任务书 |
README.md |
项目说明 |
运行脚本还会在项目目录下生成对应的 CSV 结果文件和 PNG 图表。
目标函数为总发电量最大:
模型主要约束包括:
- 水量平衡约束;
- 库水位上下限约束(动态水位约束 DDT);
- 下游水位与水头计算(净水头 = 平均上游水位 - 下游水位 - 水头损失);
- 机组预想出力约束;
- 保证出力约束(低于保证出力时施加线性惩罚);
- 发电流量过流能力约束;
- 泄流能力约束;
- 最小下泄流量约束(4070 m³/s);
- 初始与终止水位约束(171.28 m)。
DDDP 求解流程:由 DDT 允许最高水位构造初始轨迹,围绕当前轨迹建立搜索走廊,在走廊内按 0.2 m 步长离散水位进行逆向递推动态规划,通过迭代逐步逼近最优解。迭代最多 5 次,当发电量改进小于 0.01 亿 kW·h 且轨迹变化小于 0.01 m 时提前收敛。
在 RStudio 中打开 Run1944.r 或 RunAll.r 并运行即可。脚本会自动将工作目录设置为脚本所在目录,要求 Data.xlsx 与脚本位于同一目录。
建议先运行 Run1944.r 验证流程,再运行 RunAll.r 完成长系列计算。如果没有dddp_results_50yr.rds缓存数据,RunAll.r 首次运行需要执行约 20 分钟的 DDDP 迭代,结果会缓存到 dddp_results_50yr.rds,之后再次运行直接加载缓存;如需强制重新优化,删除该缓存文件即可。
dddp_results_50yr.rds在本项目中已经给出,读者可以快速复现结果,但推荐自己运行完整的迭代流程
Run1944.r 主要输出:
dddp_1944_detailed_results.csv:逐旬详细调度结果;dddp_1944_water_level.png:优化水位过程线;dddp_1944_power_generation.png:发电量过程线;dddp_1944_inflow.png:入库流量过程线;dddp_1944_convergence.png:迭代收敛过程;dddp_1944_flow_comparison.png/dddp_1944_flow_stack.png:流量对比与组成图;- 每一次迭代轨迹图
dddp_1944_iteration_N.png。
RunAll.r 主要输出:
dddp_50years_optimization_results.csv:逐旬全过程结果;annual_operation_statistics.csv:逐年统计结果;optimization_trajectory_vs_ddt.png:50 年优化轨迹与 DDT 对比;inflow_vs_energy.png:年入库流量与年发电量关系;monthly_analysis.png、seasonal_analysis.png:月均与季节分析;performance_summary.png、dddp_convergence_analysis.png:性能与收敛分析;inflow_outflow_hydrograph.png、flow_statistics_summary.png:流量过程与统计;- 每一次迭代轨迹图
dddp_50years_iteration_N.png。
报告中给出的主要结果:
| 指标 | 1944 代表年 | 50 年长系列 |
|---|---|---|
| 总发电量 | 919.67 亿 kW·h | 46009.10 亿 kW·h |
| 年均发电量 | - | 920.18 亿 kW·h |
| 平均水位 | 162.11 m | 162.11 m |
| 保证出力满足率 | 88.89% | 79.17% |
| 平均入库流量 | 13271 m³/s | 13927.65 m³/s |
| 平均弃水流量 | 10 m³/s | 438.59 m³/s |
脚本实际输出以本次运行生成的文件为准。
- R 4.0 及以上;
- RStudio(脚本通过
rstudioapi定位脚本目录); - 依赖包:
readxl、dplyr、purrr、tidyr、ggplot2、png、scales。
本项目为课程学习用途。数据、脚本和报告用于水库调度课程设计与学习交流,欢迎提出问题和改进建议。