치트시트

MATLAB을 활용한 솔버 기반 최적화

최적화 및 최소제곱 문제와 비선형 연립방정식을 정의하고 풀 수 있습니다. 최적화 라이브 편집기 작업을 사용해 이 워크플로를 단계별로 진행할 수 있습니다.

1. 최적화 변수를 단일 벡터 \( x \)로 묶습니다. 목적 함수 및 제약 조건을 \( x \)를 기준으로 작성합니다.

목적 함수 유형 수학적 형식 예
선형 \( f^{T} x \) f = [-1 0 -5];
2차 \( x^{T}H x + f^{T} x \) H = [5 1 0; 1 3 0; 0 0 0];
최소제곱

\( \| Cx - d \|_2 \)

\( \sum F_i(x)^2 \)

C = [7 8 10; 1 3 4; 2 5 7];
d = [2; 1; 1.5];

function F = myF(x)
F(1) = f1(x);
F(2) = f2(x);
end
일반 \( f(x) \) function objval = fobj(x)
objval = 3*(x(1)-x(2))^4;
end
제약 조건 유형 수학적 형식 예
경계 \( l \leq x \leq u \) lb = zeros(n,1);
ub = 5*ones(n,1);
선형

\( A x \leq b \)

\( A_{eq} x = b_{eq} \)

A = [1 0 1; 0 -2 1];
b = [4; 2];
Aeq = [1 0 2];
beq = 1;
2차 원뿔 \( \| A_{sc} x - b_{sc} \| \leq d_{sc} x - \gamma \) A = diag([1,1/2,0]);
b = zeros(3,1);
d = [0;0;1];
gamma = 0;
socConstraints =
secondordercone(A,b,d,gamma);
일반

\( c(x) \leq 0 \)

\( c_{eq}(x) = 0 \)

function[c,ceq] = nlcons(x)
c(1) = x(1).^2 + x(2).^2 - 1;
c(2) = x(1)*x(3) - 5;
ceq = [];
end
정수 \( x_j \in \mathbb{Z}^n \) intcon = [1 2]

2. 목적 함수 및 제약 조건의 유형에 맞는 솔버를 선택합니다.

Optimization Toolbox™의 솔버는 도함수를 사용하므로 일반적으로 더 빠르며 대규모 문제에도 잘 확장됩니다. Global Optimization Toolbox(기울임꼴) 및 MATLAB(*)의 솔버는 도함수를 사용하지 않으며 전역 최솟값을 탐색합니다.

3. 필요한 경우 초기점을 정의하고 원하는 경우 옵션을 정의합니다. 그런 다음 솔버를 호출하여 해를 구합니다.

초기점

예:

x0 = lb + 0.5*(ub-lb)
x0 = zeros(n,1)

옵션

optimoptions를 사용해 중지 기준, 플롯, 함수, 초기 모집단 등을 설정할 수 있습니다.

예:

opts = optimoptions('fmincon','Display','iter')
풀기

예:

[x,fval] = fmincon(@fobj,x0,A,b,Aeq,beq,lb,ub,@nlcons,opts)
[x,fval,eflag] = ga(@fobj,nvars)
x = lsqlin(C,d,A,b,[],[],lb)

자세히 알아보기: