본 페이지에서는 Linear MPC를 설계하는 다음의 code를 설명합니다.

run_LMPC_CICS_2022.m

문제 설정

Untitled

Code 설명 1 : Off-line 연산

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으로 계산해야 합니다.

Code 설명 2 : 모의 실험