본문 바로가기
유도항법제어/최적제어

[Discrete-Time] LQR 문제

by 세인트 워터멜론 2020. 10. 31.

비선형 시스템에 대해서 매우 일반적인 목적함수를 적용한 최적제어 문제에 대한 해를 유도해 보았다 (https://pasus.tistory.com/35). 그러나 이러한 셋팅으로는 명시적인 제어법칙(control law)을 유도해 내기가 어렵다.

LQR은 선형 시스템에 대해서 2차 함수로 주어진 목적함수를 이용한 최적제어 문제에서 도출되었으며 명시적인 제어법칙을 가지고 있는 제어기이다. LQR은 linear quadratic regulator의 약자로서 시스템이 선형(linear)이며 목적함수가 2차함수(quadratic)라는 의미이다. regulator는 시스템의 상태를 \(0\) (또는 set point로 불리는 상수 상태변수 값)으로 만드는 제어기를 뜻한다.

LQR은 PID 제어기와 함께 실제 응용 문제에서 많이 사용되는 제어기이며, 모델기반(model-based) 강화학습에서도 응용되는 제어기이다.

 

 

그러면 LQR 문제를 수식으로 세워보자. 제어 대상 시스템은 선형으로서 다음과 같이 주어진다.

 

\[ \mathbf{x}_{t+1} = F_t \mathbf{x}_t+ G_t \mathbf{u}_t \tag{1} \]

 

여기서 \( \mathbf{x}_t \in \mathbb{R}^n \) 는 상태변수고, \( \mathbf{u}_t \in \mathbb{R}^p \) 는 제어변수다. 이 시스템이 최소화해야 할 목적함수는 다음과 같이 2차함수로 주어진다.

 

\[ J_t = \frac{1}{2} \mathbf{x}_N^T S_N \mathbf{x}_N +\frac{1}{2} \sum_{t=i}^{N-1} \left( \mathbf{x}_t^T Q_t \mathbf{x}_t + \mathbf{u}_t^T R_t \mathbf{u}_t \right) \tag{2} \]

 

여기서 \( [i,N] \) 는 관심 시간 구간이며 초기 상태변수 \( \mathbf{x}_i \) 는 주어졌다고 가정한다. \( Q_t, R_t, S_N \) 은 대칭 행렬로서 각각 상태변수, 제어변수 및 최종 상태변수에 가해지는 가중값(weighting)을 나타내며 모든 시간스텝에 대해서 \( Q_t \ge 0, S_N \ge 0, R_t \gt 0 \) 이다.

제약조건은 다음과 같다.

 

\[ \psi( \mathbf{x}_N, N)=C \mathbf{x}_N- \mathbf{r}_N=0 \tag{3} \]

 

여기서 \(\mathbf{r}_N \in \mathbb{R}^q \) 와 행렬 \(C\) 는 주어졌다고 가정한다. 식 (3)은 최종 상태변수 구성요소의 선형조합이 \(\mathbf{r}_N\) 이 되도록 요구하는 것이다.

LQR문제는 시간 구간 \( [i,N] \) 에서 목적함수를 최소화하는 최적 제어입력의 시퀀스 \( \{ \mathbf{u}_i^*, \mathbf{u}_{i+1}^*, \cdots , \mathbf{u}_{N-1}^* \} \) 를 계산하는 것이다.

앞서 설명한 일반적인 최적제어 문제의 셋팅(https://pasus.tistory.com/35)과 비교해 보면,

 

\[ \begin{align} & \mathbf{f}_t (\mathbf{x}_t , \mathbf{u}_t ) = F_t \mathbf{x}_t +G_t \mathbf{u}_t \tag{4} \\ \\ & g_t (\mathbf{x}_t , \mathbf{u}_t ) = \frac{1}{2} \left( \mathbf{x}_t^T Q_t \mathbf{x}_t + \mathbf{u}_t^T R_t \mathbf{u}_t \right) \\ \\ & \phi(\mathbf{x}_N, N ) = \frac{1}{2} \mathbf{x}_N^T S_N \mathbf{x}_N \end{align} \]

 

이므로, 최적제어 문제의 해를 이용하여 LQR문제를 풀면 다음과 같다.

 

\[ \begin{align} & \mathbf{x}_{t+1} = \mathbf{f}_t ( \mathbf{x}_t , \mathbf{u}_t )=F_t \mathbf{x}_t + G_t \mathbf{u}_t \tag{5} \\ \\ & \mathbf{\lambda}_t = \left( \frac{\partial \mathbf{f}_t}{\partial \mathbf{x}_t } \right) ^T \mathbf{\lambda}_{t+1} + \frac{\partial g_t}{\partial \mathbf{x}_t } = F_t^T \mathbf{\lambda}_{t+1} + Q_t \mathbf{x}_t \tag{6} \\ \\ & 0 = \left( \frac{\partial \mathbf{f}_t}{\partial \mathbf{u}_t } \right) ^T \mathbf{\lambda}_{t+1} + \frac{\partial g_t}{\partial \mathbf{u}_t} = G_t^T \mathbf{\lambda}_{t+1} + R_t \mathbf{u}_t \tag{7} \\ \\ & 0 = \psi(\mathbf{x}_N, N) = C\mathbf{x}_N -\mathbf{r}_N \tag{8} \\ \\ & 0 = \left( \frac{\partial \phi}{\partial \mathbf{x}_N } + \left( \frac{\partial \psi}{\partial \mathbf{x}_N} \right)^T \nu -\mathbf{\lambda}_N \right) ^T d \mathbf{x}_N = (S_N \mathbf{x}_N +C^T \nu - \mathbf{\lambda}_N )^T d \mathbf{x}_N \tag{9} \end{align} \]

 

식 (7)에 의하면 최적제어는 다음 식으로 주어진다.

 

\[ \mathbf{u}_t = - R_t^{-1} G_t^T \mathbf{\lambda}_{t+1} \tag{10} \]

 

가정에 의해서 \( R_t \gt 0 \) 이므로 \( R_t \) 의 역행렬은 존재한다. 식 (10)을 계산하려면 라그랑지 곱수 또는 코스테이트(costate)인 \( \mathbf{\lambda}_{t+1} \) 를 알아야 한다. 코스테이트는 식 (6)을 이용해서 풀어야 하는데 최종 코스테이트인 \( \mathbf{\lambda}_N \) 과 상태변수 \( \mathbf{x}_t \) 를 알아야 한다.

한편 최적제어 (10)을 시스템 (5)에 인가하면 최적 경로 \( \mathbf{x}_t \) 가 다음과 같이 생성된다.

 

\[ \mathbf{x}_{t+1} = F_t \mathbf{x}_t - G_t R_t^{-1} G_t^T \mathbf{\lambda}_{t+1} \tag{11} \]

 

결국 최적제어 문제를 풀기 위해서는 식 (6)과 식 (11)을 동시에 풀어야 한다.

 

\[ \begin{align} & \mathbf{\lambda}_t = F_t^T \mathbf{\lambda}_{t+1} + Q_t \mathbf{x}_t \tag{12} \\ \\ & \mathbf{x}_{t+1} = F_t \mathbf{x}_t - G_t R_t^{-1} G_t^T \mathbf{\lambda}_{t+1} \end{align} \]

 

하지만 식 (12)를 풀기는 매우 어렵다. 왜냐하면 코스테이트는 최종값 \( \mathbf{\lambda}_N \) 을 이용하여 시간적으로 거슬러 올라가면서 풀어야 하고(backward), 상태변수는 초기 상태변수는 \( \mathbf{x}_i \) 를 이용하여 시간적으로 정방향(forward)으로 진행하면서 풀어야 하기 때문이다.

초기 상태변수가 \( \mathbf{x}_i \) 는 문제에서 주어졌지만 코스테이트의 최종값 \( \mathbf{\lambda}_N \) 은 어떻게 계산할 수 있을까.

만약 시스템의 최종 상태변수가 정해지지 않고 계산되어야 한다면 \( d \mathbf{x}_N \ne 0 \) 이므로 경계조건 식 (9)를 이용할 수 있다. 식 (9)에 의하면,

 

\[ \mathbf{\lambda}_N = S_N \mathbf{x}_N +C^T \nu \tag{13} \]

 

이다. 만약 최종 상태변수에 관한 제약조건이 없다면 최적제어 유도 과정이 단순하지만 그렇지 않다면 식 (13) 때문에 제어법칙 유도 과정이 상당히 복잡해 진다. 만약 시스템의 최종 상태변수가 정해졌다면 \( d \mathbf{x}_N = 0 \) 이므로 식 (9)는 자동적으로 만족된다.

 

 

최종 상태변수를 계산해야 하는 문제를 자유최종상태(free-final-state) 문제라고 하고, 최종 상태변수가 정해진 문제를 고정최종상태(fixed-final-state) 문제라고 한다. 두 문제를 굳이 구별하는 이유는 두 문제에서 얻어지는 최적제어 법칙이 매우 다르기 때문이다. 자유최종상태 문제에서는 최적제어는 피드백(closed-loop) 제어로 산출되는 반면, 고정최종상태 문제에서는 최적제어가 오픈루프(open-loop) 제어로 산출된다.

 

 

 

댓글