跳转至

基于根区水量平衡的最优灌溉调度

背景

灌溉调度既要在干旱阶段保护作物,也要避免施加不必要的水量。降雨、作物需水、土壤储水和深层渗漏均随时间变化,而实际阀门无法瞬时改变流量。本例利用 14 天的天气预报,在总灌溉量与一个平滑的水分胁迫产量损失代理指标之间权衡。

状态量是高于萎蔫点的植物可利用水量。硬性储水下限用于防止严重缺水,软性胁迫惩罚则用于区分均满足硬约束的不同计划,并鼓励在最有价值的时段供水。

问题定义

\(S(t)\) 为根区储水量,\(i(t)\) 为灌溉率,\(u(t)=\dot i(t)\) 为阀门爬升指令。预报的有效降雨和作物潜在蒸散分别为

\[ R(t)=9\exp\!\left[-\left(\frac{t-3.8}{0.55}\right)^2\right] +4\exp\!\left[-\left(\frac{t-10.4}{0.75}\right)^2\right], \]
\[ ET_p(t)=5.2+0.8\sin\!\left(\frac{2\pi(t-1)}{7}\right). \]

平滑吸水因子

\[ f(S)=\frac{S(C+S_{50})}{C(S+S_{50})} \]

在萎蔫点 \(S=0\) 时为零,在根区容量 \(S=C\) 时为一。实际蒸散为 \(ET_a=ET_p f(S)\)。深层渗漏采用

\[ D(S)=d_C\left(\frac{S}{C}\right)^6, \]

因此储水接近容量时,渗漏会快速上升。动力学为

\[ \dot S=R(t)+i-ET_p(t)f(S)-D(S), \qquad \dot i=u. \]

无量纲目标函数为

\[ \min_{S,i,u}\;J=\int_0^T \left[ w_i i+w_s(1-f(S))^2+w_u u^2 \right]\,\mathrm dt. \]

第一项计入施水代价,第二项是基于水分胁迫的产量损失代理指标,第三项抑制阀门快速动作。第二项不是机理性的作物产量方程。

端点与路径约束为

\[ S(0)=S(T)=58\ \mathrm{mm}, \qquad i(0)=i(T)=0, \]
\[ 12\le S(t)\le110\ \mathrm{mm}, \qquad 0\le i(t)\le10\ \mathrm{mm\,day^{-1}}, \]
\[ |u(t)|\le8\ \mathrm{mm\,day^{-2}}. \]

变量、参数与单位

符号 含义 数值或单位
\(t\) 时间
\(S\) 高于萎蔫点的根区植物可利用水量 mm
\(i\) 灌溉率 mm/天
\(u=\dot i\) 灌溉率爬升速度 mm/天²
\(R\) 有效降雨 mm/天
\(ET_p,ET_a\) 潜在与实际蒸散 mm/天
\(D\) 深层渗漏 mm/天
\(C\) 根区容量 \(110\) mm
\(S_{50}\) \(C\) 点归一化前的 Michaelis-Menten 储水尺度 \(24\) mm
\(d_C\) 根区满容量时的渗漏率 \(2.2\) mm/天
\(w_i\) 灌溉权重 \(0.030\) mm⁻¹
\(w_s\) 胁迫权重 \(1.0\) 天⁻¹
\(w_u\) 爬升权重 \(2.0\times10^{-4}\) 天³/mm²

实现中实际优化的是缩放状态 \(S/C\),以改善数值条件;本文方程和结果均使用实际水深单位。

建模选择

灌溉率是状态量,而不是可以不连续跳变的直接控制量。优化其有界导数能够产生连续计划,并使首末零流量条件具有明确含义。脚本采用 \(140\times2\) Lobatto 网格和分段线性插值,因此节点间也能保持灌溉率非负。

令初末储水相同,便于比较整个预报窗口内的总入流和总损失。这只是本调度问题的水量记账条件,不表示天气或作物状态具有周期性。

独立验证

密集重构的解必须满足积分水量平衡

\[ S(T)-S(0)=\int_0^T \left[R+i-ET_a-D\right]\,\mathrm dt, \]

以及执行器平衡

\[ i(T)-i(0)=\int_0^T u(t)\,\mathrm dt. \]

脚本在 6,001 个时刻独立计算这两个等式,检查全部状态与执行器边界,并分别报告水量收支各项。

验证结果

指标 验证值
目标函数 \(J\) \(1.74128841\)
总灌溉量 \(50.888617\) mm
有效降雨量 \(14.091008\) mm
实际蒸散量 \(63.918972\) mm
深层渗漏量 \(1.060678\) mm
最小根区储水量 \(55.962540\) mm
密集网格水量平衡误差 \(2.437\times10^{-5}\) mm
密集网格执行器平衡误差 \(1.288\times10^{-6}\) mm/天
最大密集路径越界量 \(0\)

积分总入流为 \(50.888617+14.091008=64.979625\) mm,总损失为 \(63.918972+1.060678=64.979650\) mm;两者的微小差值与独立报告的积分残差一致。

根区储水、灌溉、预报天气通量、深层渗漏与作物水分胁迫

适用边界

本计算假设天气预报完全准确、根区空间均匀且可连续灌溉。模型未包含地表径流、输配与施用损失、离散灌溉窗口、水泵启停逻辑、分层土壤和预报不确定性。胁迫项只是平滑的产量代理指标。用于田间调度时,需要校准土壤与作物参数,并加入实际运行约束。

运行示例

python -m examples.irrigation_scheduling

无界面运行并保存图片:

python -m examples.irrigation_scheduling --save irrigation-scheduling.png --no-show
system, phase = build_problem()
guess = initial_guess(phase)
solution = solve_problem(system, guess)
plot_solution(solution)

源代码

完整可运行示例见: examples/irrigation_scheduling.py