线性二次型调节器 (Linear-Quadratic Regulator, LQR) 是一种基于模型的最优控制方法,广泛应用于现代控制理论中。其目标是为线性系统设计一个反馈控制器,使得二次型性能指标(代价函数) 达到最小值。
一、问题描述
LQR 控制问题由两部分构成:描述系统行为的线性动态模型和定义优化目标的二次型代价函数。
1. 线性动态系统
系统的动态特性由一个离散时间、线性的状态空间方程来描述:
其中:
- 是系统在时刻 的状态向量。
- 是系统在时刻 的控制输入向量。
- 是状态矩阵,描述了系统内部状态的演变。
- 是输入矩阵,描述了控制输入如何影响系统状态。
2. 二次型代价函数
为了评估控制性能,我们定义一个二次型的代价函数 。对于调节问题(即目标是使系统状态稳定在零点),代价函数通常写为:
其中:
- 是控制过程的终端时刻。
- 第一项 是终端代价,用于惩罚系统在终点时偏离目标状态(零向量)的程度。
- 第二项是过程代价的累加和,其中:
- 惩罚在过程中的状态偏差。 惩罚在过程中的状态偏差。
- 惩罚控制能量的消耗。 惩罚控制能量的消耗。
- S, Q, R 是权重矩阵,由设计者根据控制需求指定。它们决定了状态误差和控制成本之间的权衡。
- 为了保证代价函数存在最小值,要求 S 和 Q 为半正定矩阵 (),R 为正定矩阵 ( for )。R 的正定性确保了控制成本是严格正的,并且其逆矩阵存在。为了保证代价函数存在最小值,要求 S 和 Q 为半正定矩阵 (),R 为正定矩阵 ( for )。R 的正定性确保了控制成本是严格正的,并且其逆矩阵存在。
LQR 的核心目标就是找到一组最优的控制输入序列 ,使得代价函数 最小。
二、LQR 求解方法:动态规划
LQR 问题可以通过动态规划 (Dynamic Programming) 的思想,采用逆向递推的方式高效求解。其核心是从终端时刻 开始,一步步向后推导,直到初始时刻。
1. 最终时刻 k = N
在终端时刻 ,控制过程已经结束,没有可以施加的控制输入。因此,此处的代价是固定的,即最优代价。
为了方便递推,我们定义一个新的矩阵序列 ,并进行初始化:
这里的索引
[0]
代表"距离终端还有0步"。因此,上式可以写为 。2. 时刻 k = N-1
在时刻 ,我们需要选择一个最优的控制 ,以最小化从此刻到终端的总代价。该总代价包括 时刻的运行代价和 时刻的终端代价。
将 和 代入:
为了找到使 最小的 ,我们对其求偏导数并令其为零:
NOTE THAT:
矩阵求导的相关内容参见矩阵的导数运算 的内容。
整理可得:
解出最优控制 :
这是一个关键结果,它表明最优控制是当前状态 的线性反馈。我们可以定义反馈增益矩阵 :
则最优控制律为:
3. 归纳与递推 (Riccati 方程)
现在,我们将最优控制 代回代价函数 ,得到从 时刻开始的最小代价 。经过整理,可以证明这个最小代价也是状态 的二次型:
这里的 (代表"距离终端还有1步"的代价矩阵) 由 递推得到。
通过对任意时刻 进行归纳,我们可以得到一组通用的递推公式。假设我们已经知道了 ,即从 时刻到终端的最小代价为 。那么在 时刻,我们可以通过与 完全相同的推导,得到如下结果:
- 最优控制律 (Optimal Control Law):
- 反馈增益 (Feedback Gain):
- 离散 Riccati 方程 (Discrete Riccati Equation):
或者写成更常见的形式:
这组方程构成了 LQR 问题的核心解法。
三、LQR 求解步骤总结
求解有限时域 LQR 问题的过程可以分为"线下计算"和"线上控制"两步。
第一步:离线逆向计算 (Offline Backward Calculation)
在控制器实际运行之前,我们可以预先计算出所有的反馈增益。
- 初始化: 令 。
- 逆向递推: 对于 ,依次进行如下计算:
- 计算反馈增益:
- 求解 Riccati 方程: (此处使用了Riccati方程的另一种等价形式)
- 将计算出的增益矩阵 存储起来。
第二步:在线正向控制 (Online Forward Control)
当控制器开始运行时,在每个时间步 :
- 测量或估计当前系统的状态 。
- 计算最优控制输入:使用预先计算好的增益矩阵 ,通过状态反馈律得到控制输入:
- 施加控制:将 应用于系统。
值得指出的是,离线逆向计算和在线正向控制是两个独立的过程;
离线计算的部分只是返回F_gain;在下一节的编程示例中细细体会!