一、算例说明
选用教材《水利水电工程优化调度》(唐德善 唐彦 黄显峰 史记毅超 等编著)(中国水利水电出版社)上对应P43页-P47页的例题3-3进行代码验证。
①具体例题资料
②思路说明
我们需要关注的信息是:
1)水库的防洪限制水位(起调水位)对应库容60500(m³/s)·h、防洪高水位对应库容109370(m³/s)·h;
2)百年一遇设计洪水的来水过程;
3)安全泄量为q安=2000m³/s;
4)要求以最大削峰为准则;
针对上述重点信息,对例题资料做如下处理:
1)动态规划一般逆时序从后往前推,所以将109370作为起点,将60500作为终点;
2)根据图3-6的示意图,可以看出要将相应时刻来水流量转化为时段平均来水流量;
3)安全泄量是每个阶段下泄流量的要求,要保证下泄流量数值在2000附近;
4)最大削峰准则的目标函数为下泄流量的平方和最小,对应公式3-36,结合各种约束条件以及不计区间来水的假定,建立逆时序递推方程,对应公式3-37;
二、代码内容
- 注:以下所有代码均按顺序在同一个py文件里,方便解释才将其拆开
将动态规划阶段按照图3-6分为:
1)阶段:4个阶段(t4-t3、t3-t2、t2-t1、t1-t0)
2)状态:t0、t1、t2、t3、t4时刻对应的库容
3)决策:追求最小累积泄量
①将已知数据列出
各时段平均来水量以及防洪限制水位(起调水位)对应库容、防洪高水位对应库容
# 各时段来水量 come_water_1=5403 come_water_2=8125 come_water_3=6575 come_water_4=4188 # 已知防洪限制水位对应库容/t0对应库容 capacity_1=60500 # 已知防洪高水位对应库容/t4对应库容 capacity_5=109370
②t4-t3阶段
此阶段为初始阶段,起点已知是109370,所以只需要一个for循环。
for循环表示将t3时刻库容从109370开始,遍历至60500,步长为-10,即逐渐减小。
if条件语句是筛选出下泄流量q4与安全泄量2000m³/s的绝对差值在10以内的库容,以及对应的累计泄量平方值。
# t4-t3------------------------------------------------- # 存储t3时刻库容 lst_capacity_4=[] # 存储t3-t4累积泄量平方值 lst_min_4=[] # t3对应库容 for capacity_4 in range(109370,60499,-10): # 平均泄量 q4=(capacity_4-capacity_5+come_water_4*3)/3 # 泄量平方值 q4_square=q4**2 # 余留时期最小泄量平方值,初始为0 fVi_4_start=0 # 累计泄量平方值 fVi_4_0=q4_square+fVi_4_start if abs(q4-2000)