Main Content

fmincon

제약 조건이 있는 비선형 다변수 함수의 최솟값 구하기

설명

비선형 계획법 솔버입니다.

다음으로 지정된 문제의 최솟값을 구합니다.

minxf(x) such that {c(x)0ceq(x)=0AxbAeqx=beqlbxub,

b와 beq는 벡터이고, A와 Aeq는 행렬이고, c(x)와 ceq(x)는 벡터를 반환하는 함수이고, f(x)는 스칼라를 반환하는 함수입니다. f(x), c(x), ceq(x)는 비선형 함수일 수 있습니다.

x, lb, ub는 벡터 또는 행렬로 전달될 수 있습니다. 행렬 인수 항목을 참조하십시오.

예제

x = fmincon(fun,x0,A,b)x0에서 시작하여 fun에 정의된 함수의 최소점 x를 구하려고 시도합니다. 여기에는 선형 부등식 A*x ≤ b가 적용됩니다. x0은 스칼라, 벡터 또는 행렬일 수 있습니다.

참고

추가 파라미터 전달하기에는 필요한 경우 추가 파라미터를 목적 함수와 비선형 제약 조건 함수에 전달하는 방법이 설명되어 있습니다.

예제

x = fmincon(fun,x0,A,b,Aeq,beq)fun을 최소화합니다. 여기에는 선형 등식 Aeq*x = beqA*x ≤ b가 적용됩니다. 부등식이 존재하지 않는 경우 A = []b = []을 설정하십시오.

예제

x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)는 해가 항상 범위 lb x ub 내에 있도록 설계 변수 x에 대한 하한 및 상한 집합을 정의합니다. 등식이 존재하지 않는 경우 Aeq = []beq = []을 설정하십시오. x(i)의 하한이 비유계인 경우 lb(i) = -Inf를 설정하고, x(i)의 상한이 비유계인 경우 ub(i) = Inf를 설정하십시오.

참고

문제에 대해 지정된 입력값 범위에 모순이 있는 경우 fmincon은 오류를 발생시킵니다. 이 경우, 출력값 xx0이 되고 fval[]이 됩니다.

디폴트 'interior-point' 알고리즘의 경우 fmincon은 범위 lb ≤ x ≤ ub를 위반하거나 범위의 경계값과 같은 x0의 성분을 범위 영역의 내부로 설정합니다. 'trust-region-reflective' 알고리즘의 경우 fmincon은 위반하는 성분을 범위 영역의 내부로 설정합니다. 다른 알고리즘의 경우 fmincon은 위반하는 성분을 가장 가까운 범위 경계로 설정합니다. 범위를 준수하는 성분은 변경되지 않습니다. 반복이 제약 조건을 위반할 수 있음 항목을 참조하십시오.

예제

x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)nonlcon에 정의된 비선형 부등식 c(x) 또는 등식 ceq(x)를 최소화에 적용합니다. fminconc(x) ≤ 0ceq(x) = 0 조건에서 최적화합니다. 범위가 존재하지 않는 경우 lb = [] 및/또는 ub = []을 설정하십시오.

예제

x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)options에 지정된 최적화 옵션을 사용하여 최소화합니다. 이 옵션을 설정하려면 optimoptions를 사용하십시오. 비선형 부등식 또는 등식 제약 조건이 없을 경우 nonlcon = []을 설정하십시오.

예제

x = fmincon(problem)problem에 설명되어 있는 구조체인 problem의 최솟값을 구합니다.

예제

[x,fval] = fmincon(___)은 모든 구문에서 해 x에서의 목적 함수 fun의 값을 반환합니다.

예제

[x,fval,exitflag,output] = fmincon(___)fmincon의 종료 상황을 설명하는 값 exitflag와 최적화 과정에 대한 정보가 포함된 구조체 output을 추가로 반환합니다.

예제

[x,fval,exitflag,output,lambda,grad,hessian] = fmincon(___)은 추가로 다음을 반환합니다.

  • lambda — 해 x에서의 라그랑주 승수를 포함하는 필드를 갖는 구조체입니다.

  • grad — 해 x에서의 fun의 기울기입니다.

  • hessian — 해 x에서의 fun의 헤세 행렬입니다. fmincon 헤세 행렬 항목을 참조하십시오.

예제

모두 축소

선형 부등식 제약 조건이 있는 경우 로젠브록 함수(Rosenbrock Function)의 최솟값을 구합니다.

목적 함수 fun을 로젠브록 함수로 설정합니다. 로젠브록 함수는 최소화하기 어려운 것으로 잘 알려져 있습니다. 이 함수는 점 (1,1)에서 최소 목적 함수 값 0을 가집니다. 자세한 내용은 최적화 라이브 편집기 작업 또는 솔버를 사용한, 제약 조건이 있는 비선형 문제 항목을 참조하십시오.

fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;

x(1)+2x(2)1을 충족하도록 규정하는 제약 조건이 있는 상태로 점 [-1,2]에서 시작하여 최솟값을 구합니다. A = [1,2]b = 1을 사용하여 Ax <= b 형식으로 이 제약 조건을 나타냅니다. 이 제약 조건은 제약 조건이 없을 때의 해 (1,1)은 이 문제의 해가 될 수 없음을 의미합니다. 그 이유는 이 점에서는 x(1)+2x(2)=3>1이 되기 때문입니다.

x0 = [-1,2];
A = [1,2];
b = 1;
x = fmincon(fun,x0,A,b)
Local minimum found that satisfies the constraints.

Optimization completed because the objective function is non-decreasing in 
feasible directions, to within the value of the optimality tolerance,
and constraints are satisfied to within the value of the constraint tolerance.
x = 1×2

    0.5022    0.2489

선형 부등식 제약 조건과 선형 등식 제약 조건이 모두 있는 경우 로젠브록 함수(Rosenbrock Function)의 최솟값을 구합니다.

목적 함수 fun을 로젠브록 함수로 설정합니다.

fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;

x(1)+2x(2)12x(1)+x(2)=1을 충족하도록 규정하는 제약 조건이 있는 상태로 점 [0.5,0]에서 시작하여 최솟값을 구합니다.

  • A = [1,2]b = 1을 사용하여 A*x <= b 형식으로 선형 부등식 제약 조건을 나타냅니다.

  • Aeq = [2,1]beq = 1을 사용하여 Aeq*x = beq 형식으로 선형 등식 제약 조건을 나타냅니다.

x0 = [0.5,0];
A = [1,2];
b = 1;
Aeq = [2,1];
beq = 1;
x = fmincon(fun,x0,A,b,Aeq,beq)
Local minimum found that satisfies the constraints.

Optimization completed because the objective function is non-decreasing in 
feasible directions, to within the value of the optimality tolerance,
and constraints are satisfied to within the value of the constraint tolerance.
x = 1×2

    0.4149    0.1701

범위 제약 조건이 있는 상태에서 목적 함수의 최솟값을 구합니다.

목적 함수는 두 개의 변수로 구성된 단순한 대수 함수입니다.

fun = @(x)1+x(1)/(1+x(2)) - 3*x(1)*x(2) + x(2)*(1+x(1));

xx(1) 1x(2) 2를 충족하는 양수 값을 갖는 영역을 살펴봅니다.

lb = [0,0];
ub = [1,2];

문제에 선형 제약 조건이 없으므로 관련 인수를 []로 설정합니다.

A = [];
b = [];
Aeq = [];
beq = [];

초기점으로 영역의 가운데 점을 사용해 봅니다.

x0 = (lb + ub)/2;

문제를 풉니다.

x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
Local minimum found that satisfies the constraints.

Optimization completed because the objective function is non-decreasing in 
feasible directions, to within the value of the optimality tolerance,
and constraints are satisfied to within the value of the constraint tolerance.
x = 1×2

    1.0000    2.0000

초기점마다 각각 다른 해가 생성될 수 있습니다.

x0 = x0/5;
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
Local minimum found that satisfies the constraints.

Optimization completed because the objective function is non-decreasing in 
feasible directions, to within the value of the optimality tolerance,
and constraints are satisfied to within the value of the constraint tolerance.
x = 1×2
10-6 ×

    0.4000    0.4000

어느 해가 더 적합한지 확인하려면 목적 함수 값 구하기 항목을 참조하십시오.

비선형 제약 조건을 적용하여 함수의 최솟값을 구합니다.

로젠브록 함수(Rosenbrock Function)가 원 내에서 최소화되는 점을 찾습니다. 여기에는 범위 제약 조건도 적용됩니다.

fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;

$0 \le x(1) \le 0.5$, $0.2 \le x(2) \le 0.8$을 충족하는 영역 내부를 살펴봅니다.

lb = [0,0.2];
ub = [0.5,0.8];

또한, 반지름이 1/3이며 중심이 [1/3,1/3]인 원 내부도 살펴봅니다. 다음 코드를 MATLAB® 경로에 있는 circlecon.m이라는 파일로 복사합니다.


% Copyright 2015 The MathWorks, Inc.

function [c,ceq] = circlecon(x)
c = (x(1)-1/3)^2 + (x(2)-1/3)^2 - (1/3)^2;
ceq = [];

선형 제약 조건이 없으므로 관련 인수를 []로 설정합니다.

A = [];
b = [];
Aeq = [];
beq = [];

모든 제약 조건을 충족하는 초기점을 선택합니다.

x0 = [1/4,1/4];

문제를 풉니다.

nonlcon = @circlecon;
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
Local minimum found that satisfies the constraints.

Optimization completed because the objective function is non-decreasing in 
feasible directions, to within the value of the optimality tolerance,
and constraints are satisfied to within the value of the constraint tolerance.


x =

    0.5000    0.2500

다른 알고리즘을 사용하고 반복이 발생할 때마다 반복 상태를 표시하도록 옵션을 설정합니다.

fmincon 풀이 과정을 관찰하기 위해 Display 옵션을 'iter'로 설정합니다. 또한, 'sqp' 알고리즘을 사용해 봅니다. 때때로 이 알고리즘이 디폴트 'interior-point' 알고리즘보다 더 빠르거나 정확할 수 있습니다.

options = optimoptions('fmincon','Display','iter','Algorithm','sqp');

단위 원판 ||x||21에 대한 로젠브록 함수의 최솟값을 구합니다. 먼저, 비선형 제약 조건을 나타내는 함수를 만듭니다. 이 함수를 MATLAB® 경로에 unitdisk.m이라는 파일로 저장합니다.

type unitdisk.m
function [c,ceq] = unitdisk(x)
c = x(1)^2 + x(2)^2 - 1;
ceq = [];

나머지 문제 사양을 만듭니다. 그런 후 fmincon을 실행합니다.

fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
A = [];
b = [];
Aeq = [];
beq = [];
lb = [];
ub = [];
nonlcon = @unitdisk;
x0 = [0,0];
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
 Iter  Func-count            Fval   Feasibility   Step Length       Norm of   First-order  
                                                                       step    optimality
    0           3    1.000000e+00     0.000e+00     1.000e+00     0.000e+00     2.000e+00  
    1          12    8.913011e-01     0.000e+00     1.176e-01     2.353e-01     1.107e+01  
    2          22    8.047847e-01     0.000e+00     8.235e-02     1.900e-01     1.330e+01  
    3          28    4.197517e-01     0.000e+00     3.430e-01     1.217e-01     6.172e+00  
    4          31    2.733703e-01     0.000e+00     1.000e+00     5.254e-02     5.705e-01  
    5          34    2.397111e-01     0.000e+00     1.000e+00     7.498e-02     3.164e+00  
    6          37    2.036002e-01     0.000e+00     1.000e+00     5.960e-02     3.106e+00  
    7          40    1.164353e-01     0.000e+00     1.000e+00     1.459e-01     1.059e+00  
    8          43    1.161753e-01     0.000e+00     1.000e+00     1.754e-01     7.383e+00  
    9          46    5.901601e-02     0.000e+00     1.000e+00     1.547e-02     7.278e-01  
   10          49    4.533081e-02     2.898e-03     1.000e+00     5.393e-02     1.252e-01  
   11          52    4.567454e-02     2.225e-06     1.000e+00     1.492e-03     1.679e-03  
   12          55    4.567481e-02     4.424e-12     1.000e+00     2.095e-06     1.501e-05  
   13          58    4.567481e-02     0.000e+00     1.000e+00     2.212e-12     1.406e-05  

Local minimum possible. Constraints satisfied.

fmincon stopped because the size of the current step is less than
the value of the step size tolerance and constraints are 
satisfied to within the value of the constraint tolerance.
x = 1×2

    0.7864    0.6177

반복 과정 표시 화면에 대한 세부 정보는 반복 과정 표시 항목을 참조하십시오.

더욱 빠르거나 더욱 안정적인 계산을 위해 목적 함수에 기울기 계산을 포함시킵니다.

목적 함수 파일에 조건화된 출력값으로 기울기 계산을 포함시킵니다. 자세한 내용은 기울기와 헤세 행렬 포함시키기 항목을 참조하십시오. 목적 함수는 다음과 같은 로젠브록 함수(Rosenbrock Function)이며,

$$ f(x) = 100{\left( {{x_2} - x_1^2} \right)^2} +&#10;{(1 - {x_1})^2},$$

기울기는 다음과 같습니다.

$$\nabla f(x) = \left[ {\begin{array}{*{20}{c}}&#10;{ - 400\left( {{x_2} - x_1^2} \right){x_1} - 2\left( {1 - {x_1}} \right)}\\&#10;{200\left( {{x_2} - x_1^2} \right)}&#10;\end{array}} \right].$$

function [f,g] = rosenbrockwithgrad(x)
% Calculate objective f
f = 100*(x(2) - x(1)^2)^2 + (1-x(1))^2;

if nargout > 1 % gradient required
    g = [-400*(x(2)-x(1)^2)*x(1)-2*(1-x(1));
        200*(x(2)-x(1)^2)];
end

이 코드를 MATLAB® 경로에 rosenbrockwithgrad.m이라는 파일로 저장합니다.

목적 함수 기울기를 사용하도록 옵션을 만듭니다.

options = optimoptions('fmincon','SpecifyObjectiveGradient',true);

문제에 대한 그 밖의 입력값을 만듭니다. 그런 다음, fmincon을 호출합니다.

fun = @rosenbrockwithgrad;
x0 = [-1,2];
A = [];
b = [];
Aeq = [];
beq = [];
lb = [-2,-2];
ub = [2,2];
nonlcon = [];
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
Local minimum found that satisfies the constraints.

Optimization completed because the objective function is non-decreasing in 
feasible directions, to within the value of the optimality tolerance,
and constraints are satisfied to within the value of the constraint tolerance.


x =

    1.0000    1.0000

개별 인수 대신 문제 구조체를 사용하여 디폴트가 아닌 옵션에 나와 있는 것과 동일한 문제를 풉니다.

옵션과 문제 구조체를 만듭니다. 필드 이름과 필수 필드는 problem 항목을 참조하십시오.

options = optimoptions('fmincon','Display','iter','Algorithm','sqp');
problem.options = options;
problem.solver = 'fmincon';
problem.objective = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
problem.x0 = [0,0];

비선형 제약 조건 함수 unitdisk이 예제의 마지막 부분에 나와 있습니다. problem에 비선형 제약 조건 함수를 포함시킵니다.

problem.nonlcon = @unitdisk;

문제를 풉니다.

x = fmincon(problem)
 Iter  Func-count            Fval   Feasibility   Step Length       Norm of   First-order  
                                                                       step    optimality
    0           3    1.000000e+00     0.000e+00     1.000e+00     0.000e+00     2.000e+00  
    1          12    8.913011e-01     0.000e+00     1.176e-01     2.353e-01     1.107e+01  
    2          22    8.047847e-01     0.000e+00     8.235e-02     1.900e-01     1.330e+01  
    3          28    4.197517e-01     0.000e+00     3.430e-01     1.217e-01     6.172e+00  
    4          31    2.733703e-01     0.000e+00     1.000e+00     5.254e-02     5.705e-01  
    5          34    2.397111e-01     0.000e+00     1.000e+00     7.498e-02     3.164e+00  
    6          37    2.036002e-01     0.000e+00     1.000e+00     5.960e-02     3.106e+00  
    7          40    1.164353e-01     0.000e+00     1.000e+00     1.459e-01     1.059e+00  
    8          43    1.161753e-01     0.000e+00     1.000e+00     1.754e-01     7.383e+00  
    9          46    5.901601e-02     0.000e+00     1.000e+00     1.547e-02     7.278e-01  
   10          49    4.533081e-02     2.898e-03     1.000e+00     5.393e-02     1.252e-01  
   11          52    4.567454e-02     2.225e-06     1.000e+00     1.492e-03     1.679e-03  
   12          55    4.567481e-02     4.424e-12     1.000e+00     2.095e-06     1.501e-05  
   13          58    4.567481e-02     0.000e+00     1.000e+00     2.212e-12     1.406e-05  

Local minimum possible. Constraints satisfied.

fmincon stopped because the size of the current step is less than
the value of the step size tolerance and constraints are 
satisfied to within the value of the constraint tolerance.
x = 1×2

    0.7864    0.6177

반복 과정 표시와 해는 디폴트가 아닌 옵션에서와 같습니다.

다음 코드는 unitdisk 함수를 생성합니다.

function [c,ceq] = unitdisk(x)
c = x(1)^2 + x(2)^2 - 1;
ceq = [];
end

fval 출력값을 사용하여 fmincon을 호출함으로써 해에서의 목적 함수 값을 구합니다.

범위 제약 조건이 있는 경우 최소화하기 예제에서는 두 개의 해를 보여줍니다. 어느 것이 더 적합한가요? fval 출력값과 해를 요청하는 예제를 실행합니다.

fun = @(x)1+x(1)./(1+x(2)) - 3*x(1).*x(2) + x(2).*(1+x(1));
lb = [0,0];
ub = [1,2];
A = [];
b = [];
Aeq = [];
beq = [];
x0 = (lb + ub)/2;
[x,fval] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
Local minimum found that satisfies the constraints.

Optimization completed because the objective function is non-decreasing in 
feasible directions, to within the value of the optimality tolerance,
and constraints are satisfied to within the value of the constraint tolerance.
x = 1×2

    1.0000    2.0000

fval = -0.6667

다른 시작점 x0을 사용하여 문제를 실행합니다.

x0 = x0/5;
[x2,fval2] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
Local minimum found that satisfies the constraints.

Optimization completed because the objective function is non-decreasing in 
feasible directions, to within the value of the optimality tolerance,
and constraints are satisfied to within the value of the constraint tolerance.
x2 = 1×2
10-6 ×

    0.4000    0.4000

fval2 = 1.0000

이 해는 목적 함수 값 fval2 = 1을 가집니다. 이는 첫 번째 값 fval = –0.6667보다 더 높습니다. 첫 번째 해 x가 더 낮은 극소 목적 함수 값을 가집니다.

exitflag 출력값과 output 출력값을 요청하면 해의 품질을 손쉽게 검토할 수 있습니다.

단위 원판 $||x||^2 \le 1$에 대해 로젠브록 함수를 최소화하는 문제를 설정합니다. 먼저, 비선형 제약 조건을 나타내는 함수를 만듭니다. 이 함수를 MATLAB® 경로에 unitdisk.m이라는 파일로 저장합니다.

function [c,ceq] = unitdisk(x)
c = x(1)^2 + x(2)^2 - 1;
ceq = [];

나머지 문제 사양을 만듭니다.

fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
nonlcon = @unitdisk;
A = [];
b = [];
Aeq = [];
beq = [];
lb = [];
ub = [];
x0 = [0,0];

fval, exitflag, output 출력값을 사용하여 fmincon을 호출합니다.

[x,fval,exitflag,output] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
Local minimum found that satisfies the constraints.

Optimization completed because the objective function is non-decreasing in 
feasible directions, to within the value of the optimality tolerance,
and constraints are satisfied to within the value of the constraint tolerance.


x =

    0.7864    0.6177


fval =

    0.0457


exitflag =

     1


output = 

  struct with fields:

         iterations: 24
          funcCount: 84
    constrviolation: 0
           stepsize: 6.9162e-06
          algorithm: 'interior-point'
      firstorderopt: 2.4373e-08
       cgiterations: 4
            message: 'Local minimum found that satisfies the constraints....'
       bestfeasible: [1x1 struct]

  • exitflag1은 해가 국소 최솟값이라는 것을 나타냅니다.

  • output 구조체는 풀이 과정에 대한 여러 통계량을 보고합니다. 특히, output.iterations에 반복 횟수, output.funcCount에 함수 실행 횟수, output.constrviolation에 실현가능성을 제공합니다.

fmincon은 보고된 해를 분석하는 데 사용할 수 있는 여러 출력값을 선택적으로 반환합니다.

단위 원판에 대해 로젠브록 함수(Rosenbrock Function)를 최소화하는 문제를 설정합니다. 먼저, 비선형 제약 조건을 나타내는 함수를 만듭니다. 이 함수를 MATLAB® 경로에 unitdisk.m이라는 파일로 저장합니다.

function [c,ceq] = unitdisk(x)
c = x(1)^2 + x(2)^2 - 1;
ceq = [];

나머지 문제 사양을 만듭니다.

fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
nonlcon = @unitdisk;
A = [];
b = [];
Aeq = [];
beq = [];
lb = [];
ub = [];
x0 = [0,0];

모든 fmincon 출력값을 요청합니다.

[x,fval,exitflag,output,lambda,grad,hessian] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
Local minimum found that satisfies the constraints.

Optimization completed because the objective function is non-decreasing in 
feasible directions, to within the value of the optimality tolerance,
and constraints are satisfied to within the value of the constraint tolerance.


x =

    0.7864    0.6177


fval =

    0.0457


exitflag =

     1


output = 

  struct with fields:

         iterations: 24
          funcCount: 84
    constrviolation: 0
           stepsize: 6.9162e-06
          algorithm: 'interior-point'
      firstorderopt: 2.4373e-08
       cgiterations: 4
            message: 'Local minimum found that satisfies the constraints....'
       bestfeasible: [1x1 struct]


lambda = 

  struct with fields:

         eqlin: [0x1 double]
      eqnonlin: [0x1 double]
       ineqlin: [0x1 double]
         lower: [2x1 double]
         upper: [2x1 double]
    ineqnonlin: 0.1215


grad =

   -0.1911
   -0.1501


hessian =

  497.2903 -314.5589
 -314.5589  200.2392

  • lambda.ineqnonlin 출력값은 비선형 제약 조건이 해에서 활성 상태라는 것을 보여주고 연결된 라그랑주 승수의 값을 제공합니다.

  • grad 출력값은 해 x에서의 목적 함수의 기울기 값을 제공합니다.

  • hessian 출력값은 fmincon 헤세 행렬에 설명되어 있습니다.

입력 인수

모두 축소

최소화할 함수로, 함수 핸들이나 함수 이름으로 지정됩니다. fun은 벡터 또는 배열 x를 받고 실수형 스칼라 f를 반환하는 함수입니다. 즉, x에서 계산되는 목적 함수입니다.

fmincon 함수는 xx0 인수 형태로 목적 함수와 비선형 제약 조건 함수에 전달합니다. 예를 들어, x0이 5×3 배열이면 fmincon 함수는 x를 5×3 배열로 fun에 전달합니다. fmincon 함수는 x를 열 벡터 x(:)로 변환한 후 선형 제약 조건 행렬 A 또는 Aeqx를 곱합니다.

다음과 같이 fun을 파일에 대한 함수 핸들로 지정합니다.

x = fmincon(@myfun,x0,A,b)

여기서 myfun은 다음과 같은 MATLAB® 함수입니다.

function f = myfun(x)
f = ...            % Compute function value at x

다음과 같이 fun을 익명 함수에 대한 함수 핸들로 지정할 수도 있습니다.

x = fmincon(@(x)norm(x)^2,x0,A,b);

fun의 기울기를 계산할 수 있고 다음 설정처럼 SpecifyObjectiveGradient 옵션이 true로 설정된 경우

options = optimoptions('fmincon','SpecifyObjectiveGradient',true)
fun은 두 번째 출력 인수에 기울기 벡터 g(x)를 반환해야 합니다.

헤세 행렬도 계산할 수 있고 optimoptions를 통해 HessianFcn 옵션이 'objective'로 설정되어 있고 Algorithm 옵션이 'trust-region-reflective'인 경우, fun은 세 번째 출력 인수에 대칭 행렬인 헤세 행렬 값 H(x)를 반환해야 합니다. fun은 희소 헤세 행렬을 제공할 수 있습니다. 자세한 내용은 fminunc의 trust-region 알고리즘 또는 fmincon의 trust-region-reflective 알고리즘에 대한 헤세 행렬 항목을 참조하십시오.

헤세 행렬도 계산할 수 있고 Algorithm 옵션이 'interior-point'로 설정된 경우, 헤세 행렬을 fmincon에 전달할 수 있는 다른 방법이 있습니다. 자세한 내용은 fmincon의 interior-point 알고리즘에 대한 헤세 행렬 항목을 참조하십시오. Symbolic Math Toolbox™를 사용하여 기울기와 헤세 행렬을 계산하는 예제는 Calculate Gradients and Hessians Using Symbolic Math Toolbox 항목을 참조하십시오.

interior-point 알고리즘과 trust-region-reflective 알고리즘을 사용하면 헤세 행렬의 곱셈 함수를 제공할 수 있습니다. 이 함수는 헤세 행렬을 직접 계산하지 않고 헤세 행렬과 벡터의 곱에 대한 결과를 제공합니다. 따라서 메모리를 절약할 수 있습니다. 헤세 행렬의 곱셈 함수 항목을 참조하십시오.

예: fun = @(x)sin(x(1))*cos(x(2))

데이터형: char | function_handle | string

초기점으로, 실수형 벡터나 실수형 배열로 지정됩니다. 솔버는 x0의 요소 개수와 이 인수의 크기를 사용하여 fun이 받는 변수의 개수와 크기를 확인합니다.

  • 'interior-point' 알고리즘 — HonorBounds 옵션이 true(디폴트 값)인 경우, fmincon은 범위 경계 lb 또는 ub에 있거나 그 외부에 있는 x0 성분을 범위 내에 엄밀히 속하는 값으로 재설정합니다.

  • 'trust-region-reflective' 알고리즘 — fmincon은 실현 가능하지 않은 x0 성분을 범위 또는 선형 등식에 대해 실현 가능하도록 재설정합니다.

  • 'sqp', 'sqp-legacy', 'active-set' 알고리즘 — fmincon은 범위 외부에 있는 x0 성분을 대응하는 범위의 값으로 재설정합니다.

예: x0 = [1,2,3,4]

데이터형: double

선형 부등식 제약 조건으로, 실수 행렬로 지정됩니다. AM×N 행렬입니다. 여기서 M은 부등식 개수이고 N은 변수 개수(x0의 요소 개수)입니다. 대규모 문제의 경우, A를 희소 행렬로 전달하십시오.

A는 다음과 같이 M개의 선형 부등식을 인코딩합니다.

A*x <= b,

여기서 xN개의 변수 x(:)으로 구성된 열 벡터이고, bM개의 요소를 갖는 열 벡터입니다.

예를 들어, 다음 부등식을 살펴보겠습니다.

x1 + 2x2 ≤ 10
3x1 + 4x2 ≤ 20
5x1 + 6x2 ≤ 30,

다음 제약 조건을 입력하여 부등식을 지정합니다.

A = [1,2;3,4;5,6];
b = [10;20;30];

예: x 성분의 합이 1 이하가 되도록 지정하려면 A = ones(1,N)b = 1을 사용하십시오.

데이터형: double

선형 부등식 제약 조건으로, 실수 벡터로 지정됩니다. bA 행렬과 관련된, 요소를 M개 가진 벡터입니다. b를 행 벡터로 전달하면 솔버는 내부적으로 b를 열 벡터 b(:)으로 변환합니다. 대규모 문제의 경우, b를 희소 벡터로 전달하십시오.

b는 다음과 같이 M개의 선형 부등식을 인코딩합니다.

A*x <= b,

여기서 xN개의 변수 x(:)으로 구성된 열 벡터이고, A는 크기가 M×N인 행렬입니다.

예를 들어, 다음 부등식을 살펴보겠습니다.

x1 + 2x2 ≤ 10
3x1 + 4x2 ≤ 20
5x1 + 6x2 ≤ 30.

다음 제약 조건을 입력하여 부등식을 지정합니다.

A = [1,2;3,4;5,6];
b = [10;20;30];

예: x 성분의 합이 1 이하가 되도록 지정하려면 A = ones(1,N)b = 1을 사용하십시오.

데이터형: double

선형 등식 제약 조건으로, 실수 행렬로 지정됩니다. AeqMe×N 행렬입니다. 여기서 Me는 부등식 개수이고 N은 변수 개수(x0의 요소 개수)입니다. 대규모 문제의 경우, Aeq를 희소 행렬로 전달하십시오.

Aeq는 다음과 같이 Me개의 선형 등식을 인코딩합니다.

Aeq*x = beq,

여기서 xN개의 변수 x(:)으로 구성된 열 벡터이고, beqMe개의 요소를 갖는 열 벡터입니다.

예를 들어, 다음 부등식을 살펴보겠습니다.

x1 + 2x2 + 3x3 = 10
2x1 + 4x2 + x3 = 20,

다음 제약 조건을 입력하여 부등식을 지정합니다.

Aeq = [1,2,3;2,4,1];
beq = [10;20];

예: x 성분의 합이 1이 되도록 지정하려면 Aeq = ones(1,N)beq = 1을 사용하십시오.

데이터형: double

선형 등식 제약 조건으로, 실수 벡터로 지정됩니다. beqAeq 행렬과 관련된, 요소를 Me개 가진 벡터입니다. beq를 행 벡터로 전달하면 솔버는 내부적으로 beq를 열 벡터 beq(:)으로 변환합니다. 대규모 문제의 경우, beq를 희소 벡터로 전달하십시오.

beq는 다음과 같이 Me개의 선형 등식을 인코딩합니다.

Aeq*x = beq,

여기서 xN개의 변수 x(:)으로 구성된 열 벡터이고, Aeq는 크기가 Me×N인 행렬입니다.

예를 들어, 다음 등식을 살펴보겠습니다.

x1 + 2x2 + 3x3 = 10
2x1 + 4x2 + x3 = 20.

다음 제약 조건을 입력하여 등식을 지정합니다.

Aeq = [1,2,3;2,4,1];
beq = [10;20];

예: x 성분의 합이 1이 되도록 지정하려면 Aeq = ones(1,N)beq = 1을 사용하십시오.

데이터형: double

하한으로, 실수형 벡터나 실수형 배열로 지정됩니다. x0의 요소 개수가 lb의 요소 개수와 같은 경우 lb는 다음을 지정합니다.

모든 i에 대해 x(i) >= lb(i)

numel(lb) < numel(x0)이면 lb는 다음을 지정합니다.

1 <= i <= numel(lb)에 대해

x(i) >= lb(i)

lb의 요소 개수가 x0의 요소 개수보다 적으면 솔버가 경고를 발생시킵니다.

예: 모든 x 성분이 양수가 되도록 지정하려면 lb = zeros(size(x0))을 사용하십시오.

데이터형: double

상한으로, 실수형 벡터나 실수형 배열로 지정됩니다. x0의 요소 개수가 ub의 요소 개수와 같은 경우 ub는 다음을 지정합니다.

모든 i에 대해 x(i) <= ub(i)

numel(ub) < numel(x0)이면 ub는 다음을 지정합니다.

1 <= i <= numel(ub)에 대해

x(i) <= ub(i)

ub의 요소 개수가 x0의 요소 개수보다 적으면 솔버가 경고를 발생시킵니다.

예: 모든 x 성분이 1보다 작도록 지정하려면 ub = ones(size(x0))을 사용하십시오.

데이터형: double

비선형 제약 조건으로, 함수 핸들 또는 함수 이름으로 지정됩니다. nonlcon은 벡터 또는 배열 x를 받고 두 개의 배열 c(x)ceq(x)를 반환하는 함수입니다.

  • c(x)x의 비선형 부등식 제약 조건으로 구성된 배열입니다. fmincon은 다음을 충족하려고 시도합니다.

    모든 c 요소에 대해 c(x) <= 0.

  • ceq(x)x의 비선형 등식 제약 조건으로 구성된 배열입니다. fmincon은 다음을 충족하려고 시도합니다.

    모든 ceq 요소에 대해 ceq(x) = 0.

예를 들면 다음을 입력합니다.

x = fmincon(@myfun,x0,A,b,Aeq,beq,lb,ub,@mycon)

여기서 mycon은 다음과 같은 MATLAB 함수입니다.

function [c,ceq] = mycon(x)
c = ...     % Compute nonlinear inequalities at x.
ceq = ...   % Compute nonlinear equalities at x.
제약 조건의 기울기도 계산할 수 있고 다음 설정처럼 SpecifyConstraintGradient 옵션이 true인 경우
options = optimoptions('fmincon','SpecifyConstraintGradient',true)
nonlcon은 세 번째 출력 인수와 네 번째 출력 인수로 c(x)의 기울기 GCceq(x)의 기울기 GCeq도 반환해야 합니다. GCGCeq는 희소 또는 조밀 형식일 수 있습니다. GC 또는 GCeq가 대규모이고 0이 아닌 요소가 상대적으로 적은 경우 이러한 요소를 희소 행렬로 나타내면 interior-point 알고리즘에서 실행 시간과 메모리를 절약할 수 있습니다. 자세한 내용은 비선형 제약 조건 항목을 참조하십시오.

데이터형: char | function_handle | string

최적화 옵션으로, optimoptions의 출력값 또는 optimset 등이 반환하는 구조체로 지정됩니다.

옵션에 따라 모든 알고리즘에 적용되는 옵션이 있고 특정 알고리즘에만 유효한 옵션이 있습니다. 자세한 내용은 최적화 옵션 참조 항목을 참조하십시오.

일부 옵션은 optimoptions 표시에 나타나지 않습니다. 이러한 옵션은 다음 표에서 기울임꼴로 표시되어 있습니다. 자세한 내용은 최적화 옵션 보기 항목을 참조하십시오.

모든 알고리즘
Algorithm

다음 최적화 알고리즘을 선택합니다.

  • 'interior-point'(디폴트 값)

  • 'trust-region-reflective'

  • 'sqp'

  • 'sqp-legacy'(optimoptions만 해당)

  • 'active-set'

알고리즘을 선택하는 방법에 대한 자세한 내용은 알고리즘 선택하기 항목을 참조하십시오.

trust-region-reflective 알고리즘에는 다음이 필요합니다.

  • 기울기. 목적 함수에 제공되어야 합니다.

  • SpecifyObjectiveGradient. true로 설정되어야 합니다.

  • 범위 제약 조건 및 선형 등식 제약 조건 중 하나

'trust-region-reflective' 알고리즘을 선택할 때 이러한 조건이 모두 충족되지 않을 경우 fmincon이 오류를 발생시킵니다.

'active-set', 'sqp-legacy', 'sqp' 알고리즘은 대규모 알고리즘이 아닙니다. 대규모 알고리즘과 중간 규모 알고리즘 비교 항목을 참조하십시오.

CheckGradients

사용자 제공 도함수(목적 함수 또는 제약 조건의 기울기)를 유한 차분 도함수와 비교합니다. false(디폴트 값) 또는 true를 선택할 수 있습니다.

optimset의 경우, 이 이름은 DerivativeCheck이고 값은 'on' 또는 'off'입니다. 현재 옵션 이름과 이전 옵션 이름 항목을 참조하십시오.

CheckGradients 옵션은 향후 릴리스에서 제거될 예정입니다. 도함수를 검사하려면 checkGradients 함수를 사용하십시오.

ConstraintTolerance

제약 조건 위반에 대한 허용오차로, 양의 스칼라입니다. 디폴트 값은 1e-6입니다. 허용오차와 중지 기준 항목을 참조하십시오.

optimset의 경우, 이 이름은 TolCon입니다. 현재 옵션 이름과 이전 옵션 이름 항목을 참조하십시오.

Diagnostics

최소화하거나 풀려는 함수에 대한 진단 정보를 표시합니다. 'off'(디폴트 값) 또는 'on'을 선택할 수 있습니다.

DiffMaxChange

유한 차분 기울기에 대한 변수의 최대 변화량입니다(양의 스칼라). 디폴트 값은 Inf입니다.

DiffMinChange

유한 차분 기울기에 대한 변수의 최소 변화량입니다(양의 스칼라). 디폴트 값은 0입니다.

Display

표시 수준입니다(반복 과정 표시 참조):

  • 'off' 또는 'none'은 출력값을 표시하지 않습니다.

  • 'iter'는 각 반복마다 출력값을 표시하고 디폴트 종료 메시지를 제공합니다.

  • 'iter-detailed'는 각 반복마다 출력값을 표시하고 기술적인 종료 메시지를 제공합니다.

  • 'notify'는 함수가 수렴하지 않는 경우에만 출력값을 표시하고 디폴트 종료 메시지를 제공합니다.

  • 'notify-detailed'는 함수가 수렴하지 않는 경우에만 출력값을 표시하고 기술적인 종료 메시지를 제공합니다.

  • 'final'(디폴트 값)은 최종 출력값만 표시하고 디폴트 종료 메시지를 제공합니다.

  • 'final-detailed'는 최종 출력값만 표시하고 기술적인 종료 메시지를 제공합니다.

FiniteDifferenceStepSize

유한 차분에 대한 스칼라 또는 벡터 스텝 크기 인자입니다. FiniteDifferenceStepSize를 벡터 v로 설정하는 경우 전향 유한 차분 delta는 다음과 같습니다.

delta = v.*sign′(x).*max(abs(x),TypicalX);

여기서 sign′(x) = sign(x)입니다(단, sign′(0) = 1임). 중심 유한 차분은 다음과 같습니다.

delta = v.*max(abs(x),TypicalX);

스칼라 FiniteDifferenceStepSize는 벡터로 확장됩니다. 디폴트 값은 전향 유한 차분의 경우 sqrt(eps)이고 중심 유한 차분의 경우 eps^(1/3)입니다.

optimset의 경우, 이 이름은 FinDiffRelStep입니다. 현재 옵션 이름과 이전 옵션 이름 항목을 참조하십시오.

FiniteDifferenceType

기울기를 추정하는 데 사용되는 유한 차분으로, 'forward'(디폴트 값) 또는 'central'(중심화됨)입니다. 'central'은 함수 실행 횟수가 2배 더 많지만 더 정확합니다. trust-region-reflective 알고리즘은 CheckGradientstrue로 설정된 경우에만 FiniteDifferenceType을 사용합니다.

fmincon은 두 유형의 유한 차분을 모두 추정하는 경우 범위를 준수하려고 노력합니다. 예를 들어, 범위 외부에 있는 점에서 실행되는 것을 방지하기 위해 전향 차분이 아니라 후향 차분을 사용할 수 있습니다. 하지만, interior-point 알고리즘에서는 HonorBounds 옵션이 false로 설정된 경우 'central' 차분이 실행 도중 범위를 위반할 수 있습니다.

optimset의 경우, 이 이름은 FinDiffType입니다. 현재 옵션 이름과 이전 옵션 이름 항목을 참조하십시오.

FunValCheck

목적 함수 값이 유효한지 여부를 확인합니다. 디폴트 설정 'off'는 검사를 수행하지 않습니다. 'on' 설정은 목적 함수가 complex, Inf 또는 NaN 값을 반환하는 경우에 오류를 표시합니다.

MaxFunctionEvaluations

허용되는 최대 함수 실행 횟수로, 양의 정수입니다. interior-point를 제외한 모든 알고리즘의 경우 디폴트 값은 100*numberOfVariables입니다. interior-point 알고리즘의 경우 디폴트 값은 3000입니다. 허용오차와 중지 기준 항목과 반복 횟수와 함수 실행 횟수 항목을 참조하십시오.

optimset의 경우, 이 이름은 MaxFunEvals입니다. 현재 옵션 이름과 이전 옵션 이름 항목을 참조하십시오.

MaxIterations

허용되는 최대 반복 횟수로, 양의 정수입니다. interior-point를 제외한 모든 알고리즘의 경우 디폴트 값은 400입니다. interior-point 알고리즘의 경우 디폴트 값은 1000입니다. 허용오차와 중지 기준 항목과 반복 횟수와 함수 실행 횟수 항목을 참조하십시오.

optimset의 경우, 이 이름은 MaxIter입니다. 현재 옵션 이름과 이전 옵션 이름 항목을 참조하십시오.

OptimalityTolerance

1차 최적성에 대한 종료 허용오차입니다(양의 스칼라). 디폴트 값은 1e-6입니다. 1차 최적성 측정값 항목을 참조하십시오.

optimset의 경우, 이 이름은 TolFun입니다. 현재 옵션 이름과 이전 옵션 이름 항목을 참조하십시오.

OutputFcn

각 반복마다 최적화 함수가 호출하는 하나 이상의 사용자 정의 함수를 지정합니다. 함수 핸들 또는 함수 핸들 셀형 배열을 전달합니다. 디폴트 값은 없음([])입니다. Output Function and Plot Function Syntax 항목을 참조하십시오.

PlotFcn

알고리즘이 실행되는 동안 다양한 진행률 측정값을 플로팅합니다. 미리 정의된 플롯에서 선택하거나 사용자가 직접 작성할 수 있습니다. 내장 플롯 함수 이름, 함수 핸들 또는 내장 플롯 함수 이름이나 함수 핸들로 구성된 셀형 배열을 전달하십시오. 사용자 지정 플롯 함수의 경우, 함수 핸들을 전달하십시오. 디폴트 값은 없음([])입니다.

  • 'optimplotx'는 현재 점을 플로팅합니다.

  • 'optimplotfunccount'는 함수 실행 횟수를 플로팅합니다.

  • 'optimplotfval'은 함수 값을 플로팅합니다.

  • 'optimplotfvalconstr'은 발견된 최적의 실현가능 목적 함수 값을 선 플롯으로 플로팅합니다. 이 플롯은 1e-6의 실현가능성 허용오차를 사용하여 실현불가능점과 실현가능점을 서로 다른 색으로 표시합니다.

  • 'optimplotconstrviolation'은 최대 제약 조건 위반 값을 플로팅합니다.

  • 'optimplotstepsize'는 스텝 크기를 플로팅합니다.

  • 'optimplotfirstorderopt'는 1차 최적성 측정값을 플로팅합니다.

사용자 지정 플롯 함수는 출력 함수와 동일한 구문을 사용합니다. Optimization Toolbox의 출력 함수 항목과 Output Function and Plot Function Syntax 항목을 참조하십시오.

optimset의 경우, 이 이름은 PlotFcns입니다. 현재 옵션 이름과 이전 옵션 이름 항목을 참조하십시오.

SpecifyConstraintGradient

사용자가 정의하는 비선형 제약 조건 함수의 기울기입니다. 디폴트 값 false로 설정된 경우, fmincon은 유한 차분으로 비선형 제약 조건의 기울기를 추정합니다. true로 설정된 경우, fmincon에서 제약 조건 함수가 4개의 출력값을 가져야 합니다. 이에 대한 설명은 nonlcon에 나와 있습니다. trust-region-reflective 알고리즘은 비선형 제약 조건을 받지 않습니다.

optimset의 경우, 이 이름은 GradConstr이고 값은 'on' 또는 'off'입니다. 현재 옵션 이름과 이전 옵션 이름 항목을 참조하십시오.

SpecifyObjectiveGradient

사용자가 정의하는 목적 함수의 기울기입니다. fun에 기울기를 정의하는 방법을 보려면 fun에 대한 설명을 참조하십시오. 디폴트 값 false를 설정하면 fmincon이 유한 차분을 사용하여 기울기를 추정합니다. fmincon이 목적 함수에 대한 사용자 정의 기울기를 사용하도록 하려면 true로 설정하십시오. 'trust-region-reflective' 알고리즘을 사용하려면 기울기를 제공하고 SpecifyObjectiveGradienttrue로 설정해야 합니다.

optimset의 경우, 이 이름은 GradObj이고 값은 'on' 또는 'off'입니다. 현재 옵션 이름과 이전 옵션 이름 항목을 참조하십시오.

StepTolerance

x에 대한 종료 허용오차로, 양의 스칼라입니다. 'interior-point'를 제외한 모든 알고리즘의 경우 디폴트 값은 1e-6입니다. 'interior-point' 알고리즘의 경우 디폴트 값은 1e-10입니다. 허용오차와 중지 기준 항목을 참조하십시오.

optimset의 경우, 이 이름은 TolX입니다. 현재 옵션 이름과 이전 옵션 이름 항목을 참조하십시오.

TypicalX

일반적인 x 값입니다. TypicalX의 요소 개수는 시작점 x0의 요소 개수와 같습니다. 디폴트 값은 ones(numberofvariables,1)입니다. fmincon은 기울기 추정을 위해 유한 차분을 스케일링하는 데 TypicalX를 사용합니다.

'trust-region-reflective' 알고리즘은 CheckGradients 옵션에 대해서만 TypicalX를 사용합니다.

UseParallel

true인 경우 fmincon은 기울기를 병렬로 추정합니다. 디폴트 값 false로 설정하면 비활성화됩니다. trust-region-reflective에서는 목적 함수에 기울기를 제공해야 하므로, UseParallel이 적용되지 않습니다. 병렬 연산 항목을 참조하십시오.

Trust-Region-Reflective 알고리즘
FunctionTolerance

함수 값에 대한 종료 허용오차로, 양의 스칼라입니다. 디폴트 값은 1e-6입니다. 허용오차와 중지 기준 항목을 참조하십시오.

optimset의 경우, 이 이름은 TolFun입니다. 현재 옵션 이름과 이전 옵션 이름 항목을 참조하십시오.

HessianFcn

[](디폴트 값)인 경우, fmincon은 유한 차분을 사용하여 헤세 행렬의 근삿값을 계산하거나 헤세 행렬의 곱셈 함수를 사용합니다(옵션 HessianMultiplyFcn 사용). 'objective'인 경우, fmincon은 사용자 정의 헤세 행렬(fun에서 정의됨)을 사용합니다. 입력값 헤세 행렬 항목을 참조하십시오.

optimset의 경우, 이 이름은 HessFcn입니다. 현재 옵션 이름과 이전 옵션 이름 항목을 참조하십시오.

HessianMultiplyFcn

헤세 행렬의 곱셈 함수로, 함수 핸들로 지정됩니다. 특정 구조를 가진 대규모 문제의 경우, 이 함수는 H를 실제로 구성하지 않고 헤세 행렬 곱 H*Y를 계산합니다. 이 함수의 형식은 다음과 같습니다.

W = hmfun(Hinfo,Y)

여기서 HinfoH*Y를 계산하는 데 사용되는 행렬을 포함합니다.

첫 번째 인수는 목적 함수 fun이 반환하는 세 번째 인수와 같습니다. 예를 들어 다음과 같습니다.

[f,g,Hinfo] = fun(x)

Y는 문제의 차원과 동일한 개수의 행을 갖는 행렬입니다. 행렬 W = H*Y입니다. 단, H가 명시적으로 구성되지는 않습니다. fminconHinfo를 사용하여 선조건자를 계산합니다. hmfun에 필요한 추가 파라미터의 값을 제공하는 방법에 대한 자세한 내용은 추가 파라미터 전달하기 항목을 참조하십시오.

참고

HessianMultiplyFcn 옵션을 사용하려면 HessianFcn[]로 설정되어야 하고, SubproblemAlgorithm'cg'(디폴트 값)여야 합니다.

헤세 행렬의 곱셈 함수 항목을 참조하십시오. 이에 대한 예제는 Minimization with Dense Structured Hessian, Linear Equalities 항목을 참조하십시오.

optimset의 경우, 이 이름은 HessMult입니다. 현재 옵션 이름과 이전 옵션 이름 항목을 참조하십시오.

HessPattern

유한 차분에 대한 헤세 행렬의 희소성 패턴입니다. ∂2fun/∂x(i)x(j) ≠ 0이 성립하는 경우 HessPattern(i,j) = 1을 설정합니다. 그렇지 않은 경우 HessPattern(i,j) = 0을 설정합니다.

HessPatternfun의 헤세 행렬 H를 계산하는 것이 번거롭고 fun의 기울기의 i번째 성분이 x(j)에 종속된다는 사실은 (조사를 통해) 확인할 수 있는 경우에 사용합니다. H희소성 구조HessPattern의 값으로 제공하는 경우 fmincon은 (기울기의) 희소 유한 차분을 통해 H의 근삿값을 계산할 수 있습니다. 다시 말해서 0이 아닌 성분의 위치를 제공합니다.

구조를 알 수 없는 경우 HessPattern을 설정하지 마십시오. 이 경우 기본적으로 HessPattern이 1로 구성된 조밀 행렬인 것처럼 동작합니다. 그러면 fmincon이 각 반복마다 비희소 유한 차분 근삿값을 계산합니다. 이 계산 과정은 대규모 문제의 경우 시간이 아주 오래 걸릴 수 있으므로 보통은 희소성 구조를 확인하는 것이 더 바람직합니다.

MaxPCGIter

최대 선조건 적용 켤레 기울기(PCG) 반복 횟수로, 양의 스칼라입니다. 디폴트 값은 범위 제약 조건이 있는 문제의 경우 max(1,floor(numberOfVariables/2))이고, 등식 제약 조건이 있는 문제의 경우 numberOfVariables입니다. 자세한 내용은 선조건 적용 켤레 기울기법(Preconditioned Conjugate Gradient Method) 항목을 참조하십시오.

PrecondBandWidth

PCG에 대한 선조건자의 상부 대역폭으로, 음이 아닌 정수입니다. 기본적으로, 대각 선조건 지정이 사용됩니다(상부 대역폭: 0). 일부 문제에서는 대역폭을 늘리면 PCG 반복 횟수가 줄어듭니다. PrecondBandWidthInf로 설정하면 켤레 기울기(CG)가 아닌 직접 분해(촐레스키)가 사용됩니다. 직접 분해는 CG보다 계산량이 더 많지만 해에 다가가는 데 있어 더 나은 품질의 스텝을 생성합니다.

SubproblemAlgorithm

반복 스텝이 계산되는 방식을 결정합니다. 디폴트 값 'cg''factorization'보다 더 빠르지만 정확도가 떨어지는 스텝을 실행합니다. fmincon의 Trust Region Reflective 알고리즘 항목을 참조하십시오.

optimset의 경우 디폴트가 아닌 값을 설정할 수 없습니다. 'factorization'을 사용하려면 optimoptions를 사용하여 옵션을 설정하십시오.

TolPCG

PCG 반복에 대한 종료 허용오차로, 양의 스칼라입니다. 디폴트 값은 0.1입니다.

Active-Set 알고리즘
FunctionTolerance

함수 값에 대한 종료 허용오차로, 양의 스칼라입니다. 디폴트 값은 1e-6입니다. 허용오차와 중지 기준 항목을 참조하십시오.

optimset의 경우, 이 이름은 TolFun입니다. 현재 옵션 이름과 이전 옵션 이름 항목을 참조하십시오.

MaxSQPIter

허용되는 최대 SQP 반복 횟수로, 양의 정수입니다. 디폴트 값은 10*max(numberOfVariables, numberOfInequalities + numberOfBounds)입니다.

RelLineSrchBnd

직선 탐색 스텝 길이에 대한 상대적 범위입니다(음이 아닌 실수 스칼라 값). x의 총 변위는 |Δx(i)| ≤ relLineSrchBnd· max(|x(i)|,|typicalx(i)|)를 충족합니다. 이 옵션을 사용하면 솔버가 너무 크다고 여겨지는 스텝을 실행하는 경우에 x의 변위 크기를 제어할 수 있습니다. 디폴트 값은 범위 없음([])입니다.

RelLineSrchBndDuration

RelLineSrchBnd에 지정된 경계가 활성 상태로 유지되는 반복 횟수입니다(디폴트 값은 1임).

TolConSQP

내부 반복 SQP 제약 조건 위반에 대한 종료 허용오차로, 양의 스칼라입니다. 디폴트 값은 1e-6입니다.

Interior-Point 알고리즘
BarrierParamUpdate

fmincon이 장벽 파라미터를 업데이트하는 방법을 지정합니다(fmincon의 Interior Point 알고리즘 참조). 옵션은 다음과 같습니다.

  • 'monotone'(디폴트 값)

  • 'predictor-corrector'

이 옵션은 솔버의 속도와 수렴에 영향을 줄 수 있지만, 그 영향을 예측하기가 쉽지 않습니다.

EnableFeasibilityMode

true이면, fmincon은 실현가능성을 달성하기 위해 다른 알고리즘을 사용합니다. 이 설정은 fmincon이 일부 경우 실현 가능한 해에 도달하는 데 도움이 됩니다. 디폴트 값은 false입니다.

실현가능성 모드는 일반적으로 SubproblemAlgorithm'cg'일 때 더 성능이 좋습니다. 자세한 내용은 실현가능성 모드 항목을 참조하십시오. 예제는 Obtain Solution Using Feasibility Mode 항목을 참조하십시오.

HessianApproximation

fmincon이 헤세 행렬을 계산하는 방법을 지정합니다(입력값 헤세 행렬 참조). 선택 가능한 설정은 다음과 같습니다.

  • 'bfgs'(디폴트 값)

  • 'finite-difference'

  • 'lbfgs'

  • {'lbfgs',Positive Integer}

참고

HessianApproximation을 사용하려면 HessianFcnHessianMultiplyFcn이 모두 빈 요소([])여야 합니다.

optimset의 경우, 이 이름은 Hessian이고 값은 'user-supplied', 'bfgs', 'lbfgs', 'fin-diff-grads', 'on' 또는 'off'입니다. 현재 옵션 이름과 이전 옵션 이름 항목을 참조하십시오.

HessianFcn

[](디폴트 값)인 경우, fminconHessianApproximation에 지정된 방법을 사용하여 헤세 행렬의 근삿값을 계산하거나 제공된 HessianMultiplyFcn을 사용합니다. 함수 핸들인 경우, fminconHessianFcn을 사용하여 헤세 행렬을 계산합니다. 입력값 헤세 행렬 항목을 참조하십시오.

optimset의 경우, 이 이름은 HessFcn입니다. 현재 옵션 이름과 이전 옵션 이름 항목을 참조하십시오.

HessianMultiplyFcn

헤세 행렬과 벡터의 곱을 제공하는 사용자 제공 함수입니다(헤세 행렬의 곱셈 함수 참조). 함수 핸들을 전달합니다.

참고

HessianMultiplyFcn 옵션을 사용하려면 HessianFcn[]로 설정되어야 하고, SubproblemAlgorithm'cg'여야 합니다.

optimset의 경우, 이 이름은 HessMult입니다. 현재 옵션 이름과 이전 옵션 이름 항목을 참조하십시오.

HonorBounds

디폴트 값 true는 범위 제약 조건이 매 반복마다 충족되도록 합니다. false로 설정하여 비활성화할 수 있습니다.

optimset의 경우, 이 이름은 AlwaysHonorConstraints이고 값은 'bounds' 또는 'none'입니다. 현재 옵션 이름과 이전 옵션 이름 항목을 참조하십시오.

InitBarrierParam

초기 장벽 값으로, 양의 스칼라입니다. 경우에 따라 디폴트 값 0.1보다 높은 값을 사용하는 것이 도움이 될 수 있습니다. 특히, 목적 함수 또는 제약 조건의 규모가 큰 경우 그렇습니다.

InitTrustRegionRadius

신뢰 영역의 초기 반지름으로, 양의 스칼라입니다. 준특이 행렬(badly scaled) 문제에서는 디폴트 값 n보다 작은 값을 선택하는 것이 도움이 될 수 있습니다. 여기서 n은 변수의 개수입니다.

MaxProjCGIter

투영된 켤레 기울기 반복 횟수에 대한 허용오차(중지 기준)로, 이는 알고리즘의 반복 횟수가 아니라 내부 반복 횟수입니다. 이 양의 정수의 디폴트 값은 2*(numberOfVariables - numberOfEqualities)입니다.

ObjectiveLimit

허용오차(중지 기준)로, 스칼라입니다. 목적 함수 값이 ObjectiveLimit 아래로 떨어지고 반복이 실현 가능하면 반복이 중단됩니다. 문제가 비유계이기 때문일 수 있습니다. 디폴트 값은 -1e20입니다.

ScaleProblem

true로 설정하면 알고리즘이 모든 제약 조건과 목적 함수를 정규화합니다. 디폴트 값 false로 설정하면 비활성화됩니다.

optimset의 경우, 값은 'obj-and-constr' 또는 'none'입니다. 현재 옵션 이름과 이전 옵션 이름 항목을 참조하십시오.

SubproblemAlgorithm

반복 스텝이 계산되는 방식을 결정합니다. 디폴트 값 'factorization'은 일반적으로 'cg'(켤레 기울기)보다 빠릅니다. 하지만 조밀한 헤세 행렬이 포함된 대규모 문제에서는 'cg'가 더 빠를 수도 있습니다. fmincon의 Interior Point 알고리즘 항목을 참조하십시오.

optimset의 경우 값은 'cg''ldl-factorization'입니다. 현재 옵션 이름과 이전 옵션 이름 항목을 참조하십시오.

TolProjCG

투영된 켤레 기울기 알고리즘에 대한 상대 허용오차(중지 기준)로, 이는 알고리즘 반복이 아니라 내부 반복에 대한 것입니다. 이 양의 스칼라의 디폴트 값은 0.01입니다.

TolProjCGAbs

투영된 켤레 기울기 알고리즘에 대한 절대 허용오차(중지 기준)로, 이는 알고리즘 반복이 아니라 내부 반복에 대한 것입니다. 이 양의 스칼라의 디폴트 값은 1e-10입니다.

SQP 알고리즘과 SQP Legacy 알고리즘
ObjectiveLimit

허용오차(중지 기준)로, 스칼라입니다. 목적 함수 값이 ObjectiveLimit 아래로 떨어지고 반복이 실현 가능하면 반복이 중단됩니다. 문제가 비유계이기 때문일 수 있습니다. 디폴트 값은 -1e20입니다.

ScaleProblem

true로 설정하면 알고리즘이 모든 제약 조건과 목적 함수를 정규화합니다. 디폴트 값 false로 설정하면 비활성화됩니다.

optimset의 경우, 값은 'obj-and-constr' 또는 'none'입니다. 현재 옵션 이름과 이전 옵션 이름 항목을 참조하십시오.

예: options = optimoptions('fmincon','SpecifyObjectiveGradient',true,'SpecifyConstraintGradient',true)

문제 구조체로, 다음 필드를 가진 구조체로 지정됩니다.

필드 이름항목

objective

목적 함수

x0

x의 초기점

Aineq

선형 부등식 제약 조건에 대한 행렬

bineq

선형 부등식 제약 조건에 대한 벡터

Aeq

선형 등식 제약 조건에 대한 행렬

beq

선형 등식 제약 조건에 대한 벡터
lb하한으로 구성된 벡터
ub상한으로 구성된 벡터

nonlcon

비선형 제약 조건 함수

solver

'fmincon'

options

optimoptions로 생성되는 옵션

problem 구조체에 적어도 objective, x0, solver, options 필드는 반드시 제공해야 합니다.

데이터형: struct

출력 인수

모두 축소

해로, 실수형 벡터나 실수형 배열로 반환됩니다. x의 크기는 x0의 크기와 같습니다. 일반적으로 xexitflag가 양수인 경우 문제에 대한 국소해입니다. 해의 품질에 대한 자세한 내용은 솔버가 성공한 경우 항목을 참조하십시오.

해에서 계산된 목적 함수 값으로, 실수로 반환됩니다. 일반적으로 fval = fun(x)입니다.

fmincon가 중지된 이유로, 정수로 반환됩니다.

모든 알고리즘:

1

1차 최적성 측정값이 options.OptimalityTolerance보다 작고 최대 제약 조건 위반 값이 options.ConstraintTolerance보다 작습니다.

0

반복 횟수가 options.MaxIterations를 초과하거나, 함수 실행 횟수가 options.MaxFunctionEvaluations를 초과했습니다.

-1

출력 함수나 플롯 함수에 의해 중지되었습니다.

-2

실현가능점을 찾을 수 없습니다.

active-set을 제외한 모든 알고리즘:

2

x의 변화량이 options.StepTolerance보다 작고 최대 제약 조건 위반 값이 options.ConstraintTolerance보다 작습니다.

trust-region-reflective 알고리즘만 해당:

3

목적 함수 값의 변화량이 options.FunctionTolerance보다 작고 최대 제약 조건 위반 값이 options.ConstraintTolerance보다 작습니다.

active-set 알고리즘만 해당:

4

탐색 방향의 크기가 2*options.StepTolerance보다 작고 최대 제약 조건 위반 값이 options.ConstraintTolerance보다 작습니다.

5

탐색 방향에서 방향 도함수의 크기가 2*options.OptimalityTolerance보다 작고 최대 제약 조건 위반 값이 options.ConstraintTolerance보다 작습니다.

interior-point, sqp-legacy, sqp 알고리즘:

-3

현재 반복에서 목적 함수가 options.ObjectiveLimit 아래로 떨어졌으며 최대 제약 조건 위반 값이 options.ConstraintTolerance보다 작습니다.

최적화 과정에 대한 정보로, 다음 필드를 가진 구조체로 반환됩니다.

iterations

수행된 반복 횟수

funcCount

함수 실행 횟수

lssteplength

탐색 방향을 기준으로 한 직선 탐색 스텝의 크기(active-set 알고리즘과 sqp 알고리즘만 해당)

constrviolation

제약 조건 함수의 최댓값

stepsize

x의 마지막 변위의 길이(active-set 알고리즘에는 해당되지 않음)

algorithm

사용된 최적화 알고리즘

cgiterations

총 PCG 반복 횟수(trust-region-reflective 알고리즘과 interior-point 알고리즘)

firstorderopt

1차 최적성에 대한 측정값

bestfeasible

최상의(가장 낮은 목적 함수) 실현가능점을 발견했습니다. 다음 필드를 포함한 구조체:

  • x

  • fval

  • firstorderopt

  • constrviolation

실현가능점을 찾지 못한 경우 bestfeasible 필드가 비어 있습니다. 이를 위해, 제약 조건 함수의 최댓값이 options.ConstraintTolerance를 초과하지 않을 때 점이 실현 가능합니다.

bestfeasible 점은 반환되는 해에 해당하는 점 x와 다양한 이유로 다를 수 있습니다. 예제는 Obtain Best Feasible Point 항목을 참조하십시오.

message

종료 메시지

해에서의 라그랑주 승수로, 다음 필드를 갖는 구조체로 반환됩니다.

lower

lb에 대응하는 하한

upper

ub에 대응하는 상한

ineqlin

Ab에 대응하는 선형 부등식

eqlin

Aeqbeq에 대응하는 선형 등식

ineqnonlin

nonlcon에서 c에 대응하는 비선형 부등식

eqnonlin

nonlcon에서 ceq에 대응하는 비선형 등식

해에서의 기울기로, 실수 벡터로 반환됩니다. grad는 점 x(:)에서 fun의 기울기를 제공합니다.

근사 헤세 행렬로, 실수 행렬로 반환됩니다. hessian의 의미는 헤세 행렬 출력값 항목을 참조하십시오.

제한 사항

  • fmincon은 목적 함수와 제약 조건 함수가 모두 연속이고 연속 1계 도함수를 갖는 문제에 동작하도록 설계된 기울기 기반 방법입니다.

  • 'trust-region-reflective' 알고리즘을 사용하는 경우 fun에 기울기를 제공하고 'SpecifyObjectiveGradient' 옵션을 true로 설정해야 합니다.

  • 'trust-region-reflective' 알고리즘은 서로 동일한 상한과 하한을 허용하지 않습니다. 예를 들어, lb(2)==ub(2)이면 fmincon은 다음 오류를 표시합니다.

    Equal upper and lower bounds not permitted in trust-region-reflective algorithm. Use
    either interior-point or SQP algorithms instead.
  • 헤세 행렬과 HessianMultiplyFcn 함수를 전달하는 구문은 각각 두 개씩 있습니다. 하나는 trust-region-reflective에 대한 것이고, 다른 하나는 interior-point에 대한 것입니다. 헤세 행렬 포함시키기 항목을 참조하십시오.

    • trust-region-reflective의 경우, 라그랑주의 헤세 행렬이 목적 함수의 헤세 행렬과 같습니다. 이 헤세 행렬은 목적 함수의 세 번째 출력값으로 전달해야 합니다.

    • interior-point의 경우, 라그랑주의 헤세 행렬에 비선형 제약 조건 함수의 헤세 행렬과 라그랑주 승수가 포함됩니다. 헤세 행렬은 현재 점 x와 라그랑주 승수 구조체 lambda 모두를 고려하는 개별 함수로 전달해야 합니다.

  • 문제가 실현 가능하지 않을 경우, fmincon은 최대 제약 조건 값을 최소화하려고 시도합니다.

세부 정보

모두 축소

입력값 헤세 행렬

fmincon은 헤세 행렬을 선택적인 입력값으로 사용합니다. 이 헤세 행렬은 라그랑주의 2계 도함수로 구성된 행렬(수식 1 참조), 즉 다음과 같습니다.

xx2L(x,λ)=2f(x)+λi2ci(x)+λi2ceqi(x).(1)

헤세 행렬을 trust-region-reflective 알고리즘 또는 interior-point 알고리즘에 제공하는 방법에 대한 자세한 내용은 헤세 행렬 포함시키기 항목을 참조하십시오.

active-set 알고리즘과 sqp 알고리즘은 입력값 헤세 행렬을 받지 않습니다. 이 알고리즘은 라그랑주의 헤세 행렬에 대한 준뉴턴 근삿값을 계산합니다.

interior-point 알고리즘에는 다음과 같이 'HessianApproximation' 옵션에 대해 선택할 수 있는 값이 여러 개 있습니다(fmincon의 interior-point에 대한 입력값으로 헤세 행렬 근삿값 선택하기 참조).

  • 'bfgs'fmincon은 조밀한 준뉴턴 근사로 헤세 행렬을 계산합니다. 이는 디폴트 헤세 행렬 근사입니다.

  • 'lbfgs'fmincon은 기억 용량을 제한한 대규모 준뉴턴 근사로 헤세 행렬을 계산합니다. 기억할 수 있는 반복 횟수의 디폴트 값은 10회입니다.

  • {'lbfgs',positive integer}fmincon은 기억 용량을 제한한 대규모 준뉴턴 근사로 헤세 행렬을 계산합니다. 양의 정수는 얼마나 많은 이전 반복이 기억되어야 하는지를 지정합니다.

  • 'finite-difference'fmincon은 기울기의 유한 차분으로 헤세 행렬과 벡터의 곱을 계산합니다. 목적 함수의 기울기는 물론, 비선형 제약 조건의 기울기(존재하는 경우)도 제공해야 합니다. 'SpecifyObjectiveGradient' 옵션을 true로 설정하고, 해당하는 경우 'SpecifyConstraintGradient' 옵션을 true로 설정하십시오. 'SubproblemAlgorithm''cg'로 설정해야 합니다.

헤세 행렬의 곱셈 함수

interior-point 알고리즘과 trust-region-reflective 알고리즘을 사용하면 헤세 행렬의 곱셈 함수를 제공할 수 있습니다. 이 함수는 헤세 행렬을 직접 계산하지 않고 헤세 행렬과 벡터의 곱에 대한 결과를 구해줍니다. 따라서 메모리를 절약할 수 있습니다. 자세한 내용은 헤세 행렬의 곱셈 함수 항목을 참조하십시오.

알고리즘

모두 축소

알고리즘 선택하기

알고리즘을 선택하는 데 도움을 받으려면 fmincon 알고리즘 항목을 참조하십시오. 알고리즘을 설정하려면 optimoptions를 사용하여 options를 만들고 'Algorithm' 이름-값 쌍을 사용하십시오.

이 섹션의 나머지 부분에서는 각 알고리즘에 대한 정보를 가리키는 포인터 또는 간단한 개요를 제공합니다.

Interior-Point 최적화

이 알고리즘은 fmincon의 Interior Point 알고리즘에 설명되어 있습니다. [1], [41], [9]에 더 자세한 설명이 나와 있습니다.

SQP 및 SQP-Legacy 최적화

fmincon'sqp' 알고리즘과 'sqp-legacy' 알고리즘은 Active-Set 최적화에 설명되어 있는 'active-set' 알고리즘과 유사합니다. 주요 차이점에 대한 설명은 fmincon의 SQP 알고리즘에 나와 있습니다. 이러한 차이점을 요약하자면 다음과 같습니다.

Active-Set 최적화

fmincon은 순차적 2차 계획법(SQP) 방법을 사용합니다. 이 방법에서, 함수는 각 반복마다 2차 계획법(QP) 하위 문제를 풉니다. fmincon은 BFGS 식을 사용하여 각 반복마다 라그랑주의 헤세 행렬에 대한 추정값을 업데이트합니다(fminunc와 참고 문헌 [7][8] 참조).

fmincon[6], [7], [8]에서 제안된 것과 유사한 이득 함수를 사용하여 직선 탐색을 수행합니다. QP 하위 문제는 [5]에 설명된 것과 유사한 활성 세트 전략을 사용하여 풉니다. 이 알고리즘에 대한 자세한 설명은 fmincon의 Active-Set 알고리즘에 나와 있습니다.

사용되는 알고리즘에 대한 자세한 내용을 보려면 SQP 구현도 참조하십시오.

Trust-Region-Reflective 최적화

'trust-region-reflective' 알고리즘은 부분공간 trust-region 방법이며 interior-reflective 뉴턴 방법([3][4]에 설명되어 있음)을 기반으로 합니다. 각 반복에는 선조건 적용 켤레 기울기(PCG) 방법을 사용한 대규모 선형 시스템의 근사해 풀이 작업이 포함됩니다. trust-region 방법과 선조건 적용 켤레 기울기 방법에 대한 설명은 fmincon의 Trust Region Reflective 알고리즘에서 확인할 수 있습니다.

대체 기능

최적화 라이브 편집기 작업은 fmincon에 대한 시각적 인터페이스를 제공합니다.

참고 문헌

[1] Byrd, R. H., J. C. Gilbert, and J. Nocedal. “A Trust Region Method Based on Interior Point Techniques for Nonlinear Programming.” Mathematical Programming, Vol 89, No. 1, 2000, pp. 149–185.

[2] Byrd, R. H., Mary E. Hribar, and Jorge Nocedal. “An Interior Point Algorithm for Large-Scale Nonlinear Programming.” SIAM Journal on Optimization, Vol 9, No. 4, 1999, pp. 877–900.

[3] Coleman, T. F. and Y. Li. “An Interior, Trust Region Approach for Nonlinear Minimization Subject to Bounds.” SIAM Journal on Optimization, Vol. 6, 1996, pp. 418–445.

[4] Coleman, T. F. and Y. Li. “On the Convergence of Reflective Newton Methods for Large-Scale Nonlinear Minimization Subject to Bounds.” Mathematical Programming, Vol. 67, Number 2, 1994, pp. 189–224.

[5] Gill, P. E., W. Murray, and M. H. Wright. Practical Optimization, London, Academic Press, 1981.

[6] Han, S. P. “A Globally Convergent Method for Nonlinear Programming.” Journal of Optimization Theory and Applications, Vol. 22, 1977, pp. 297.

[7] Powell, M. J. D. “A Fast Algorithm for Nonlinearly Constrained Optimization Calculations.” Numerical Analysis, ed. G. A. Watson, Lecture Notes in Mathematics, Springer-Verlag, Vol. 630, 1978.

[8] Powell, M. J. D. “The Convergence of Variable Metric Methods For Nonlinearly Constrained Optimization Calculations.” Nonlinear Programming 3 (O. L. Mangasarian, R. R. Meyer, and S. M. Robinson, eds.), Academic Press, 1978.

[9] Waltz, R. A., J. L. Morales, J. Nocedal, and D. Orban. “An interior algorithm for nonlinear optimization that combines line search and trust region steps.” Mathematical Programming, Vol 107, No. 3, 2006, pp. 391–408.

확장 기능

버전 내역

R2006a 이전에 개발됨

모두 확장