Adaptive Optimal Control of Unknown Nonlinear Systems via Homotopy-Based Policy Iteration

Chen et al., IEEE Trans. Autom. Control, Vol. 69, No. 5, pp. 3396–3403, May 2024
本实现:Deep NN 函数逼近器 (CriticNN + ActorNN),梯度下降训练 (Adam)

一、这篇文章解决了什么问题?

用强化学习做最优控制,本质上是在模型信息不完全的情况下,通过数据学习一个最优策略。Policy Iteration (PI) 的前提是必须先有一个 admissible policy 来启动迭代。但求解 admissible policy 本身需要模型信息——形成循环依赖。

PI 的初始化困境
PI 要求初始策略是 admissible 的 → 没有模型就算不出 admissible 策略 → 没有 admissible 策略就无法启动 PI → 无法启动 PI 就学不出最优策略。
什么是 Admissible Policy?

给定广义代价函数 $$ J(x_0) = \int_0^\infty \left[ Q(x) + u^T R(x) u \right] dt $$ 称 $u(x)$ 是 admissible 的,当且仅当:对任意初始状态 $x_0$,$J(x_0)$ 有限,且系统状态被驱动到原点。

二、核心思想:同伦 (Homotopy)

对原始系统动态方程做同伦变换,人为引入阻尼项:

$$ \underbrace{\dot{x} = f(x) + g(x)u}_{\text{原始系统}} \quad\longrightarrow\quad \underbrace{\dot{x} = f(x) - L_i x + g(x)u_i(x)}_{\text{同伦系统}} $$

加上 $-L_i x$ 之后,即使 $u = 0$(零控制),系统也是稳定的。$u=0$ 天然就是 admissible 的,PI 可以直接启动。然后逐步减小 $L_i$,让同伦系统逼近原始系统。当 $L_i$ 归零时,得到原系统下的 admissible 策略。

关键点
同伦项 $-L_i x$ 是人工阻尼让系统自治稳定,不是去「抵消」未知动态 $f,g$。$f,g$ 的未知性通过 off-policy 积分消除 + 深度神经网络逼近来绕过。

三、数学原理

3.1 问题设定

$$ \dot{x} = f(x) + g(x)u $$ $$ \|f(z)-f(y)\| \le L_f\|z-y\|, \qquad \|g(z)-g(y)\| \le L_g\|z-y\| $$ 控制目标:极小化 $ J(x_0) = \int_0^\infty \left[ Q(x) + u^T R(x) u \right] dt $ Hamiltonian 方程: $$ 0 = \left( \frac{\partial V}{\partial x} \right)^T \bigl( f(x) + g(x)u \bigr) + Q(x) + u^T R(x) u \tag{5} $$ 最优策略解析形式: $$ u^*(x) = -\frac{1}{2} R^{-1}(x) g^T(x) \frac{\partial V(x)}{\partial x} \tag{6} $$ HJB 方程($V(0)=0$): $$ 0 = \left( \frac{\partial V}{\partial x} \right)^T f(x) + Q(x) - \frac{1}{4} \left( \frac{\partial V}{\partial x} \right)^T g R^{-1} g^T \frac{\partial V}{\partial x} \tag{7} $$

3.2 传统 PI 方法

Policy Iteration
  1. 策略评估
    给定 $u_i^0$,求解 $V_i^0$($V_i^0(0)=0$): $$ 0 = \left( \frac{\partial V_i^0}{\partial x} \right)^T \bigl( f + g u_i^0 \bigr) + Q + (u_i^0)^T R u_i^0 \tag{8} $$
  2. 策略改进
    $$ u_{i+1}^0(x) = -\frac{1}{2} R^{-1} g^T \frac{\partial V_i^0}{\partial x} \tag{9} $$

PI 保证 $V_{i+1}^0(x) \le V_i^0(x)$,收敛到最优解。前提:$u_0^0$ 必须是 admissible 的

3.3 同伦 PI 方法

Definition 2 (Lipschitz Admissibility)
零控制 $u=0$ 是 Lipschitz admissible 的,如果存在 $L$ 使得 $\dot{x} = f(x) - Lx + g(x)u$ 渐近稳定。充分条件:$L > L_f$。
收敛性保证
  1. $u_{i+1}$ 在同伦系统下是 admissible 的。
  2. 若 $(\frac{\partial V_i}{\partial x})^T x \ge \beta V_i(x)$,有限步内 $L_i = 0$。

四、数据驱动的同伦 PI — Deep NN 实现

4.1 Off-Policy 积分消除

将系统重写为:$\dot{x} = \underbrace{f - L_i x + g u_i}_{\text{同伦系统}} \;+\; L_i x + g v_i \tag{18}$,其中 $v_i = u - u_i$ 是实际执行的 control(PE + 旧策略)与目标策略的偏差。

沿轨迹积分消去 $f,g$:

$$ V_i(x(t_{k+1})) - V_i(x(t_k)) - \int_{t_k}^{t_{k+1}} \left(\frac{\partial V_i}{\partial x}\right)^T L_i x\,dt = -\int_{t_k}^{t_{k+1}} \Bigl[ Q + u_i^T R u_i + 2u_{i+1}^T R v_i \Bigr] dt \tag{20} $$
为什么能绕过 $f$ 和 $g$?
$f,g$ 被 $V_i(x(t_{k+1})) - V_i(x(t_k))$ 隐式替代,等式仅含状态采样和待求函数。

4.2 Deep NN 函数逼近

本实现用深度神经网络替代多项式基函数,彻底规避多项式带来的多重共线性问题(原多项式 cond(A) ~ 1e9,矩阵奇异)。

CriticNN — 值函数 $V(x) \ge 0$

Linear(2, 32, bias=False) → Tanh
Linear(32, 32, bias=False) → Tanh
Linear(32, 2, bias=False)      # 原始输出 z₁, z₂
V(x) = z₁(x)² + z₂(x)²         # 结构保证 V≥0, V(0)=0
bias=False 全程保证 $V(0)=0$(结构保证)。两个输出头使原点 Hessian 可达 rank-2。
ActorNN — 策略 $u(x): \mathbb{R}^2 \to \mathbb{R}$

Linear(2, 32, bias=True) → Tanh
Linear(32, 32, bias=True) → Tanh
Linear(32, 1, bias=True)       # 有符号控制输出

4.3 解耦损失函数(梯度下降替代矩阵求逆)

Critic Loss — Bellman 残差
$$ \text{Loss}_C = \mathbb{E}\left[ \left( \Delta V_k - \textstyle\int \nabla V \cdot (Lx)dt + \textstyle\int (Q + R\hat{u}^2)dt + \textstyle\int 2R\hat{u}_{\text{new}} v\,dt \right)^2 \right] $$ Actor 输出被 .detach(),梯度仅流向 Critic。
Actor Loss — 最优策略回归
$$ \text{Loss}_A = \mathbb{E}\left[ \left( u_{\text{NN}}(x) - \left(-\frac{1}{2}R^{-1}g^T(x)\nabla V(x)\right) \right)^2 \right] $$ 对倒立摆 ($J=1, R=1$):$u^* = -0.5 \cdot \partial V / \partial x_2$
Critic 梯度被 .detach(),梯度仅流向 Actor。两个网络各有独立 Adam 优化器。
为什么解耦?
原论文用线性系统 $A\theta = b$ 联合求解 Critic 和 Actor 权重。对于 NN,联合训练 Bellman 残差会导致 Actor 梯度通过积分项传播,噪声大且不稳定。解耦后 Actor 直接学习最优控制律 $u^* = -(1/2)R^{-1}g^T\nabla V$(策略改进公式 13),训练稳定且收敛快。

4.4 算法三阶段

Algorithm 1:完整执行流程
  1. Phase One — 寻找 L₀
    • 用 $u =$ PE 信号(零策略)采集一条轨迹
    • 扫描所有 $L \in [L_{\text{start}}, L_{\text{max}}]$,每个 L 训练独立 trainer
    • 选取 Bellman 残差最低 的 L(而非第一个正定的 L)
    • Critic 必须通过正定性检验:Hessian at origin PD + $V(x) \ge 0$ on trajectory
  2. Phase Two — 同伦收缩至 $L=0$
    • 用当前策略 + PE 采集新轨迹
    • 解耦训练:Critic 极小化 Bellman 残差,Actor 回归最优控制律
    • 用 safety constraint (14) 计算步长 $\alpha$,$L \leftarrow \max(0, L - \alpha)$
    • PD 不通过 → 回退到 best weights;连续拒绝 > 15 次 → 提前终止
  3. Phase Three — 标准 PI($L=0$)
    • 设 $L = 0$,用 Phase Two 策略作初始
    • 交替 Critic 评估 + Actor 改进,直到 loss 收敛
    • 输出 $u^*(x)$ 和 $V^*(x)$

五、实现架构

模块 文件 职责
NN 模型 hpi/nn_models.py CriticNN, ActorNN, compute_q, check_positive_definite, check_lyapunov_decrease
训练器 hpi/nn_trainer.py NNTrainer: 解耦 Critic/Actor 损失 + Adam 优化
控制器 hpi/hpi_controller.py 三阶段 HPI 主循环 + safety constraint
数据采集 hpi/data_collector.py 倒立摆仿真 + PE 信号生成

六、总结

本文贡献

$$ \text{同伦阻尼 } L_i x \;\xrightarrow{\text{使 }u=0\text{ 稳定}}\; \text{Lipschitz admissible} \;\xrightarrow{\text{逐步归零 }L_i}\; \text{admissible} \;\xrightarrow{\text{传统 PI}}\; \text{最优策略} $$

本实现的改进

  1. Deep NN 替代多项式基函数:消除多重共线性 (cond(A) ~ 1e9),系统矩阵不再奇异
  2. 梯度下降替代矩阵求逆:Adam 优化 Bellman 残差 + 策略回归,规避病态线性系统
  3. 解耦 Actor-Critic 训练:Actor 直接回归 $u^* = -1/(2R)g^T\nabla V$,比联合求解更稳定
  4. Phase One 全扫描:扫描所有 L 取最低 loss,而非第一个正定的 L