跳转至

可再生渔业的最优控制

背景

渔业管理者需要在当前捕捞收益与产生未来渔获的生物存量之间权衡。本例把鱼群的逻辑斯蒂增长与捕捞计划耦合起来,在鱼群不低于生态下限的前提下,最大化贴现后的码头净价值。捕捞率的变化还会产生代价并受到调整速率限制,因此结果是一条平滑、可执行的计划,而不是任意跳变的捕捞序列。

这是一个有限时域规划基准。令初末鱼群存量和捕捞率相同,可以避免直接在时域末端清空资源,但这不代表贴现后的解是无限时域周期政策。

问题定义

\(B(t)\) 为鱼群总生物量,\(H(t)\) 为捕捞率,\(u(t)\) 为捕捞率的调整速率。自然增长采用逻辑斯蒂模型:

\[ G(B)=rB\left(1-\frac{B}{K}\right). \]

\(0\le t\le T\) 上,状态方程为

\[ \dot B=G(B)-H, \qquad \dot H=u. \]

管理者最大化贴现净价值

\[ \max_{B,H,u}\;V= \int_0^T e^{-\delta t} \left( pH-c\frac{H^2}{B}-a u^2 \right)\,\mathrm dt. \]

其中,\(pH\) 是码头收入,\(cH^2/B\) 是随鱼群稀缺程度上升的凸捕捞成本,\(au^2\) 用于抑制捕捞活动的剧烈变化。Pockit 实际最小化该积分的负值。

两个状态都采用首尾相接的端点条件:

\[ B(0)=B(T)=680\ \mathrm{kt}, \qquad H(0)=H(T)=69.632\ \mathrm{kt\,year^{-1}}, \]

其中端点捕捞率等于初始鱼群存量下的自然增长率。路径约束为

\[ 420\le B(t)\le1000\ \mathrm{kt}, \]
\[ 0\le H(t)\le105\ \mathrm{kt\,year^{-1}}, \qquad |u(t)|\le40\ \mathrm{kt\,year^{-2}}. \]

变量、参数与单位

符号 含义 数值或单位
\(t\) 时间
\(B\) 鱼群总生物量 kt
\(H\) 捕捞率 kt/年
\(u=\dot H\) 捕捞调整速率 kt/年²
\(K\) 环境容纳量 \(1000\) kt
\(r\) 内禀增长率 \(0.32\) 年⁻¹
\(T\) 规划时域 \(18\)
\(\delta\) 贴现率 \(0.035\) 年⁻¹
\(p\) 归一化码头价格 \(1.0\) 价值单位/kt
\(c\) 捕捞成本系数 \(2.2\) 价值单位·年/kt
\(a\) 调整成本系数 \(0.025\) 价值单位·年³/kt²

建模选择

\(H\) 作为状态、把 \(u\) 作为控制量,可以显式保证捕捞计划连续。调整上限表示船队和加工能力有限,二次调整成本则抑制即使未触及上限也过于剧烈的变化。

贴现使较早获得的净价值权重更高。因此,即使采用首尾相接的端点条件,最优解仍会把一部分捕捞提前,并在后期恢复鱼群。端点条件消除了终端清算动机,却不会消除时域内部的这种时间配置效应。

脚本使用 \(90\times3\) Lobatto 离散,并在 6,001 个时刻重构解,从而进行独立于 NLP 节点值的检查。

独立验证

对鱼群方程积分可得

\[ B(T)-B(0)=\int_0^T\left[G(B(t))-H(t)\right]\,\mathrm{d}t. \]

由于 \(B(T)=B(0)\),累计捕捞量必须等于累计自然增长量。脚本在密集网格上用梯形积分独立检验该等式,并同样检查

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

此外,脚本还根据重构轨迹重新计算贴现净价值,并与优化器目标值比较。

验证结果

指标 验证值
贴现净价值 \(V\) \(734.48532130\)
最小鱼群生物量 \(617.093132\) kt
峰值捕捞率 \(83.313354\) kt/年
累计捕捞量 \(1318.215811\) kt
可再生资源平衡误差 \(1.174\times10^{-6}\) kt
密集网格目标值误差 \(3.262\times10^{-6}\)
最大密集路径越界量 \(0\)

在这组参数下,生态下限并未激活:最小生物量仍比下限高约 \(197\) kt。这是当前价格、成本、端点和时域共同作用的结果,并非生物经济优化的一般保证。

渔业最优计划中的鱼群存量、自然增长、捕捞、调整速率与贴现价值

适用边界

该确定性总量模型未包含年龄结构、繁殖与天气不确定性、船队异质性、价格反馈、执法和空间迁移。带贴现的首尾相接端点可能导致前置捕捞,不能把它解释为可无限重复的稳态政策。实际管理研究还需要校准生物与经济数据,并分析不确定性和鲁棒性。

运行示例

python -m examples.bioeconomic_fishery

无界面运行并保存图片:

python -m examples.bioeconomic_fishery --save bioeconomic-fishery.png --no-show
system, phase = build_problem()
guess = initial_guess(phase)
solution = solve_problem(system, guess)
plot_solution(solution)

源代码

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