Files
2026-05-18 19:02:23 +08:00

187 lines
8.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Adaptive Optimal Control of Unknown Nonlinear Systems via Homotopy-Based Policy Iteration
> Chen et al., IEEE Trans. Autom. Control, Vol. 69, No. 5, pp. 33963403, 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 采集轨迹
- 训练 CriticBellman 残差)和 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,确保找到最佳同伦起点