# 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 > > Implementation: Deep NN function approximators (CriticNN + ActorNN) trained via gradient descent --- ## 这篇文章解决了什么问题? 用强化学习做最优控制,本质上是在**模型信息不完全**的情况下,通过数据学习一个最优策略。Lewis 团队长期用 **Policy Iteration (PI)** 来解决这个问题,但 PI 有一个前提:必须先有一个 **admissible policy** 来启动迭代。 问题在于:**求解 admissible policy 本身就需要系统的模型信息**($f(x)$ 和 $g(x)$)——这就形成了一个循环依赖: > **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)$ 有限,且系统状态被驱动到原点。 > > 直观理解:相当于要求 $u(x)$ 让系统是 **Lyapunov 稳定**的——随着 $t \to \infty$,每一步的代价必须趋近于 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 策略,进而可以转入传统的 PI 求解最优控制。 > **关键点**:同伦项 $-L_i x$ 的作用是作为一个**人工阻尼**让系统自治稳定,而不是去「抵消」未知动态 $f(x)$ 和 $g(x)$。$f$ 和 $g$ 的未知性通过后面的 off-policy 数据驱动方法(积分消除 + 神经网络逼近)来绕过。 --- ## 数学原理 ### 问题设定 非线性系统状态方程: $$ \dot{x} = f(x) + g(x)u $$ 以及 Lipschitz 条件: $$ \|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 $$ 在某个策略 $u(x)$ 下的代价函数值 $V(x)$ 满足 **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} $$ 对 (5) 关于 $u$ 求极小,得到最优策略的解析形式: $$ u^*(x) = -\frac{1}{2} R^{-1}(x) g^T(x) \frac{\partial V(x)}{\partial x} \tag{6} $$ 将 (6) 代回 (5) 得到 **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(x) R^{-1}(x) g^T(x) \frac{\partial V}{\partial x} \tag{7} $$ ### 传统 PI 方法 > **Policy Iteration(策略迭代)** > > 1. **策略评估**:给定 $u_i^0(x)$,求解 $V_i^0(x)$($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. **策略改进**:用 $V_i^0$ 更新策略: > $$ 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_i^0\}, \{V_i^0\}$ 一致收敛到最优解。但一切的前提是:**初始策略 $u_0^0$ 必须是 admissible 的**。 ### 同伦 PI 方法(Homotopy-Based PI) 先定义一个宽松的初始条件: > **Definition 2 (Lipschitz Admissibility)**:零控制 $u=0$ 是 **Lipschitz admissible** 的,如果存在常数 $L$ 使得系统 $\dot{x} = f(x) - Lx + g(x)u$ 渐近稳定,且代价 $J(x_0)$ 有限。一个充分条件是取 $L > L_f$。 同伦 PI 的迭代格式(Lemma 2): - **策略评估**(同伦系统下的 Bellman 方程): $$ 0 = \left( \frac{\partial V_i}{\partial x} \right)^T \bigl[ f - L_i x + g u_i \bigr] + Q + u_i^T R u_i \tag{12} $$ - **策略改进**: $$ u_{i+1}(x) = -\frac{1}{2} R^{-1} g^T \frac{\partial V_i}{\partial x} \tag{13} $$ - **步长选取**(保证收敛): $$ (1-\gamma)Q\gamma_{i+1} \;\le\; \left( \frac{\partial V_i}{\partial x} \right)^T x \;\le\; (1-\gamma)(Q + u_{i+1}^T R u_{i+1}) + (u_i - u_{i+1})^T R (u_i - u_{i+1}) \tag{14} $$ > **收敛性保证**: > 1. $u_{i+1}(x)$ 在系统 $\dot{x} = f - L_{i+1}x + g u_{i+1}$ 下是 admissible 的。 > 2. 若 $(\frac{\partial V_i}{\partial x})^T x \ge \beta V_i(x)$($\beta > 0$),则**有限步内 $L_i = 0$**。 当 $L_i = 0$ 时,(12) 退化为传统 PI 的 (8),此时 $u_{i+1}$ 就是原始系统下的 admissible 策略。 --- ## 数据驱动的同伦 PI — 本实现 ### Off-Policy 积分消除 核心技巧:将 $V_i$ 沿轨迹求导,消去 $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} $$ 其中 $v_i = u - u_i$ 是实际执行的控制(PE + 旧策略)与目标策略的偏差。 > **为什么这能绕过 $f$ 和 $g$?** 等式 (20) 两边只包含:(1) 状态采样值 $x(t_k), x(t_{k+1})$;(2) 已知的 $L_i$;(3) 待求的函数 $V_i, u_{i+1}$。$f(x)$ 和 $g(x)$ 被 $V_i(x(t_{k+1})) - V_i(x(t_k))$ 隐式替代。 ### Deep NN 函数逼近 本实现用**深度神经网络**(而非多项式基函数)逼近 $V(x)$ 和 $u(x)$: **CriticNN — 值函数 $V(x) \ge 0$:** ``` Linear(2, 32, bias=False) → Tanh Linear(32, 32, bias=False) → Tanh Linear(32, 2, bias=False) # 两个原始输出 z1, z2 V(x) = z1(x)² + z2(x)² # 结构保证 V≥0, V(0)=0 ``` - `bias=False` 全程保证 $V(0) = 0$(结构保证) - 两个输出头使 Hessian 在原点可达 rank-2(严格正定可能) **ActorNN — 策略 $u(x)$:** ``` Linear(2, 32, bias=True) → Tanh Linear(32, 32, bias=True) → Tanh Linear(32, 1, bias=True) # 有符号控制输出 ``` ### 解耦损失函数 **Critic Loss — Bellman 残差(策略评估):** $$ \text{Loss}_C = \mathbb{E}\left[ \left( \Delta V_k - \int \nabla V \cdot (Lx)\,dt + \int (Q + R\hat{u}^2)\,dt + \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 优化器。 ### 算法三阶段 1. **Phase One — 寻找 L₀**: - 用 $u = \text{PE}$(零策略)采集一条轨迹 - 扫描所有 $L \in [L_{\text{start}}, L_{\text{max}}]$,每个 L 训练独立 trainer - 选取 Bellman 残差最低的 L 作为 L₀(而非第一个正定的 L) - 对应的 Critic 必须通过正定性检验(Hessian at origin PD + 轨迹上 V(x)≥0) 2. **Phase Two — 同伦收缩**: - 用当前策略 + PE 采集轨迹 - 训练 Critic(Bellman 残差)和 Actor(最优策略回归) - 用 safety constraint (14) 计算步长 α,$L \leftarrow L - \alpha$ - PD 不通过则回退到 best weights;连续拒绝超 15 次则提前终止 - 迭代至 $L = 0$ 3. **Phase Three — 标准 PI**: - 设 $L = 0$,用 Phase Two 的策略作为初始策略 - 交替 Critic 评估 + Actor 改进,直到 loss 收敛 - 输出最终策略 $u^*(x)$ 和值函数 $V^*(x)$ --- ## 总结与思考 ### 本文贡献 打破了 PI 必须从 admissible 策略开始这一模型依赖的死循环: $$ \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,确保找到最佳同伦起点