1 计算原理
1.1 最优控制问题
在现代控制系统中,最优控制问题通常描述为在满足一定约束条件下,最小化某个性能指标。其数学形式如下:
$$ \dot{X} = f(X, U, t) \\\\ g(X(0),U(0),t) \leq 0 \quad \text{或} \quad g(X(t_{f}), U(t_{f}), t_{f}) \leq 0 \\\\ c(X,U,t) \leq 0 \\\\ \text{约束条件:} \min J(X,U,t) $$- 状态方程:描述系统动态,即状态变量微分与当前状态、控制输入和时间的关系。
- 边界约束:包括初始和终端时刻的状态与控制约束。
- 过程约束:在整个控制过程中必须满足的强约束条件。
- 性能指标:控制系统设计目标,即最小化某个泛函 $J$。
1.2 性能指标类型
从变分法角度看,最优控制问题本质是求解泛函 $X(\cdot)$ 和 $U(\cdot)$,使性能指标 $J$ 最小。常见性能指标分为三类:
1.2.1 Mayer型性能指标
仅与终端状态相关:
$$ J_M(X(\cdot), U(\cdot)) = h(X(t_f)) $$- 适用于只关注最终结果的问题,如导弹命中精度。
1.2.2 Lagrange型性能指标
关注整个控制过程:
$$ J_L(X(\cdot), U(\cdot)) = \int^{t_f}_{0} f^0(t, X(t), U(t)) \, dt $$- 适用于需要优化整个过程的问题,如能耗最小化。
1.2.3 Bolza型性能指标
结合终端和过程性能:
$$ J_B(X(\cdot), U(\cdot)) = h(X(t_f)) + \int^{t_f}_{0} f^0(t, X(t), U(t)) \, dt $$- 最常见的形式,兼顾最终状态和过程消耗。
2 Gauss积分回顾
2.1 基本概念
Gauss积分是一种数值积分方法,通过选取非均匀分布的积分点实现高精度积分。其核心思想是:使用 $n+1$ 个Gauss点可获得 $2n+1$ 阶代数精度。
与传统Newton-Cotes方法(如梯形法则)相比:
- 梯形法则(2点)仅具1阶精度:
- Gauss积分公式:
其中 $c_i$ 为权重系数,$x_i$ 为Gauss点。
2.2 Gauss点选取原理
Gauss点的选取基于正交多项式理论:
$$ \int^b_a p_j(x) p_k(x) \, dx = \begin{cases} 0, & j \neq k \\ \neq 0, & j = k \end{cases} $$$$ p_i(x) = \frac{1}{2^i i!} \frac{d^i}{dx^i} [(x^2 - 1)^i] $$在区间 $[-1, 1]$ 上正交。
$$ Q(x) = \sum_{i=1}^{n} L_i(x) f(x_i) $$$$ \int^1_{-1} Q(x) \, dx = \sum_{i=1}^{n} c_i f(x_i), \quad c_i = \int^1_{-1} L_i(x) \, dx $$这种选点方式能最大化积分精度。
3 非线性规划(NLP)问题
非线性规划问题通式为:
$$ minimize \ f(x) \\\\ subject \ to \ g_i(x) \le 0 \ for \ each \ i \in \{1, \cdots , m\} \\\\ h_j(x) = 0 \ for \ each \ j \in \{1, \cdots , p\} \\\\ x \in X. $$$$ 最小化\ f(x)=x_1x_2 \\\\ 其中满足 \ g_1(x)=-x_1, g_2(x_2) = -x_2 \\\\ x \in R^2 $$常用求解工具包括MATLAB的 fmincon、IPOPT、SNOPT等。高斯伪谱法的核心就是将最优控制问题转化为NLP问题求解。
4 Gauss伪谱法
4.1 时间区间变换
$$ t = \frac{(t_f - t_0) \tau + (t_f + t_0)}{2}, \quad \tau = \frac{2t - t_f - t_0}{t_f - t_0} $$4.2 状态方程离散化
$$ \frac{dX}{dt} = f(X(t), U(t), t) $$$$ \frac{dX}{d\tau} \frac{d\tau}{dt} = f(X(\tau), U(\tau), \tau) $$$$ \frac{dX}{d\tau} = \frac{t_f - t_0}{2} f(X(\tau), U(\tau), \tau) $$$$ X(\tau) \approx \sum_{i=0}^{n} L_i(\tau) X(\tau_i), \quad U(\tau) \approx \sum_{i=1}^{n} L_i^*(\tau) U(\tau_i) $$$$ L_i(\tau) = \prod_{j=0, j \neq i}^{n} \frac{\tau - \tau_j}{\tau_i - \tau_j}, \quad L_i^*(\tau) = \prod_{j=1, j \neq i}^{n} \frac{\tau - \tau_j}{\tau_i - \tau_j} $$$$ \dot{X}(\tau_k) \approx \sum_{i=0}^{n} D_{ki} X(\tau_i), \quad D_{ki} = \dot{L}_i(\tau_k) $$$$ \sum_{i=0}^{n} D_{ki} X_i - \frac{t_f - t_0}{2} F(X_k, U_k, \tau_k; t_0, t_f) = 0 $$5 计算例程
$$ \dot{x} = -x^2 + u, \quad x(0) = 1, \quad x(2) = 0.5, \quad J = 0.5 \int^2_0 u^2(t) \, dt, \quad t \in [0, 2] $$5.1 问题变换
$$ t = \tau + 1 \Rightarrow \frac{dx}{d\tau} = -x^2 + u $$$$ \tau_0 = -1, \quad \tau_1 = -\frac{1}{\sqrt{3}}, \quad \tau_2 = \frac{1}{\sqrt{3}}, \quad \tau_f = 1 $$5.2 离散化
$$ X(\tau) \approx L_0(\tau) X_0 + L_1(\tau) X_1 + L_2(\tau) X_2 \\\\ U(\tau) \approx L_1^*(\tau) U_1 + L_2^*(\tau) U_2 $$$$ Z = [X_0, X_1, X_2, U_1, U_2]^T $$$$ D = \begin{bmatrix} \frac{(\tau_1 - \tau_1) + (\tau_1 - \tau_2)}{(\tau_0 - \tau_1)(\tau_0 - \tau_2)} & \frac{(\tau_1 - \tau_0) + (\tau_1 - \tau_2)}{(\tau_1 - \tau_0)(\tau_1 - \tau_2)} & \frac{(\tau_1 - \tau_0) + (\tau_1 - \tau_1)}{(\tau_2 - \tau_0)(\tau_2 - \tau_1)} \\\\ \frac{(\tau_2 - \tau_1) + (\tau_2 - \tau_2)}{(\tau_0 - \tau_1)(\tau_0 - \tau_2)} & \frac{(\tau_2 - \tau_0) + (\tau_2 - \tau_2)}{(\tau_1 - \tau_0)(\tau_1 - \tau_2)} & \frac{(\tau_2 - \tau_0) + (\tau_2 - \tau_1)}{(\tau_2 - \tau_0)(\tau_2 - \tau_1)} \end{bmatrix} $$约束条件:
- 初始条件:$X_0 = 1$
- 终端条件:$X_f \approx X_0 + \sum_{i=1}^2 c_i (-X_i^2 + U_i)$
- 微分约束:
- 目标函数:$\min J = 0.5 (U_1^2 + U_2^2)$
5.3 MATLAB实现
|
|