水资源系统分析课程论文——水库优化调度摘要:动态规划、POA算法、增量动态规划是最优化技术中几种适用范围很广的基本的数学方法。
本文结合实例详细介绍了动态规划模型、POA算法模型的建立,以及在水库调度中的具体应用。
这几种方法的应用为水库调度提供了有力的根据,具有重要的价值意义。
关键词:水库优化调度、动态规划、POA算法、增量动态规划正文:在水库调度过程中如何能兼顾防洪、灌溉、发电等综合效益,使有限的水资源发挥出更大的效益,是严重缺乏水资源的我国值得重视的问题。
为了充分发挥水库的调蓄作用,获得尽可能大的综合利用效益,对水库进行优化调度是一种行之有效的重要措施。
其基本内容为根据水库的人流过程,遵照优化调度准则,运用最优化方法,寻求比较理想的水库调度方案,使发电、灌溉、航运等各部门在整个分析期内的总效益最大。
1、资料某年调节综合利用水库,以灌溉、发电为主,兼有防洪、航运、渔业等综合效益。
水库正常蓄水位160米,死水位136米,四月初至七月底为汛期,汛限水位155米。
水电站设计保证率为95%,保证出力12.5万千瓦,装机容量32万千瓦。
水库灌溉设计保证率为85%,自库区引水灌溉面积为38万亩,利用发电尾水灌溉面积为68万亩。
水库水位库容关系、下游水位下泄流量关系表见表1、表2,扣除上游灌溉用水后的净入库流量和下游灌溉航运需水流量见表3。
求水库的年最大发电量。
表1 水库水位库容关系表表2 水库下游水位下泄流量关系表表3 水库月平均来水需水表(单位:立方米/秒)2、动态规划法动态规划是解决多阶段决策过程中最优化问题的一种数学方法。
应用到水库是,将径流过程视为确定性的,把水库蓄水量进行离散作为状态变量,把下泄流量作为决策变量,把发电效益作为目标函数。
在满足下游航运灌溉的前提下,每一时段的下泄流量使整个周期内的目标函数值达到最大的决策组成的策略就是最优调度方案。
2.1求解过程为:(1)决策的阶段变量t水利年:11月,12月,1月,2月,3月,4月,5月,6月,7月,8月,9月,10月对应tt(i)=11,12,1,…,10 t(i)为第i时段的时间长,单位秒(2)状态变量V(i,j)取时段末水库库容V为状态变量,3.816亿立方米≤V≤24.06亿立方米状态空间离散:每隔dV=(24.06-3.816)/240=0.08435取一状态。
非汛期时在死库容3.816亿立方米和正常蓄水位对应的库容24.01亿立方米间共有241个状态;汛期时,在死库容3.816和和汛限水位对应的库容之间有191个状态。
v(i, j) = 3.816 + (j - 1) * (24.06 –3.816) / 240,i=1,2,...,12 j=1,2, (241)汛期j取191,非汛期j取241。
(3) 决策变量q(i,j)第i时段第j状态的发电流量q(i,j)为决策变量,单位m3/s。
q(i,j)应大于第i时段的下游航运灌溉需水量W(i)。
(4) 状态转移方程V(i,j)=V(i-1,k)+(QI(i) -q(i,j) -dq(i,j))/10^8*t(i)V(i,j)——第i时段j状态的水库库容,亿立方米V(i-1,k)——第i-1时段选定的最佳库容,亿立方米q(i,j)——第i时段j状态的发电流量,m3/sQI(i)——第i时段的净入库流量t(i)——第i时段的时段长,单位秒dq(i,j)——第i时段j状态的弃水量,m3/s(5)第i时段出力N(i)(万千瓦)N(i)=8.5q(i)h(i)/10000h(i)——第i时段上下游的水头差,m12.5=< N(i)<=32当N(i)大于32万千瓦时取32,当N(i)小于12.5万千瓦时取一个很小的值,以便后面选优时避免进入选择。
(5)目标函数各时段的累积出力最大为目标函数,即求出第i时段的最优出力,使得第1时段到第i时段的累积出力最大,并用一个数组m(i,j)记下第i时段此时取得最大出力的位置k(k=1,2,3,…,241),便于后面进行逆推计算。
12max∑N(i,j)=max(E(i))i=1E(i)——前i时段的累积出力之和,万千瓦(6)逆推求解根据第12时段的最大累积出力E(i+1)和最大出力N(i+1),可以求出第i时段的最大累积出力E(i),然后根据m(i,j)数组可以找出第i时段的最佳出力N(i),可以求出E(i-1)。
以此类推,可以求出每个时段的出力。
E(i)=E(i+1)-N(i+1) i=11,10,…,12.2计算结果表4 动态规划计算结果注:表中,水位表示时段平均水位,库容表示时段平均库容。
由上表可以得知,动态规划优化算法得出的全年最大出力为259.4067万KW。
图1 水库调度图2.3 VB程序代码(1)离散各时段末的库容:For i = 1 To 12For j = 1 To 241v(i, j) = vmin + (j - 1) * (vmax - vmin) / 240xx(i, j) = 0Next jNext i(2)第2时段到第5时段的主程序(其他时段计算程序类似)For i = 2 To 5For j = 1 To 241max(j) = -300For k = 1 To 241bv = (v(i - 1, k) + v(i, j)) / 2 '第i时段的平均库容Call h_v(z2, bv) '调用水位库容函数求上游水位lz(j, k) = z2cf = 0lq(j, k) = QI(i) + (v(i - 1, k) - v(i, j)) * 100000000 / t(i) '时段初第k状态到时段末第j状态之间的发电流量q3 = lq(j, k)Call h_q(z3, q3) '调用水位下泄流量函数求下游水位lzx(j, k) = z3If lq(j, k) >= w(i) Then '当下泄流量大于下游需水时lh(j, k) = lz(j, k) - lzx(j, k) '水头差ln(j, k) = 8.5 * lq(j, k) * lh(j, k) / 10000 '出力If ln(j, k) > 32 Thenln(j, k) = 32ldq(j, k) = lq(j, k) - ln(j, k) / 8.5 / lh(j, k) * 10000 lq(j, k) = ln(j, k) / 8.5 / lh(j, k) * 10000End IfIf ln(j, k) < 12.5 Then cf = 1Elsecf = 1End IflE(j, k) = ln(j, k) + e(i - 1, k) - cf * c0 '累计出力If max(j) <= lE(j, k) And xx(i - 1, k) = 1 Thenmax(j) = lE(j, k)e(i, j) = lE(j, k)N(i, j) = ln(j, k)q(i, j) = lq(j, k)dq(i, j) = ldq(j, k)z(i, j) = lz(j, k)h(i, j) = lh(j, k)m(i, j) = kEnd IfNext kIf q(i, j) > 0 Then xx(i, j) = 1 '保证下泄流量大于0Next jNext i(3)逆推程序For i = 12 To 1 Step -1If i = 12 Thene0(i) = e(i, 241) '第1时段到第i时段的最大累计出力r(i) = N(i, 241) '第i时段的出力q0(i) = q(i, 241) '第i时段的下泄流量dq0(i) = dq(i, 241) '第i时段的弃水z0(i) = z(i, 241) '第i时段的水位h0(i) = h(i, 241) '第i时段的水头差v0(i) = v(i, 241) '第i时段平均库容End IfIf i = 11 Thenj = m(i + 1, 241)e0(i) = e0(i + 1) - r(i + 1) '逆推计算r(i) = N(i, j)q0(i) = q(i, j)dq0(i) = dq(i, j)z0(i) = z(i, j)h0(i) = h(i, j)v0(i) = v(i, j)End IfIf i < 11 Thenj = m(i + 1, j)e0(i) = e0(i + 1) - r(i + 1)r(i) = N(i, j)q0(i) = q(i, j)dq0(i) = dq(i, j)z0(i) = z(i, j)h0(i) = h(i, j)v0(i) = v(i, j)End IfNext i(3)输出结果Grid1.TextMatrix(0, 0) = "月份": Grid1.TextMatrix(0, 1) = "出力(万千瓦)"Grid1.TextMatrix(0, 2) = "累计出力(万千瓦)": Grid1.TextMatrix(0, 3) = "水位(米)": Grid1.TextMatrix(0, 4) = "蓄水量(亿m3)": Grid1.TextMatrix(0, 5) = "发电流量(m3/s)"Grid1.TextMatrix(0, 6) = "弃水量(m3/s)"Grid1.Rows = 1For i = 1 To 12Grid1.AddItem ""With Grid1.TextMatrix(.Rows - 1, 0) = tt(i): .TextMatrix(.Rows - 1, 1) = r(i): .TextMatrix(.Rows - 1, 2) = e0(i): .TextMatrix(.Rows - 1, 3) = z0(i): .TextMatrix(.Rows - 1, 4) = v0(i): .TextMatrix(.Rows - 1, 5) = q0(i): .TextMatrix(.Rows - 1, 6) = dq0(i)End WithNext iWith TChart1.Series(0).Clear.Series(1).ClearFor i = 1 To 12.Series(0).Add z0(i), tt(i), clTeeColor.Series(1).Add r(i), tt(i), clTeeColorNext iEnd With3、POA算法采用逐步优化算法( POA) 求解多状态动态规划问题, 是在决策过程中基于上阶段决策可行解为基础, 每次仅调整当前阶段的状态, 考虑相邻两个阶段状态的子目标值, 逐个阶段进行优化, 直至算法收敛。