跳转至

两阶段药代动力学输注控制

仅供教学,不构成临床建议

本合成案例用于讲解最优控制建模。参数不对应具体患者,模型没有 考虑不确定性、毒性、协变量、测量反馈和临床监护,绝不能用于选择 或推荐剂量。

背景

静脉给药后,药物可能先在血浆与外周组织之间交换,效应室浓度随后 才逐渐跟上血浆暴露。合理的输注指令既要尽快接近目标,也要满足暴露 上限,并避免真实输注泵无法实现的瞬时变化。

本例将治疗过程分为两个阶段。前 22 小时为负荷阶段,由优化器选择 平滑的输注泵轨迹;最后两小时固定为解析推导出的维持速率,PK 状态 严格保持在平衡点。这样的阶段划分明确表达了从负荷到维持的事件, 同时给出一个生物医学多阶段建模示例。

药代动力学模型

\(A_c\)\(A_p\) 分别表示中央室和外周室药物量,\(C_e\) 表示 效应室浓度。中央室浓度为

\[ C_c=\frac{A_c}{V_c}. \]

带一阶效应室的二室 PK 模型为

\[ \begin{aligned} \dot A_c &=R-\left(\frac{CL}{V_c}+k_{12}\right)A_c+k_{21}A_p,\\ \dot A_p&=k_{12}A_c-k_{21}A_p,\\ \dot C_e&=k_{e0}(C_c-C_e), \end{aligned} \]

其中 \(R\) 为静脉输注速率。效应室只是具有延迟的测量隔室,不从 两个 PK 隔室中移除药物质量。

负荷阶段

\(0\le t\le t_s=22\ \mathrm{h}\) 上,将输注速率和斜率作为状态:

\[ \dot R=S,\qquad \dot S=j, \]

并以输注泵加加速度 \(j\) 为控制。因此,负荷阶段的状态与控制为

\[ \boldsymbol{x}_L=(A_c,A_p,C_e,R,S)^{\mathsf T}, \qquad u_L=j. \]

系统从无药物、输注泵停止的状态出发,并在阶段末到达稳态维持点:

\[ \boldsymbol{x}_L(0)=\boldsymbol{0},\qquad \boldsymbol{x}_L(t_s)= \begin{bmatrix}A_c^*&A_p^*&C^*&R^*&0\end{bmatrix}^{\mathsf T}. \]

目标浓度为 \(C^*=2\ \mathrm{mg/L}\)。由稳态质量平衡可得

\[ A_c^*=V_cC^*=40\ \mathrm{mg},\qquad A_p^*=\frac{k_{12}}{k_{21}}A_c^*=66.\overline{6}\ \mathrm{mg}, \qquad R^*=CL\,C^*=6\ \mathrm{mg/h}. \]

负荷阶段目标函数权衡跟踪误差和归一化泵控制代价:

\[ \begin{aligned} J_L=\int_0^{t_s}\Bigg[ &\left(\frac{C_e}{C^*}-1\right)^2 +w_R\left(\frac{R}{R_{\max}}\right)^2\\ &+w_S\left(\frac{S}{S_{\max}}\right)^2 +w_j\left(\frac{j}{j_{\max}}\right)^2 \Bigg]\,\mathrm{d}t, \end{aligned} \]

其中 \(w_R=0.02\)\(w_S=0.002\)\(w_j=0.0002\)

维持阶段

\(t_s\le t\le T=24\ \mathrm{h}\) 上,输注泵固定为 \(R^*\)。该阶段 只包含 \((A_c,A_p,C_e)\),采用相同的 PK 动力学,并将两个端点都固定 为 \((A_c^*,A_p^*,C^*)\)。代入动力学可得

\[ \dot A_c=\dot A_p=\dot C_e=0, \]

因此维持阶段是严格平衡解,而不是经验性的恒定剂量片段。其目标函数 贡献为

\[ J_M=\int_{t_s}^{T} \left[ \left(\frac{C_e}{C^*}-1\right)^2 +w_R\left(\frac{R^*}{R_{\max}}\right)^2 \right]\,\mathrm{d}t, \qquad J=J_L+J_M. \]

边界与单位

负荷阶段施加以下路径边界:

\[ \begin{gathered} A_c\ge0,\qquad 0\le A_p\le200\ \mathrm{mg},\\ 0\le C_e\le4\ \mathrm{mg/L},\qquad C_c\le6\ \mathrm{mg/L},\\ 0\le R\le50\ \mathrm{mg/h},\qquad |S|\le20\ \mathrm{mg/h^2},\qquad |j|\le20\ \mathrm{mg/h^3}. \end{gathered} \]
符号 含义 数值或单位
\(t\) 时间 h
\(A_c,A_p\) 中央室和外周室药物量 mg
\(C_c,C_e,C^*\) 中央室、效应室和目标浓度 mg/L
\(R\) 输注速率 mg/h
\(S\) 输注速率斜率 mg/h²
\(j\) 输注泵加加速度 mg/h³
\(V_c\) 中央室容积 \(20\ \mathrm{L}\)
\(CL\) 清除率 \(3\ \mathrm{L/h}\)
\(k_{12},k_{21}\) 室间转运速率 \(0.25,0.15\ \mathrm{h^{-1}}\)
\(k_{e0}\) 效应室平衡速率 \(0.50\ \mathrm{h^{-1}}\)

建模取舍与限制

模型以药物量作为守恒隔室状态,再通过容积换算中央室浓度。将 \(R\)\(S\) 提升为状态后,输注指令具有二阶连续性,并能直接约束泵的 斜率和加加速度。若一个优化瞬态后紧接已知运行工况,显式维持阶段是 可复用的建模模式。

该模型假设 PK 参数线性、时不变,且静脉输注连续可调。跟踪目标只是 数值教学代价,并不代表药效获益或毒性。临床模型还必须纳入群体或 患者特异的参数不确定性、安全终点、离散采样反馈、设备动力学和医学 审核。

负荷阶段采用 \(88\times2\) Lobatto 网格,维持阶段采用 \(8\times3\) 网格。初始猜测用平滑三次曲线构造负荷阶段的状态、斜率与加加速度, 第二阶段则直接从解析平衡点开始。

运行示例

python -m examples.pharmacokinetic_dosing

无界面运行并保存图片:

python -m examples.pharmacokinetic_dosing --save pharmacokinetic-dosing.png --no-show

实现遵循统一的多阶段流程:

system, phases = build_problem()
guess = initial_guess(phases)
solution = solve_problem(system, guess)
plot_solution(solution)

验证结果

脚本在统一的 4,001 点时间网格上重构两个阶段,检查全部状态和执行器 边界、终端目标、整个维持阶段的恒定性,以及终端 PK 和输注泵导数。

指标 验证值
目标函数 \(J\) \(2.85018982\)
总给入量 \(\int_0^T R\,\mathrm{d}t\) \(249.448036\ \mathrm{mg}\)
效应室跟踪 RMSE \(0.683745\ \mathrm{mg/L}\)
中央室峰值浓度 \(2.935014\ \mathrm{mg/L}\)
最大终端状态误差 输出精度下为 \(0\)
维持阶段最大偏差 \(1.421\times10^{-14}\)
终端 PK/输注泵平衡残差 输出精度下为 \(0\)
最大密集路径边界超限 \(1.906\times10^{-7}\)

负荷轨迹在 \(t_s\) 到达完整的 PK 与输注泵平衡点,随后解析维持速率 \(6\ \mathrm{mg/h}\) 使所有报告状态保持恒定。密集路径超限低于脚本 采用的 \(2\times10^{-6}\) 数值验收容差。

两阶段 PK 方案的浓度、隔室药物量、输注速率、斜率与加加速度

源代码

完整可运行教学示例见: examples/pharmacokinetic_dosing.py