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(*)의 솔버는 도함수를 사용하지 않으며 전역 최솟값을 탐색합니다.
| 제약 조건 유형 | 목적 함수 유형 | ||||||
|---|---|---|---|---|---|---|---|
| 선형 | 2차 | 최소제곱 | 일반적이고 매끄러움 | 일반적이고 매끄럽지 않음 | 다목적 | ||
| 없음 | quadprog |
lsqcurvefitlsqnonlinmldivide |
fminsearch |
fminsearch |
fgoalattain |
||
| 경계 | linprog |
quadprog |
lsqcurvefit |
fmincon |
surrogateopt |
fgoalattain |
|
| 선형 | linprog |
quadprog |
lsqlin |
fmincon |
patternsearchsurrogateopt |
fgoalattain |
|
| 2차 원뿔 | coneprog |
coneprog |
|||||
| 일반적이고 매끄러움 | fmincon |
fmincon |
fmincon |
fmincon |
patternsearchga |
fgoalattain |
|
| 일반적이고 매끄럽지 않음 | patternsearchsurrogateopt |
patternsearchsurrogateopt |
patternsearchsurrogateopt |
patternsearchsurrogateopt |
patternsearch |
paretosearch |
|
| 정수 | intlinprog |
ga |
|||||
3. 필요한 경우 초기점을 정의하고 원하는 경우 옵션을 정의합니다. 그런 다음 솔버를 호출하여 해를 구합니다.
| 옵션 |
|---|
예: opts = optimoptions('fmincon','Display','iter')
|
| 추가 작업 |
|---|
|