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

[Discrete-Time] 자유최종상태 (Free-final-state) LQR

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

다음과 같은 선형 시스템에 대해서

 

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

 

목적함수가 다음과 같이 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} \]

 

LQR 문제의 해는 다음과 같다. 여기서는 최종 상태변수에 관한 제약조건이 없다고 가정한다 (https://pasus.tistory.com/38).

 

\[ \begin{align} & \mathbf{x}_{t+1}=F_t \mathbf{x}_t+G_t \mathbf{u}_t \tag{3} \\ \\ & \mathbf{\lambda}_t = F_t^T \mathbf{\lambda}_{t+1} + Q_t \mathbf{x}_t \tag{4} \\ \\ & \mathbf{0} = G_t^T \mathbf{\lambda}_{t=1} + R_t \mathbf{u}_t \tag{5} \\ \\ & \mathbf{0} = \left( S_N \mathbf{x}_N - \mathbf{\lambda}_N \right) ^T d \mathbf{x}_N \tag{6} \end{align} \]

 

최적제어는 식 (5)로부터 다음과 같이 주어진다.

 

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

 

시스템의 최종 상태변수가 정해지지 않고 계산되어야 한다면, 즉 자유최종상태(free-final-state) 문제라면 \( d \mathbf{x}_N \ne 0 \) 이므로 최종 코스테이트(costate)는 시스템의 상태변수와 다음 관계식을 만족한다.

 

\[ \ \mathbf{\lambda}_N= S_N \mathbf{x}_N \tag{8} \]

 

이제, 자유최종상태 LQR 문제를 풀어보자.

 

 

식 (8)은 시간스텝 \( N \) 에서만 적용되지만, 모든 시간스텝 \( i \le t \le N \) 에서도 적용된다고 가정한다. 즉,

 

\[ \mathbf{\lambda}_t= S_t \mathbf{x}_t \tag{9} \]

 

만약 식 (9)를 만족하는 \( S_t \) 를 구할 수 있다면 이러한 가정은 유효할 것이다. 식 (9)를 식 (7)에 대입하고, 이를 식 (3)에 대입하면 다음식을 얻을 수 있다.

 

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

 

식 (10)을 \( \mathbf{x}_{t+1} \) 에 관해서 정리하면 다음과 같다.

 

\[ \mathbf{x}_{t+1}= \left( I+G_t R_t^{-1} G_t^T S_{t+1} \right)^{-1} F_t \mathbf{x}_t \tag{11} \]

 

이번에는 식 (9)를 식 (4)에 대입하면 다음식을 얻을 수 있다.

 

\[ S_t \mathbf{x}_t = F_t^T S_{t+1} \mathbf{x}_{t+1}+Q_t \mathbf{x}_t \tag{12} \]

 

식 (11)을 (12)에 대입하고 정리하면 다음과 같이 된다.

 

\[ S_t \mathbf{x}_t = F_t^T S_{t+1} \left( I+G_t R_t^{-1} G_t^T S_{t+1} \right) ^{-1} F_t \mathbf{x}_t + Q_t \mathbf{x}_t \tag{13} \]

 

위 식은 모든 \( \mathbf{x}_t \) 에 대해서 성립해야 하므로, 다음식이 얻어진다.

 

\[ S_t = F_t^T S_{t+1} \left( I+G_t R_t^{-1} G_t^T S_{t+1} \right)^{-1} F_t + Q_t \tag{14} \]

 

행렬 역변환 정리(matrix inversion lemma)에 의하면 식 (14)는 다음 식이 된다.

 

\[ S_t = F_t^T S_{t+1} \left[ I-G_t \left( R_t+G_t^T S_{t+1} G_t \right)^{-1} G_t^T S_{t+1} \right] F_t+Q_t \tag{15} \]

 

식 (15)는 시간적으로 역방향(backward)으로 풀 수 있는 식이다. 식 (15)의 오른쪽 항은 \( S_{t+1} \) 를 제외하고는 모두 문제에서 주어진 행렬이므로 \( S_{t+1} \) 만 알면 \( S_t \) 를 계산할 수 있다. 식 (8)을 통해서 식 (9)를 유추해 냈으므로 시간스텝 \( t=N \) 일 때 \( S_t \) 의 경계값은 최종 상태변수의 가중치 행렬인 \( S_N \) 이 된다. 따라서 식 (15)에 의해서 식 (9)가 타당한 가정임을 알 수 있다. 식 (15)를 리카티 방정식(Riccati equation)이라고 한다.

최종값 \( S_N \) 을 이용해서 시간적으로 역순으로 모든 시간스텝에서 \( S_t \) 를 계산할 수 있다. 그러면 식 (7)로 다음과 같이 최적제어를 계산할 수 있다.

 

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

 

시스템 운동인 식 (3)을 식 (16)에 대입하면,

 

\[ \mathbf{u}_t = -R_t^{-1} G_t^T S_{t+1} \left(F_t \mathbf{x}_t+G_t \mathbf{u}_t \right) \tag{17} \]

 

가 되고, 이 식을 정리하면 최종적으로 다음 식을 얻을 수 있다.

 

\[ \mathbf{u}_t= - \left( G_t^T S_{t+1} G_t+R_t \right)^{-1} G_t^T S_{t+1} F_t \mathbf{x}_t \tag{18} \]

 

여기서 LQ 게인 \( K_t \) 를 다음과 같이 정의하면,

 

\[ K_t= - \left( G_t^T S_{t+1} G_t+R_t \right)^{-1} G_t^T S_{t+1} F_t \tag{19} \]

 

최적제어는 다음과 같이 상태변수 피드백 제어의 형태가 된다.

 

\[ \mathbf{u}_t = K_t \mathbf{x}_t \tag{20} \]

 

LQ 게인은 상태변수에 비례하는 제어입력을 산출하는 비례 제어의 이득값이다. 식 (19)에 의하면 LQ 게인은 상태변수의 궤적과 무관하게 계산할 수 있다. 따라서 최적제어인 식 (20)을 시스템에 직접 적용하기 전에 미리 LQ 게인을 계산해서 저장해 놓을 수 있다. 그런 후 순차적으로 LQ 게인을 꺼내서 식 (14)로 최적제어 값을 계산해서 시스템에 인가하면 최적 궤적 시퀀스 \( \{ \mathbf{x}_i^*, \mathbf{x}_{i+1}^*, \cdots , \mathbf{x}_N^* \} \) 을 계산해 낼 수 있다.

 

 

요약하면, LQR은 최종 시간에서부터 역방향 시간으로 LQ 게인을 계산하는 역방향 패스(backward pass)와 순방향 시간으로 최적제어를 시스템에 적용하여 궤적을 계산하는 순방향 패스(forward pass)로 구성된다.

 

 

댓글