본 페이지에서는 Linear MPC를 설계하는 다음의 code를 설명합니다.
Discrete-time system을 기술하기 위한 parameter를 다음과 같이 설정합니다.
A = 1.2;
B = 0.2;
dim_x = 1;
dim_u = 1;
param_sys = struct('A', A, 'B', B, 'dim_x', dim_x, 'dim_u', dim_u);
Linear MPC의 설계를 위해 필요한 parameter들을 정합니다.
Q = eye(dim_x)*1;
R = eye(dim_u)*1;
N = 6;
u_max = 1;
u_min = -1;
이어서 MPC의 finite-horizon optimal control problem을 QP의 형태로 바꾸기 위하여 다음의 code를 수행합니다. 이를 위해 계산해야 하는 matrix, vector들인 $\bf \Gamma$, ${\bf \Pi}$, ${\bf Q}$, ${\bf R}$을 다음과 같이 초기화하고,
Gamma = [];
Pi = [];
QQ = [];
RR = [];
다음의 for 문을 통해 위의 matrix들을 계산합니다.
for i = 1:N
% Compute Gamma
Gamma = [Gamma; A^i];
% Compute Pi
Pi_temp = [];
for j = 1:i
Pi_temp = [A^(j-1)*B Pi_temp];
end
Pi_temp = [Pi_temp zeros(dim_x,(N-i)*dim_u)];
Pi = [Pi; Pi_temp];
% Compute QQ
if i ~= N
QQ = blkdiag(QQ,Q);
else
QQ = blkdiag(QQ,zeros(dim_x, dim_x));
end
% Compute RR
RR = blkdiag(RR,R);
end
이제 QP를 구성하는 $\bf H$, ${\bf A}{\rm ineq}$, ${\bf b}{\rm ineq}$를 다음과 같이 계산합니다.
HH = RR + Pi'* QQ * Pi;
AA_ineq = [eye(N); -eye(N)];
bb_ineq = [kron(ones(N,1), u_max); -kron(ones(N,1), u_min)];
한편 QP의 목적 함수를 구성하는 ${\bf q} = {\bf \Pi}^\top {\bf Q} {\bf \Gamma} x(k)$의 경우 매 순간 system으로부터 state 정보를 받아와서 계산되어야 하기 때문에, off-line에서 계산할 수 없고 매 순간
qq = Pi' * QQ * Gamma * x_sys;
과 같이 on-line으로 계산해야 합니다.