Adaptive Dynamic Programming

ADP

ADP定义

自适应动态规划(Adaptive Dynamic Programming, ADP) 是一种结合动态规划(Dynamic Programming, DP)与近似优化的智能控制方法,旨在解决传统动态规划在复杂系统(如非线性、高维、不确定系统)中的“维数灾难”问题。其本质是通过在线学习函数逼近(如神经网络、多项式拟合)来近似动态规划中的值函数(Value Function)或策略(Policy),从而实现对最优控制律的自适应求解。

<aside>

动态规划(Dynamic Programming,简称DP)是一种通过将复杂问题分解成更简单的子问题来求解的优化方法。它的核心思想是将问题的解决方案存储下来,以便在需要时重复使用,从而避免重复计算。

</aside>

<aside>
值函数(Value Function)在动态规划中是一个关键概念,它表示从某个状态开始,遵循特定策略所能获得的长期累积回报(或代价)的期望值。值函数有两种主要类型:

  • 状态值函数V(s):表示在状态s下,遵循策略π所能获得的期望累积回报
  • 状态-动作值函数Q(s,a):表示在状态s下采取动作a,之后遵循策略π所能获得的期望累积回报

值函数的计算通常基于贝尔曼方程,通过迭代求解来获得最优策略。在实际应用中,由于状态空间可能很大,常需要使用函数逼近方法(如神经网络)来估计值函数。

</aside>

<aside>
策略(Policy)在动态规划中是一个从状态到动作的映射函数,通常表示为π(s)或π(s,a)。它定义了在任何给定状态下应该采取什么动作。策略可以是:

  • 确定性策略(Deterministic Policy):对每个状态唯一确定一个动作,即s→a
  • 随机策略(Stochastic Policy):对每个状态定义一个动作的概率分布,即P(a|s)

最优策略π*是指能够获得最大期望累积回报的策略。动态规划的目标就是找到这个最优策略。

</aside>

<aside>
最优控制(Optimal Control)是一种数学方法,用于寻找一个控制策略,使系统在给定的约束条件下实现特定的性能指标最优化。它主要解决以下问题:

  • 确定控制输入,使系统从初始状态到达目标状态
  • 在此过程中最小化或最大化某个性能指标(如时间、能量消耗等)
  • 同时满足系统的动态约束和物理限制
    </aside>

理论基础

Bellman 方程

贝尔曼方程(Bellman Equation)是动态规划中的核心方程,它描述了当前状态的值函数与未来状态值函数之间的递推关系。

对于离散时间系统,基本形式为:

V^\pi(s) = R(s,\pi(s)) + \gamma \sum_{s'} P(s'|s,\pi(s))V^\pi(s')

其中:

  • V^π(s) 是在策略π下状态s的值函数
  • R(s,π(s)) 是即时奖励
  • γ 是折扣因子(0 ≤ γ ≤ 1)
  • P(s'|s,π(s)) 是状态转移概率

贝尔曼最优方程(Bellman Optimality Equation)则描述了最优值函数应满足的条件:

V^*(s) = \max_a \{R(s,a) + \gamma \sum_{s'} P(s'|s,a)V^*(s')\}

贝尔曼最优方程的核心思想是:

  • 最优值函数必须满足"当前最优选择 + 未来最优值的折扣"的最大值
  • 它为寻找最优策略提供了理论基础
  • 通过迭代求解这个方程,可以得到最优值函数和最优策略

Hamilton-Jacobi-Bellman 方程

Hamilton-Jacobi-Bellman(HJB)方程是最优控制理论中的一个基础方程,它描述了连续时间系统中最优值函数的演化。HJB方程可以看作是连续时间、连续状态空间下的贝尔曼最优方程。

HJB方程的主要特点:

  • 偏微分方程形式:它是一个非线性偏微分方程,涉及值函数对时间和状态的偏导数。
  • 最优性条件:方程描述了最优控制问题的必要条件,通过求解该方程可以得到最优控制律。
  • 难以求解:由于其非线性特性,HJB方程通常难以获得解析解,这也是为什么需要ADP等近似方法。

HJB方程的求解对于连续系统的最优控制具有重要意义,但由于其复杂性,实际应用中往往需要借助数值方法或函数逼近技术。

时间段T内的连续最优控制

考虑时间段[0,T]内的确定性最优控制问题:

V(x(0),0) = \min_u \{ \int_0^T C[x(t),u(t)]dt + D[x(T)] \}

其中,C[]是标量成本率函数,D[]是馈赠价值函数

<aside>

标量成本率函数(scalar cost rate function)C[x(t),u(t)]表示系统在任意时刻t的即时成本或代价,它是一个标量函数,用于评估系统状态x(t)和控制输入u(t)的性能。这个函数通常包括:

  • 状态偏差成本:衡量系统当前状态与期望状态之间的差异
  • 控制输入成本:衡量控制信号的能量消耗或幅值
  • 其他运行时的性能指标

馈赠价值函数(bequest value function)D[x(T)]是一个评估系统最终状态x(T)的函数,它表示:

  • 系统在终端时刻T的状态价值
  • 对最终状态的期望或要求(如期望系统最终停在某个特定状态)
  • 可以理解为"遗留"给下一个阶段的系统状态的价值评估

这两个函数共同构成了最优控制问题的性能指标,目标是找到一个控制输入u(t),使得整个时间段内的累积成本(积分项)和最终状态的成本(终端项)之和最小。

</aside>

x(t)是系统状态向量,x(0)是初值,u(t) 是我们需要找到的控制向量。

V(x,t)是值函数,系统还需要有\dot x (t) = F[x(t),u(u)],F表示给出确定状态向量随时间的物理演变的向量.

HJB方程的偏微分计算

为了计算值函数V(s,t)的最大值,需要计算值函数的偏微分

从时间t到时间t+dt时间段,我们有值函数

V(x(t),t) = \min_u \{ V(x(t+dt),t+dt) + \int_t^{t+dt} C[x(\tau),u(\tau)]d\tau \}

然后,对V(x(t+dt),t+dt)进行泰勒展开

V(x(t+dt),t+dt) = \\ V(x(t),t) + \frac{\partial V(x,t)} {\partial t} + \frac{\partial V(x,t)} {\partial x}·\dot x(t) dt + o(dt)

代入值函数,去掉高阶无穷小量,然后两边都除以dt,并且在dt趋于0时取极限,值函数对时间t的偏导数和输入u无关,单独移出去最小化括号。可以得到HJB方程:

\frac{\partial V(x,t)}{\partial t} + \min_u \{\frac{\partial V(x,t)} {\partial x} ·\dot x(t) + C(x,u)\} = 0

上述公式还隐含了一个条件,即终止条件

V(x,T) = D(X)

表示没有馈赠误差项,下一值函数包含了完美的初始状态。

其中,C(x,u) 也可以写作L(x,u,t):即时代价函数,x\dot t 可以写作f(x,u,t)表示系统动力学方程,描述系统状态如何随时间演化。整理后,可以得到

-\frac{\partial V^*(x,t)}{\partial t} = \min_u \{L(x,u,t) + (\nabla_x V(x,t))^T f(x,u,t)\}

时刻t和状态x下,输入为u,有以下表示:

  • -∂V(x,t)/∂t:表示最优值函数V对时间的偏导数
  • L(x,u,t):即时代价函数,表示在当前状态和控制输入下的即时成本
  • f(x,u,t):系统动力学方程,描述系统状态如何随时间演化
  • ∇xV(x,t):最优值函数对状态的梯度
  • min_u:以输入u为优化变量,求最小值

这个方程的物理意义是:在任意时刻t和状态x,最优控制问题就是要找到一个控制输入u,使得即时代价L(x,u,t)与未来代价(通过值函数梯度与系统动力学的内积表示)的和最小。

正如上下文所述,由于这个方程的非线性特性,通常难以获得解析解,这也是为什么需要使用ADP等近似方法。在实际应用中,往往需要借助数值方法或函数逼近技术来求解。

求解HJB方程

HJB 方程通常按时间倒序求解,从t=T到t=0, 当解决整个状态空间和值函数是连续可微的,且当终端状态不受约束时,HJB 方程是最优解的充分必要条件。如果我们能解出值函数就可以找到最优的u达到最小成本。

一般情况下,HJB方程没有经典解/光滑解,为了解决这个方法,粘性解,极大极小解等方法都可以求解。ADP方法主要采用NN来近似。

对于连续时间系统,doi:10.1016/j.automatica.2004.11.034 引入了一种将策略迭代与神经网络相结合的近似动态规划方法。doi:10.1109/TSMCB.2008.926614 在离散时间中,引入了一种结合值迭代和神经网络的求解 HJB 方程的方法。

arXiv:2010.06828 证明了通过最大平方和方法可以得到HJB方程的多项式近似解,并且通过L1范数就能实现

经典ADP方法的工作流

典型的ADP(自适应动态规划)算法 pipeline 通常包括以下几个关键步骤和阶段。整个过程通常围绕优化控制策略、逼近值函数以及进行多次迭代来进行。下面是一个常见的 ADP 算法 pipeline:

  1. 初始化阶段
  • 初始化状态空间和动作空间:定义问题的状态空间 S 和动作空间 A,这些是模型的基础,包含了所有可能的状态和控制输入。
  • 初始化值函数或 Q 函数:值函数 V(x) 或 Q 函数 Q(x,u) 的初始化是 ADP 中的关键一步。通常,初始值可以设定为零,或者基于某些先验知识进行初始化。Q 函数常用于处理离散控制问题,值函数常用于连续控制问题。
  • 初始化策略:初始策略通常随机生成,或者选择某种启发式方法进行初始化。
  1. 数据收集和系统模拟
  • 模拟环境交互:在 ADP 的大多数应用中,系统会与环境进行交互,生成数据来更新值函数或策略。根据当前状态 xt 和控制输入 ut,模拟出下一个状态 xt+1 和即时奖励 rt,并用这些信息来估算新的值函数。
  • 获取反馈:在每个时间步,系统通过执行当前策略获取反馈,计算即时成本或奖励,并记录状态转移和奖励值。
  1. 值函数逼近和更新
  • 值函数更新:ADP 通过不断更新值函数来找到最优解。值函数 V(x) 表示从某个状态开始,所能获得的最优回报。在每次迭代中,ADP 会通过值函数更新公式(如贝尔曼方程)来更新当前值函数。常见的值函数更新方法包括:
    • 值迭代:更新整个状态空间的值函数。
    • Q-学习:通过更新 Q 函数来逼近最优控制策略。
    • 深度学习:当问题具有大规模或连续的状态空间时,使用神经网络等深度学习方法来逼近值函数。
  • 使用贝尔曼方程:通过贝尔曼最优性原理,ADP 在每次迭代中计算一个新的值函数,从而逐步逼近最优值函数。具体的更新公式会依赖于所使用的 ADP 方法(如值迭代或策略迭代)。
  1. 策略优化和改进
  • 策略改进:一旦值函数更新完成,下一步是通过策略改进来生成更好的控制策略。例如,通过从当前值函数中提取最优控制输入来更新策略。这一过程通常包括:
    • 最优控制:基于当前值函数,选择最优控制输入 u^*(x) = arg \min_u \{c(x,u) + \frac{\partial V(x)}{\partial x}f(x,u)\} 来改进当前策略。
    • 策略迭代:如果使用策略迭代法,首先评估当前策略,然后通过改进策略来获取更好的控制策略。
  • 策略改进可以采用以下方式
    • 基于 Q 函数的策略:通过 Q 函数选择最优动作,即 u^*(x) = arg \min_u \{Q(x,u)\}
    • 基于值函数的策略:根据当前值函数的导数,选择最优的控制输入。
  1. 重复迭代
  • 多次迭代:ADP 通常是一个基于迭代的过程,通过多次迭代不断优化值函数和策略。每次迭代中,系统会根据新的值函数和策略,更新控制输入和状态转移。
  • 收敛性判断:在每次迭代后,检查值函数或策略是否收敛,即是否达到最优解。如果收敛,则停止迭代;否则,继续进行迭代。
  1. 收敛和评估
  • 收敛判断:通常,ADP 算法会通过检测策略或值函数的变化量是否小于某个阈值来判断是否收敛。当变化量非常小或者达到预设的迭代次数时,可以认为算法收敛,停止迭代。
  • 策略评估:最后,评估所学得的策略的性能,看看它是否达到了最优控制目标。可以通过实验、仿真或实际应用来评估最终策略的效果。
  1. 最终策略部署
  • 策略应用:在收敛后,得到的最优控制策略可以被部署到实际系统中,用来进行实际操作。这时,系统会根据给定的输入状态,执行最优控制策略来优化目标函数。

Actor-Critic ADP(自适应动态规划)算法中,系统的控制策略由两个主要组成部分来完成:Actor(演员)和 Critic(评论员)。Actor 负责产生动作(控制策略),而 Critic 负责评估这些动作的好坏(即评估策略的质量)。这种方法结合了 策略优化(Actor)和 值函数优化(Critic)的优点,通常用于强化学习和最优控制问题中。

  1. 初始化
  • 初始化状态空间和动作空间:定义问题的状态空间 S 和动作空间 A,这些是模型的基础,包含了所有可能的状态和控制输入。
  • 初始化 Actor:初始化控制策略(或策略网络),通常为随机初始化或根据某些启发式方法初始化。Actor 通过策略 π(a∣s) 输出给定状态 s 下的动作概率分布,或者在确定性策略的情况下直接输出控制输入 a。
  • 初始化 Critic:初始化值函数(或 Q 函数),即 Critic 评估当前策略的价值。值函数 V(s) 或 Q 函数 Q(s,a) 可以通过随机初始化或其他先验知识来设定。
  1. 数据收集与环境交互
  • 执行控制策略:在每个时间步,Actor 根据当前状态 st 选择一个动作 at。这个动作由策略网络(Actor)输出。
  • 环境反馈:系统执行动作后,环境根据当前状态 st 和控制输入 at 生成新的状态 st+1 和即时奖励 rt。
  • 存储交互数据:将状态 st、动作 at、奖励 rt 和下一个状态 st+1 存储起来,以便后续用于 Critic 的训练。
  1. Critic 更新
  • 估算当前值函数:Critic 评估当前状态-动作对的价值。如果使用 V(s),则计算当前状态的估计值。如果使用 Q(s, a),则计算当前状态-动作对的价值。

  • TD(时序差分)误差:Critic 使用时序差分(TD)方法来评估当前策略的表现。TD 误差计算为:

    \delta_t = r_t + \gamma V(s_{t+1}) - V(s_t)

    或者,如果使用 Q 函数,则:

    \delta_t = r_t + \gamma \max_{a'} Q(s_{t+1}, a') - Q(s_t, a_t)

    其中,γ是折扣因子,r_t 是即时奖励,s_t 和 s_{t+1}是当前和下一个状态,a_t 是当前动作,a′ 是下一个状态可能的动作。

  • 更新 Critic:Critic 通过最小化 TD 误差来更新值函数 V(s)或 Q 函数 Q(s,a)。通常通过梯度下降法来更新 Critic 的参数,使得估算的值函数与目标值函数一致。

    <aside>

    时序差分(Temporal Difference, TD)学习是一种结合了动态规划和蒙特卡洛方法的强化学习方法。它的核心思想是通过实际获得的奖励和估计的未来价值之间的差异来更新值函数。

    TD学习的主要特点:

    • 在线学习:不需要等待整个回合结束就可以进行学习,每个时间步都可以更新
    • 自举(Bootstrapping):使用当前估计来更新之前的估计,形成迭代学习过程
    • TD误差:通过计算实际获得的奖励与预测的价值之间的差异来进行学习

    TD学习的基本更新规则:

    V(s_t) \leftarrow V(s_t) + \alpha[r_t + \gamma V(s_{t+1}) - V(s_t)]

    其中:

    • α(学习率):决定新信息对当前估计的影响程度
    • γ(折扣因子):平衡即时奖励和未来奖励的重要性
    • rt + γV(st+1):TD目标,包含实际奖励和折扣后的下一状态估计值,即目标值函数,是估计出来的
    • V(st):当前状态的估计值
      </aside>
  1. Actor 更新
  • 利用 Critic 的反馈来更新 Actor:Actor 通过 Critic 的反馈来改进策略,目的是提高总回报。Actor 更新的关键是 策略梯度,即通过最大化某个目标函数(如总回报)来优化策略参数。通常,Actor 更新的目标是使得通过 Critic 评估的策略更加有利。

  • 使用 策略梯度方法,Actor 的更新通常可以表示为:

    \theta_{\text{Actor}} = \theta_{\text{Actor}} + \alpha \nabla_{\theta_{\text{Actor}}} J(\theta_{\text{Actor}})

    其中 α是学习率,J(\theta_{\text{Actor}})是策略的期望回报,策略梯度 \nabla_{\theta_{\text{Actor}}}通过 Critic 提供的 TD 误差来计算。具体地,策略梯度可以通过 REINFORCE优势加权策略梯度(Advantage-weighted Regression, AWR) 等方法来实现。

  • Actor 更新公式:对于每个状态 s_t,Actor 会按照以下公式更新策略:

    \Delta \theta_{\text{Actor}} = \alpha \delta_t \nabla_{\theta} \log \pi(a_t | s_t)

  • 其中,δt\delta_t 是 Critic 计算出的时序差分误差,表示某一状态-动作对的改进方向,\nabla_{\theta} \log \pi(a_t | s_t)是策略网络的梯度,用于更新策略参数。

  1. 策略优化与改进
  • 多次迭代:Actor 和 Critic 交替进行更新。Actor 生成新的控制策略,Critic 评估这些策略并提供反馈。然后,Actor 根据 Critic 的反馈进行更新。这个过程重复进行,直到策略和价值函数都收敛或达到预期的性能。
  • 收敛检查:通过监控 TD 误差、策略的变化或总回报,检查算法是否收敛。通常,收敛的标志是策略不再发生显著变化,或者 TD 误差变得非常小。
  1. 最终策略部署
  • 策略应用:一旦算法收敛,最终的策略就可以部署到实际系统中。Actor 将用于在每个时刻根据当前状态选择最优动作。

ADP稳定性保证机制

稳定性判据

李雅普诺夫函数

李雅普诺夫函数是用于分析动力系统稳定性的一种数学工具,尤其适用于证明平衡点的稳定性。其核心思想是通过构造一个能量状的标量函数,分析该函数随时间的变化来判断系统的稳定性。以下是其严格定义及关键要点:

<aside>

标量函数(Scalar Function)是指一个将向量(或多个变量)映射到一个实数的函数。具体来说:

  • 输入可以是一个n维向量 x = (x₁, x₂, ..., xₙ)
  • 输出是一个实数(单个数值)
  • 数学表示:f: Rⁿ → R

在李雅普诺夫稳定性分析中,使用标量函数的原因是:

  • 可以将复杂的多维系统状态简化为一个能量值
  • 便于分析系统的整体稳定性
  • 能直观地表示系统的"能量"随时间的变化趋势
    </aside>

定义:

考虑自治动力系统:

x˙=f(x),f(0)=0x˙=f(x),f(0)=0

其中,x∈Rn 为状态变量,原点 x=0 是平衡点。

若存在一个函数 V(x):D \subseteq \mathbb{R^n} \rightarrow \mathbb{R} 满足以下条件,D表示定义域,则称 V(x) 为李雅普诺夫函数

  1. 正定性

    • V(0)=0,且对所有 xD∖{0},有 V(x)>0。
  2. 径向无界性(仅全局稳定性需要)

    • 当 ∥x∥→∞ 时,V(x)→∞(确保全局稳定性)。
  3. 导数半负定

    • 沿系统轨迹的导数满足:

    \dot V(x) = \frac{dV}{dt} = \nabla V \cdot f(x) \leq0, \forall x \in D \setminus \{0\}

稳定性结论

  • 李雅普诺夫稳定:若存在满足上述条件的 V(x),则平衡点 0 是稳定的
  • 渐近稳定:若进一步有 \dot V(x) <0,\forall x\in D \setminus \{0\} 则平衡点 0 是渐近稳定的
  • 全局渐近稳定:若 D = \mathbb{R^n}且 V(x)径向无界,则稳定性是全局的。

<aside>

径向无界性(Radially Unbounded)是指当状态向量的范数趋于无穷大时,李雅普诺夫函数的值也趋于无穷大。具体来说:

\lim_{\|x\| \to \infty} V(x) = \infty

这意味着:

  • 对于任意给定的正实数 M > 0,存在一个 R > 0,使得当 ∥x∥ > R 时,有 V(x) > M
  • 李雅普诺夫函数的等值线(在二维情况下)或等值面(在高维情况下)是闭合的

径向无界性的重要性在于:

  • 确保系统状态不会发散到无穷大
  • 保证系统的全局稳定性,而不仅仅是局部稳定性
  • 常见的二次型函数 V(x) = xᵀPx(其中P为正定矩阵)就是径向无界的
    </aside>

直观解释

  • 正定性:类似于“能量”函数,在平衡点处能量最低(V(0)=0),周围状态能量更高(V(x)>0)。
  • 导数条件:能量随时间不增加(V˙≤0),系统逐渐趋向平衡点;若能量严格递减(V˙<0),则系统最终收敛到平衡点。

对线性系统 x˙=Ax,可取二次型函数 V(x)=xTPx,其中 P 为正定矩阵。若满足 ATP+PA=−Q(Q 正定),则系统渐近稳定。

首先,我们计算李雅普诺夫函数 V(x) = x^T P x 对时间的导数。根据链式法则:

\dot{V}(x) = \frac{d}{dt}(x^T P x)

使用矩阵微积分的规则,得到:

\dot{V}(x) = \dot{x}^T P x + x^T P \dot{x}

因为\dot{x} = A x,代入得到:

\dot{V}(x) = (A x)^T P x + x^T P (A x)

这可以简化为:

\dot{V}(x) = x^T A^T P x + x^T P A x

结合两个项,我们可以合并成:

\dot{V}(x) = x^T (A^T P + P A) x

现在我们考虑给定的条件:

A^T P + P A = -Q

其中 Q是正定矩阵。代入到李雅普诺夫函数的导数表达式中,我们得到:

\dot{V}(x) = -x^T Q x

因为 Q 是正定矩阵,所有的 x^T Q x, 都是非负的,并且对于所有非零的 x,有:

x^T Q x > 0t;0

因此,\dot{V}(x) 是负定的,即 \dot{V}(x) < 0 对于所有 x \neq 0 0x=0 成立。

根据李雅普诺夫稳定性理论,如果存在一个正定的李雅普诺夫函数 V(x),并且其导数 \dot{V}(x) 是负定的,那么系统是渐近稳定的。由于 \dot{V}(x) = -x^T Q x 是负定的,我们可以得出结论,系统的解 x(t) 会随着时间趋于零,即系统是渐近稳定的。

总结来说,给定的条件 A^T P + P A = -Q 使得李雅普诺夫函数 V(x) = x^T P x 的导数 \dot{V}(x) 为负定,从而证明了系统是渐近稳定的。


应用场景

  • 控制理论:设计控制器时验证闭环系统稳定性。
  • 非线性系统:无需求解微分方程,直接通过构造 V(x)V(x) 分析稳定性。
  • 机器人学、电力系统:确保系统在扰动后恢复平衡。

关键点总结

  • 李雅普诺夫函数是分析稳定性的“能量函数”。
  • 定义依赖于正定性和导数条件。
  • 存在性直接导出稳定性结论,但构造需结合系统特性。

此方法(李雅普诺夫第二方法)的核心优势在于避免直接求解复杂的微分方程,转而通过函数性质间接推断系统行为。

<aside>

1. 李雅普诺夫第一方法(直接法)

这种方法通过直接分析系统的微分方程解来研究稳定性。具体步骤包括:

  • 求解系统的状态方程,得到显式解
  • 分析解的性质(如特征值、渐近行为等)来判断稳定性
  • 局限性:对于复杂的非线性系统,往往难以或无法得到显式解

2. 李雅普诺夫第二方法(能量法)

如前所述,通过构造能量函数来间接分析系统稳定性,无需求解微分方程。

3. 其他稳定性分析方法

  • 线性化方法:在平衡点附近将非线性系统线性化,然后使用线性系统的分析工具
  • 描述函数法:用于分析含有非线性环节的反馈系统的稳定性
  • 圆判据:频域分析方法,用于分析闭环系统的稳定性
  • Popov判据:用于分析含有特定类型非线性环节的系统稳定性

各方法比较:

方法 优点 缺点
第一方法 直观,结果精确 难以处理复杂系统
第二方法 适用范围广,无需解方程 需要构造合适的李雅普诺夫函数
线性化方法 简单实用 仅适用于局部分析
频域方法 工程实用性强 主要适用于线性系统

</aside>

Hurwitz稳定性判据

Hurwitz稳定性判据(也称为劳斯-赫尔维茨稳定性判据)是用于判断线性时不变系统稳定性的一种方法。它通过分析系统特征方程的系数来判断系统是否稳定。

对于一个n阶特征方程:

a_ns^n + a_{n-1}s^{n-1} + ... + a_1s + a_0 = 0

构造Hurwitz矩阵:

  • Hurwitz稳定的充要条件:系统所有特征根的实部均为负。
  • 判据内容:系统稳定的充要条件是Hurwitz行列式的所有主子式大于零。

在实际应用中,Hurwitz稳定性判据常用于:

  • 控制系统设计:判断反馈控制系统的稳定性
  • 参数优化:确定使系统稳定的控制器参数范围
  • 稳定性分析:评估系统在不同工作条件下的稳定性

ADP的稳定性保证

ADP的核心目标是通过动态规划框架逼近最优控制策略,同时确保闭环系统的稳定性。其稳定性可通过以下两种方式实现:

隐式稳定性保证

值函数设计

Critic网络逼近的值函数 V(s) 通常被设计为李雅普诺夫候选函数(如 V(s) = s^T P s, P 正定)。

  • 若通过贝尔曼方程迭代保证 V(s) 单调递减(即 ΔV(s)≤−αV(s)),则系统自然满足稳定性。
  • 优势:无需显式约束Actor网络,稳定性通过Critic网络的优化目标隐式保证。

优化目标的物理意义

ADP的长期代价函数设计(如最小化能量消耗、跟踪误差)通常隐含稳定性需求。例如,在轨迹跟踪中,代价函数惩罚偏离目标轨迹的状态,间接引导系统稳定。

<aside>

根据李雅普诺夫稳定性理论,如果存在一个正定函数V(s)(即V(s)>0,对所有s≠0),且其导数V˙(s)是负定的(即V˙(s)<0,对所有s≠0),那么系统就是渐近稳定的。这是因为:

  • 负定的V˙(s)意味着V(s)随时间单调递减,系统能量不断消耗
  • 由于V(s)是正定的,它有一个下界(即0),所以V(s)必然会收敛到某个值
  • 结合V(s)的正定性和V˙(s)的负定性,可以证明系统状态s最终会收敛到原点(即s→0)

因此,当值函数V(s)被设计为李雅普诺夫函数且保证其单调递减时,就自然满足了系统稳定性的充分条件。这种方法的优势在于将稳定性分析融入到ADP的值函数逼近中,无需额外的稳定性约束。

选择李雅普诺夫函数作为候选函数是值函数和李雅普诺夫函数之间有一些显著的相似性,这使得李雅普诺夫函数在自适应动态规划中作为值函数的近似函数成为一种自然选择:

  • 二次型结构
    • 在很多优化控制问题(特别是线性二次调节问题)中,值函数 V(s) 可以表示为一个二次型函数,例如 V(s)=sTPs,其中 P 是一个正定矩阵。这与李雅普诺夫函数 V(s)=sTPs 非常相似,后者用于证明系统的稳定性。
    • 二次型函数的形式使得求解过程更加简洁,因为它具有简单的数学性质,易于分析和计算。
  • 稳定性与最优性
    • 在ADP中,值函数描述的是系统在最优策略下的累积回报。而李雅普诺夫函数则描述了系统的稳定性,确保系统状态随着时间推移趋于平衡(或零)。
    • 在很多控制问题中,系统的最优性(最小化代价或最大化回报)与稳定性紧密相关。通过选择一个合适的李雅普诺夫函数作为近似值函数,可以确保系统的稳定性和最优性在解空间中得到有效的权衡。
  • 动态性质
    • 李雅普诺夫函数的导数沿着系统的轨迹是负定的,即 V˙(s)<0,这确保了系统的渐近稳定性。

    • 在ADP中,值函数的递推式涉及到系统动态的回报积累,因此值函数也会反映系统的动态特性。通过选择李雅普诺夫函数的形式(例如二次型函数),可以保证动态系统在最优控制策略下的收敛性。

  • 控制策略
    • 在最优控制问题中,HJB方程的值函数可以用来导出最优控制策略。对于二次型问题,最优控制策略通常是线性的,类似于李雅普诺夫函数中的线性稳定性分析。
    • 李雅普诺夫函数提供了一种直观的方式来评估控制策略的有效性,尤其是在系统稳定性与最优性之间的平衡。
      </aside>

显式稳定性约束

李雅普诺夫条件嵌入

在Actor网络的训练过程中,直接添加李雅普诺夫约束(如 \dot{V}(s)=\nabla V\cdot f(s,a)<0),确保策略更新后闭环系统稳定。

  • 实现方式:通过拉格朗日乘子法或投影策略,将约束融入优化问题。
  • 适用场景:高安全需求系统(如无人机、医疗机器人),需严格数学证明稳定性。

<aside>

拉格朗日乘子法实现

  • 将约束优化问题转化为无约束优化问题:L(θ,λ) = J(θ) + λg(θ)
  • 其中:
    • J(θ)是原始目标函数(如最小化控制代价)
    • g(θ)是李雅普诺夫稳定性约束(如V̇(s) < 0)
    • λ是拉格朗日乘子
  • 通过交替优化θ和λ来求解:
    • 固定λ优化策略参数θ
    • 固定θ更新乘子λ

投影策略实现

  • 在每次策略更新后,将参数投影到满足约束的可行集上:
    θnew = Proj_C(θold - α∇J(θold))
  • 投影操作通常通过求解二次规划(QP)问题实现:
    min ||θ - θ*||²
    s.t. g(θ) ≤ 0
  • 其中:
    • θ*是未经投影的参数更新
    • g(θ)表示李雅普诺夫稳定性约束
    • ||·||表示欧几里得范数

实现考虑要点

  • 约束松弛:在实践中可能需要适当放松约束条件,避免优化问题过于严格
  • 计算效率:投影操作可能计算开销较大,需要权衡实时性要求
  • 数值稳定性:建议使用二阶优化方法(如信赖域方法)提高收敛性
    </aside>

控制屏障函数(CBF)

结合ADP与CBF,将安全性约束(如避障、状态限幅)显式编码到Actor网络中,确保策略生成的动action满足物理限制。

<aside>
控制屏障函数(Control Barrier Function, CBF)是一种用于确保系统安全性的数学工具,它通过定义安全集合和相应的屏障函数来实现对系统状态的约束。

  • 基本原理
    • 定义一个非负函数h(x),使得h(x)≥0表示系统处于安全状态
    • 要求h(x)的导数满足某些条件,确保系统不会离开安全集合
  • 主要特点
    • 提供前向不变性保证:一旦系统进入安全集合,将永远保持在安全集合内
    • 可以处理多个安全约束:通过多个CBF的组合实现复杂的安全要求
    • 实时计算效率高:通常可转化为凸优化问题求解
  • 在ADP中的应用
    • 将CBF约束集成到Actor网络的输出层
    • 通过二次规划(QP)层实时调整控制输入,确保满足安全约束
    • 在原有性能目标基础上增加安全性保证
      </aside>

何时需要显式约束Actor网络?

场景 是否需要显式约束 原因
线性系统 + 二次型代价 LQR等传统方法隐式保证稳定性,ADP可沿用此框架。
非线性/复杂系统 非线性系统可能存在多个平衡点,需显式约束避免发散。
模型不确定性高 鲁棒ADP需通过约束应对未建模动态(如扰动、噪声)。
安全关键应用 医疗、航天等领域需严格数学证明,避免隐式优化的不可控风险。
数据驱动训练(无模型) 可选 可通过大量试错数据隐式学习稳定策略,但显式约束提升收敛效率与安全性。

(1) 李雅普诺夫约束的嵌入

  • 优化问题重构L_{actor}=E[Q(s,a)+\lambda \cdot \max(0,\dot{V}(s))]在Actor网络的损失函数中增加李雅普诺夫条件惩罚项:L_{actor}=E[Q(s,a)+\lambda \cdot \max(0,\dot{V}(s))]
    • \lambda:惩罚权重,平衡性能与稳定性。
    • \dot{V}(s)=\nabla V \cdot f(s,a):李雅普诺夫函数导数。
  • 投影法:将策略更新投影到满足 \dot{V}(s)<0 的可行区域,例如通过二次规划(QP)实时求解。

(2) 控制屏障函数(CBF)结合

  • 联合优化\min_a E[Cost(s,a)] s.t. \dot{h}(s)+\alpha h(s) \geq 0设计CBF h(s) \geq 0 确保安全,ADP的目标函数变为:\min_a E[Cost(s,a)] s.t. \dot{h}(s)+\alpha h(s) \geq 0
    • 使用惩罚函数或对偶优化方法将约束融入Actor训练。

  • ADP的Actor网络不一定需要显式稳定性约束,但其必要性取决于:
    1. 系统复杂度(线性/非线性、模型不确定性);
    2. 应用场景(安全关键性、实时性需求);
    3. 训练数据(充足性、质量)。
  • 推荐策略
    • 简单/低风险系统:依赖隐式稳定性(Critic网络设计 + 代价函数优化)。
    • 复杂/高风险系统:显式嵌入李雅普诺夫或CBF约束,确保数学可证明的稳定性。

通过合理选择隐式或显式方法,ADP能够在控制性能与稳定性之间取得平衡,适应多样化应用需求。

ADP的典型方法

ADP的实现形式多样,主要分为以下三类:

1. 启发式动态规划(Heuristic Dynamic Programming, HDP)

  • 核心:直接逼近值函数(如状态值函数V(s))。
  • 流程
    1. 构建值函数逼近器(如神经网络)。

    2. 通过贝尔曼方程计算目标值:

      V(st)=rt+γV(st+1)

    3. 最小化预测值与目标值的误差,更新逼近器参数。

  • 应用场景:电力系统稳定控制、机器人路径规划。

2. 双重启发式规划(Dual Heuristic Programming, DHP)

  • 核心:逼近值函数的梯度(如∇V(s)),而非值函数本身。
  • 优势:适用于连续状态-动作空间,避免直接高维值函数逼近的困难。
  • 流程
    1. 构建梯度网络(如∂V∂s)。
    2. 利用贝尔曼方程的梯度形式更新网络参数。
  • 应用场景:无人机轨迹优化、机械臂控制。

3. 全局双重启发式规划(Global DHP, GDHP)

  • 核心:同时逼近值函数及其梯度,综合HDP与DHP的优势。
  • 特点:收敛性更好,但对计算资源要求更高。
  • 应用场景:复杂工业过程控制、能源系统优化。

ADP和其他方法之间的区别与联系

方法 依赖模型 核心思想 适用场景 计算复杂度
LQR/LQG 精确线性模型 解析求解Riccati方程 线性确定性/随机系统 低(离线计算)
MPC 需要模型 滚动时域优化 带约束的线性/非线性系统 高(在线优化)
H∞控制 频域模型 最小化干扰敏感性 鲁棒性要求高的系统 中等(离线设计)
RL 无模型 试错学习最大化累积奖励 完全未知或复杂环境 高(依赖数据量)
ADP 部分模型 动态规划+在线函数逼近 非线性、高维、自适应系统 中等(在线学习)

尽管ADP与RL均涉及值函数逼近和在线学习,但两者在理论基础设计目标上存在差异:

  • ADP
    • 基于动态规划的最优控制理论,强调数学严格性(如HJB方程、稳定性证明)。
    • 通常需要部分模型信息(如状态转移方程)。
  • RL
    • 基于试错学习和奖励最大化,更注重无模型下的探索与泛化能力。
    • 典型算法如DQN、PPO属于无模型方法

交叉点

  • 深度ADP(Deep ADP):结合深度学习与ADP框架,处理高维感知输入(如图像)。
  • 模型基RL中的ADP思想:利用环境模型辅助值函数更新(如Dyna架构)。

自适应动态规划(ADP)强化学习(RL)的结合中,“ADP初始化RL策略”和“RL优化ADP参数”是两种互补的混合方法。它们通过结合模型基的严谨性与无模型的灵活性,提升算法性能。以下是具体实现方式及示例:

1. ADP初始化RL策略

核心思想

利用ADP的理论框架(基于动态规划与部分模型信息)生成初步策略,作为RL训练的起点,加速收敛并提升稳定性。

实现步骤

ADP离线预训练

  • 使用ADP算法(如DHP、GDHP)和已知的简化模型(如机器人动力学方程),离线训练一个基础策略。
  • 示例:在双足机器人控制中,基于简化的倒立摆模型,用ADP生成稳定站立的初始策略。

策略参数迁移

  • 将ADP训练得到的值函数逼近网络(Critic)或策略网络(Actor)参数迁移至RL框架中。
  • 示例:将ADP中Critic网络的权重作为RL中值函数网络(如DQN中的Q网络)的初始参数。

RL在线微调

  • 在真实环境或高保真仿真中,通过RL的试错学习对初始策略进行微调,适应未建模的动态(如地面摩擦、关节柔性)。
  • 示例:在ADP生成的行走策略基础上,用PPO算法优化步态以应对复杂地形。

技术优势

减少探索成本:ADP提供的合理初始策略避免RL从随机策略开始的高风险探索(如机器人频繁跌倒)。

提升稳定性:ADP的稳定性分析为RL提供“安全基线”,降低训练崩溃概率。

2. RL优化ADP参数

核心思想

利用RL的无模型探索能力,优化ADP中难以精确建模的部分(如环境扰动、非线性摩擦),提升ADP的适应性和鲁棒性。

实现步骤

ADP框架搭建

  • 构建基于动态规划的ADP主框架,包含Critic网络(值函数梯度逼近)和Actor网络(控制策略)。
  • 示例:针对机器人设计DHP算法,使用动力学模型计算状态转移雅可比矩阵。

RL辅助参数优化

  • 将ADP中的不确定参数(如摩擦系数、外部扰动模型)设为可学习变量,通过RL的奖励信号反向传播优化。
  • 示例:用RL调整ADP动力学模型中的摩擦系数μμ,使其逼近真实环境。

交替训练

  • 交替执行ADP的策略迭代和RL的参数优化:
    • 阶段1:固定模型参数,用ADP更新策略;
    • 阶段2:固定策略,用RL探索环境并更新模型参数。

技术优势

增强模型适应性:通过RL在线学习修正ADP的模型误差(如未建模的空气阻力)。

平衡效率与鲁棒性:ADP保证基础稳定性,RL优化细节参数以应对不确定性。

ADP Bipedal Control Demo

以下是使用自适应动态规划(ADP)解决双足机器人行走问题的详细步骤指南,涵盖建模、算法设计、实现与验证全流程:


1. 问题建模与动力学分析

1.1 定义状态空间与动作空间

  • 状态变量(State)
    • 机器人质心位置 (x,y,z)
    • 各关节角度 \mathbf{q}=[q_1,q_2,...,q_n]^T(如髋、膝、踝关节)
    • 关节角速度 \dot{\mathbf{q}}=[\dot{q}_1,\dot{q}_2,...,\dot{q}_n]^T
    • 足端接触力(可选,用于稳定性判断)
    • 总状态维度s \in \mathbb{R}^{3+2n}(假设无接触力传感器)
  • 控制输入(Action)
    • 关节力矩 u=[τ1,τ2,...,τn]T
    • 或参考轨迹跟踪的关节角度增量(需逆动力学转换)

1.2 构建简化动力学模型

  • 动力学方程

    M(q)q¨+C(q,q˙)q˙+G(q)=u+d

    • M:惯性矩阵,C:科里奥利力矩阵,G:重力项,d:外部扰动(如地面反作用力)
  • 模型简化

    • 假设地面平坦且接触点固定(单支撑期),忽略柔性关节效应。
    • 使用拉格朗日方程或牛顿-欧拉法推导简化模型(需数值验证)。

1.3 设计奖励函数(Reward Function)

  • 核心目标
    • 稳定性:质心投影在支撑多边形内,姿态角(俯仰、横滚)接近目标。
    • 行走性能:前进速度跟踪、步长对称性。
    • 能量效率:关节力矩平方和最小化。
  • 奖励函数示例r_t = w_1 \cdot v_{track} + w_2 \cdot e^{-\alpha \cdot \theta_{pitch}^2} + w_3 \cdot e^{-\beta \cdot \theta_{roll}^2} - w_4 \cdot \|u\|^2 - w_5 \cdot fall\_penalty
  • v_{track}:速度跟踪误差的负值
  • \theta_{pitch}, \theta_{roll}:俯仰角与横滚角偏差
  • fall\_penalty:跌倒时的极大负奖励(如-1000)
  • w_i:权重系数,需通过实验调整

2. ADP算法设计

2.1 选择ADP方法类型

  • 推荐方法双重启发式规划(DHP)
    • 原因:双足机器人状态空间维度高(10+维),直接逼近值函数(HDP)计算量大,DHP通过逼近值函数梯度∇V(s)更高效。
    • 替代方案:若需更高精度,可选用全局双重启发式规划(GDHP)。

2.2 构建函数逼近器

  • 神经网络结构
    • Critic网络(值函数梯度逼近器)
      • 输入:状态ss(归一化处理)
      • 输出:值函数梯度∂V∂s∈R3+2n
      • 结构:3层全连接网络(隐层神经元数128-256),激活函数ReLU。
    • Actor网络(策略函数)(可选,若采用Actor-Critic架构):
      • 输入:状态s
      • 输出:控制输入u
      • 结构:与Critic类似,输出层使用Tanh限制力矩范围。
  • 初始化与正则化
    • 使用Xavier初始化,添加L2正则化防止过拟合。

2.3 动态规划迭代

  • 贝尔曼方程梯度形式(DHP核心):∂stV(st)=∂strt+γst+1∂V(st+1)⋅∂stst+1

    • ∂st+1∂st:状态转移雅可比矩阵,通过动力学模型或在线差分近似。
  • Critic网络训练Lcritic=∂stV(st)−(∂strt+γst+1∂V(st+1)⋅∂stst+1)2

    最小化梯度预测误差:

    Lcritic=∥∂V(st)∂st−(∂rt∂st+γ∂V(st+1)∂st+1⋅∂st+1∂st)∥2

  • Actor网络更新(若存在):uuη⋅∂uV(s)

    沿值函数梯度方向优化策略:

    u←u−η⋅∂V(s)∂u


3. 实现与仿真验证

3.1 仿真环境搭建

  • 工具选择
    • 物理引擎:MuJoCo、PyBullet(支持高精度刚体动力学仿真)。
    • 机器人模型:公开双足模型(如Cassie、Atlas)或自定义URDF文件。
  • 关键参数
    • 仿真步长:1ms(保证数值稳定性)。
    • 控制频率:100Hz(实时性要求)。

3.2 训练流程

  1. 数据采集
    • 随机初始化策略或使用预定义步态(如ZMP轨迹)生成初始数据。
    • 记录状态转移(st,ut,st+1,rt)
  2. 在线学习
    • 每隔N步(如N=10)从经验池采样批量数据,更新Critic网络。
    • 若用Actor-Critic架构,联合更新Actor网络。
  3. 探索策略
    • 添加动作噪声(如高斯噪声)或使用ϵϵ贪婪策略促进探索。

3.3 稳定性增强

  • 李雅普诺夫函数约束:ΔL(st)=L(st+1)−L(st)≤−αL(st)

    设计能量函数L(s)L(s)(如质心高度+姿态角平方),确保控制策略满足:

    ΔL(st)=L(st+1)−L(st)≤−αL(st)

    通过约束优化(如Lagrangian乘子)将稳定性条件嵌入ADP更新。

  • 鲁棒性训练

    在仿真中引入随机扰动(如地面不平度、外力冲击),提升控制器抗干扰能力。


4. 实际部署与调优

4.1 硬件接口

  • 传感器融合
    • IMU(姿态角、角速度)
    • 关节编码器(角度、速度)
    • 力/力矩传感器(足端接触力)
  • 实时控制
    • 使用ROS(Robot Operating System)实现ADP算法与底层电机驱动的通信。
    • 确保控制循环延迟低于10ms。

4.2 参数调优

  • 关键超参数

    • 折扣因子γ:0.95-0.99(长视距优化)。
    • 学习率η:Critic网络1e-4,Actor网络1e-5(需逐步衰减)。
    • 批量大小(Batch Size):128-512。
  • 奖励权重调整

    使用自动熵调整(Auto-tuning)或Pareto前沿分析平衡多目标冲突。

4.3 失败模式处理

  • 跌倒恢复

    • 设计应急策略(如关节柔顺控制或倒地后自复位动作)。
    • 在ADP训练中增加跌倒场景的采样权重。
  • 传感器噪声

    在状态输入中加入噪声(如高斯白噪声),提升控制器的鲁棒性。


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容