본 페이지에서는 MATLAB 상에서 활용 가능한 optimization을 계산하는 solver들인 quadprog, fmincon에 대한 (아주 간단한!) 실습 code를 제공합니다.

본 페이지에서 활용한 MATLAB code는 아래와 같습니다.

run_optimization_CICS_2022.m

본 페이지에서는 사용법 위주의 설명만 진행하고자 하며, function에 대한 보다 자세한 설명은 Mathworks 홈페이지의 documentation을 참고하세요.

예제 1 : quadprog

본 예제에서는 다음의 최적화 문제의 해를 quadprog를 이용하여 구하도록 합니다.

$$ \begin{split} \min ~~ & ~~ {\bf f}(x)=\frac{1}{2}x_1^2 + x_2^2 - x_1 x_2 - 2x_1 - 6x_2,\\ {\rm subject~to} ~~ & ~~ x_1 + x_2 \leq 2,\\ & ~~ -x_1 + 2x_2 \leq 2,\\ &~~ 2x_1 + x_2 \leq 3.\end{split} $$

위의 최적화 문제를 quadprog로 계산하기 위해서는, 우선 목적 함수와 제약 조건 부등식을 matrix-vector의 형태로 기술해야 합니다. 몇 가지 연산을 통해 각각을

$$ f(x)=\frac{1}{2}x^\top \begin{bmatrix} 1 & -1\\ -1 & 2\end{bmatrix} x + \begin{bmatrix} -2 \\ -6 \end{bmatrix}^\top x = \frac{1}{2}x^\top {\bf H} x + {\bf q}^\top x $$

$$ \begin{bmatrix} 1 & 1\\ -1 & 2\\ 2 & 1 \end{bmatrix}x = {\bf A}{\rm ineq} x \leq \begin{bmatrix} 2\\ 2\\ 3 \end{bmatrix} = {\bf b}{\rm ineq} $$

로 기술할 수 있습니다.

이제 위에서 정의된 matrix와 vector들을 MATLAB 상에서 다음과 같이 선언하고

HH = [1 -1; -1 2];
qq = [-2; -6];
AA_ineq = [1 1; -1 2; 2 1];
bb_ineq = [2; 2; 3];
AA_eq = [];
bb_eq = [];

quadprog를 다음과 같이 활용하여 최적해를 계산합니다.

[x_opt, ffval, exitflag] = quadprog(HH, qq, AA_ineq, bb_ineq, AA_eq, bb_eq);