Python| 水文 |基于动态规划的单水库调度最大削峰+案例验证

慈云数据 2024-05-30 技术支持 54 0

一、算例说明

选用教材《水利水电工程优化调度》(唐德善 唐彦 黄显峰 史记毅超 等编著)(中国水利水电出版社)上对应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)
微信扫一扫加客服

微信扫一扫加客服

点击启动AI问答
Draggable Icon