Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

quadprog

설명

선형 제약 조건이 있는 2차 목적 함수를 위한 솔버입니다.

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

minx12xTHx+fTx such that {Axb,Aeqx=beq,lbxub.

H, A , Aeq는 행렬이고, f, b, beq, lb, ub, x는 벡터입니다.

f, lb 및 ub를 벡터나 행렬로 전달할 수 있습니다. 행렬 인수 항목을 참조하십시오.

참고

quadprog 솔버는 솔버 기반 접근법에만 적용됩니다. 두 가지 최적화 접근법에 대한 설명은 먼저 문제 기반 접근법 또는 솔버 기반 접근법 중 선택하기 항목을 참조하십시오.

x = quadprog(H,f)1/2*x'*H*x + f'*x를 최소화하는 벡터 x를 반환합니다. 문제가 유한 최솟값을 가지려면 입력값 H가 양의 정부호여야 합니다. H가 양의 정부호인 경우 해 x = H\(-f)입니다.

예제

x = quadprog(H,f,A,b)1/2*x'*H*x + f'*x를 최소화하며, 여기에는 제한 사항 A*x b가 적용됩니다. 입력 인수 A는 double형으로 구성된 행렬이고, b는 double형으로 구성된 벡터입니다.

예제

x = quadprog(H,f,A,b,Aeq,beq)는 위의 문제를 풀되, 여기에는 제한 사항 Aeq*x = beq가 추가로 적용됩니다. Aeq는 double형으로 구성된 행렬이고, beq는 double형으로 구성된 벡터입니다. 부등식이 존재하지 않는 경우 A = []b = []을 설정하십시오.

예제

x = quadprog(H,f,A,b,Aeq,beq,lb,ub)는 위의 문제를 풀되, 여기에는 제한 사항 lb x ub가 추가로 적용됩니다. 입력값 lbub는 double형으로 구성된 벡터이고, 제한 사항은 각 x 성분에 대해 성립됩니다. 등식이 존재하지 않는 경우 Aeq = []beq = []을 설정하십시오.

참고

문제의 지정된 입력값 범위에 모순이 있는 경우 출력값 xx0이 되고 출력값 fval[]이 됩니다.

quadprog는 범위 lb x ub를 위반하는 x0의 성분을 그 범위로 정의된 상자의 내부로 재설정합니다. quadprog는 범위를 충족하는 성분은 변경하지 않습니다.

x = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0)은 벡터 x0에서 시작하여 위의 문제를 풉니다. 범위가 존재하지 않는 경우 lb = []ub = []로 설정하십시오. 일부 quadprog 알고리즘에서는 x0을 무시합니다. x0을 참조하십시오.

참고

x0'active-set' 알고리즘의 필수 인수입니다.

예제

x = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0,options)options에 지정된 최적화 옵션을 사용하여 위의 문제를 풉니다. optimoptions를 사용하여 options를 만들 수 있습니다. 초기점을 제공하지 않으려면 x0 = []을 설정하십시오.

예제

x = quadprog(problem)problem에 설명되어 있는 구조체인 problem의 최솟값을 반환합니다. 점 표기법 또는 struct 함수를 사용하여 problem 구조체를 만듭니다. 또는 prob2struct를 사용하여 OptimizationProblem 객체에서 problem 구조체를 만듭니다.

예제

[x,fval] = quadprog(___)는 임의의 입력 변수에 대해 x에서의 목적 함수 값 fval도 반환합니다.

fval = 0.5*x'*H*x + f'*x

예제

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

예제

[x,fval,exitflag,output,lambda] = quadprog(___)는 해 x에서의 라그랑주 승수가 필드에 포함된 구조체 lambda도 반환합니다.

예제

[wsout,fval,exitflag,output,lambda] = quadprog(H,f,A,b,Aeq,beq,lb,ub,ws)는 warm start 객체 ws의 옵션을 사용하여 ws의 데이터에서 quadprog를 시작합니다. 반환된 인수 wsout는 해에 해당하는 점을 wsout.X에 포함합니다. 이후 솔버 호출에서 wsout를 초기 warm start 객체로 사용하여 quadprog이 더 빠르게 동작할 수 있습니다.

예제

모두 축소

다음 함수의 최솟값을 구합니다.

f(x)=12x12+x22-x1x2-2x1-6x2

여기에는 다음 제약 조건이 적용됩니다.

x1+x22-x1+2x222x1+x23.

quadprog 구문에서 이 문제는 다음 함수를 최소화하는 것입니다.

f(x)=12xTHx+fTx,

여기서

H=[1-1-12]f=[-2-6],

위의 선형 제약 조건이 그대로 적용됩니다.

이 문제를 풀려면 먼저 계수 행렬을 입력하십시오.

H = [1 -1; -1 2]; 
f = [-2; -6];
A = [1 1; -1 2; 2 1];
b = [2; 2; 3];

quadprog를 호출합니다.

[x,fval,exitflag,output,lambda] = ...
   quadprog(H,f,A,b);
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,fval,exitflag
x = 2×1

    0.6667
    1.3333

fval = -8.2222
exitflag = 1

종료 플래그가 1이면 결과가 국소 최솟값임을 의미합니다. H가 양의 정부호 행렬이기 때문에 이 문제는 볼록 문제이며 따라서 최솟값은 전역 최솟값입니다.

고유값을 검사하여 H가 양의 정부호임을 확인합니다.

eig(H)
ans = 2×1

    0.3820
    2.6180

다음 함수의 최솟값을 구합니다.

f(x)=12x12+x22-x1x2-2x1-6x2

여기에는 다음 제약 조건이 적용됩니다.

x1+x2=0.

quadprog 구문에서 이 문제는 다음 함수를 최소화하는 것입니다.

f(x)=12xTHx+fTx,

여기서

H=[1-1-12]f=[-2-6],

위의 선형 제약 조건이 그대로 적용됩니다.

이 문제를 풀려면 먼저 계수 행렬을 입력하십시오.

H = [1 -1; -1 2]; 
f = [-2; -6];
Aeq = [1 1];
beq = 0;

입력 인수 Ab에 대해 []을 입력하여 quadprog를 호출합니다.

[x,fval,exitflag,output,lambda] = ...
   quadprog(H,f,[],[],Aeq,beq);
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,fval,exitflag
x = 2×1

   -0.8000
    0.8000

fval = -1.6000
exitflag = 1

종료 플래그가 1이면 결과가 국소 최솟값임을 의미합니다. H가 양의 정부호 행렬이기 때문에 이 문제는 볼록 문제이며 따라서 최솟값은 전역 최솟값입니다.

고유값을 검사하여 H가 양의 정부호임을 확인합니다.

eig(H)
ans = 2×1

    0.3820
    2.6180

다음 2차 표현식을 최소화하는 x를 구합니다.

12xTHx+fTx

여기서

H=[1-11-12-21-24], f=[2-31],

여기에는 다음 제약 조건이 적용됩니다.

0x1, x=1/2.

이 문제를 풀려면 먼저 계수를 입력하십시오.

H = [1,-1,1
    -1,2,-2
    1,-2,4];
f = [2;-3;1];
lb = zeros(3,1);
ub = ones(size(lb));
Aeq = ones(1,3);
beq = 1/2;

입력 인수 Ab에 대해 []을 입력하여 quadprog를 호출합니다.

x = quadprog(H,f,[],[],Aeq,beq,lb,ub)
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 = 3×1

    0.0000
    0.5000
    0.0000

quadprog의 진행률을 모니터링하는 옵션을 설정합니다.

options = optimoptions('quadprog','Display','iter');

2차 목적 함수와 선형 부등식 제약 조건을 갖는 문제를 정의합니다.

H = [1 -1; -1 2]; 
f = [-2; -6];
A = [1 1; -1 2; 2 1];
b = [2; 2; 3];

quadprog 함수 호출 작성에 도움이 되도록 불필요한 입력값을 []로 설정합니다.

Aeq = [];
beq = [];
lb = [];
ub = [];
x0 = [];

quadprog을 호출하여 문제를 풉니다.

x = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0,options)
 Iter            Fval  Primal Infeas    Dual Infeas  Complementarity  
    0   -8.884885e+00   3.214286e+00   1.071429e-01     1.000000e+00  
    1   -8.331868e+00   1.321041e-01   4.403472e-03     1.910489e-01  
    2   -8.212804e+00   1.676295e-03   5.587652e-05     1.009601e-02  
    3   -8.222204e+00   8.381476e-07   2.793826e-08     1.809485e-05  
    4   -8.222222e+00   3.064216e-14   1.352696e-12     7.525735e-13  

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 = 2×1

    0.6667
    1.3333

문제 기반 최적화 워크플로의 절차에 따라 problem 구조체를 만듭니다. 선형 제약 조건이 있는 2차 계획법과 동일한 최적화 문제를 만듭니다.

x = optimvar('x',2);
objec = x(1)^2/2 + x(2)^2 - x(1)*x(2) - 2*x(1) - 6*x(2);
prob = optimproblem('Objective',objec);
prob.Constraints.cons1 = sum(x) <= 2;
prob.Constraints.cons2 = -x(1) + 2*x(2) <= 2;
prob.Constraints.cons3 = 2*x(1) + x(2) <= 3;

probproblem 구조체로 변환합니다.

problem = prob2struct(prob);

quadprog를 사용하여 문제를 풉니다.

[x,fval] = quadprog(problem)
Warning: Your Hessian is not symmetric. Resetting H=(H+H')/2.
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 = 2×1

    0.6667
    1.3333

fval = -8.2222

2차 계획법을 풀고 해와 목적 함수 값을 모두 반환합니다.

H = [1,-1,1
    -1,2,-2
    1,-2,4];
f = [-7;-12;-15];
A = [1,1,1];
b = 3;
[x,fval] = quadprog(H,f,A,b)
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 = 3×1

   -3.5714
    2.9286
    3.6429

fval = -47.1786

반환되는 목적 함수 값이 quadprog 목적 함수 정의에서 계산된 값과 일치하는지 확인합니다.

fval2 = 1/2*x'*H*x + f'*x
fval2 = -47.1786

quadprog에 대한 최적화 과정이 확인될 수 있도록 반복 과정을 표시하고 4개의 출력값을 반환하도록 옵션을 설정합니다. 다음을 최소화하는 문제입니다.

12xTHx+fTx

여기에는 다음 조건이 적용됩니다.

0x1,

여기서

H=[21-11312-1125], f=[4-712].

문제 계수를 입력합니다.

H = [2 1 -1
    1 3 1/2
    -1 1/2 5];
f = [4;-7;12];
lb = zeros(3,1);
ub = ones(3,1);

솔버의 반복 과정을 표시하는 옵션을 설정합니다.

options = optimoptions('quadprog','Display','iter');

4개의 출력값을 사용하여 quadprog를 호출합니다.

[x fval,exitflag,output] = quadprog(H,f,[],[],[],[],lb,ub,[],options)
 Iter            Fval  Primal Infeas    Dual Infeas  Complementarity  
    0    2.691769e+01   1.582123e+00   1.712849e+01     1.680447e+00  
    1   -3.889430e+00   0.000000e+00   8.564246e-03     9.971731e-01  
    2   -5.451769e+00   0.000000e+00   4.282123e-06     2.710131e-02  
    3   -5.499997e+00   0.000000e+00   1.221938e-10     6.939689e-07  
    4   -5.500000e+00   0.000000e+00   5.842173e-14     3.469847e-10  

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 = 3×1

    0.0000
    1.0000
    0.0000

fval = -5.5000
exitflag = 1
output = struct with fields:
            message: 'Minimum found that satisfies the constraints....'
          algorithm: 'interior-point-convex'
      firstorderopt: 1.5921e-09
    constrviolation: 0
         iterations: 4
       linearsolver: 'dense'
       cgiterations: []

2차 계획법 문제를 풀고 라그랑주 승수를 반환합니다.

H = [1,-1,1
    -1,2,-2
    1,-2,4];
f = [-7;-12;-15];
A = [1,1,1];
b = 3;
lb = zeros(3,1);
[x,fval,exitflag,output,lambda] = quadprog(H,f,A,b,[],[],lb);
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.

라그랑주 승수 구조체 lambda를 검토합니다.

disp(lambda)
    ineqlin: 12.0000
      eqlin: [0x1 double]
      lower: [3x1 double]
      upper: [3x1 double]

선형 부등식 제약 조건에는 연결된 라그랑주 승수 12가 있습니다.

하한과 연결된 승수를 표시합니다.

disp(lambda.lower)
    5.0000
    0.0000
    0.0000

lambda.lower의 첫 번째 성분에만 0이 아닌 승수가 있습니다. 이는 일반적으로 x의 첫 번째 성분만 하한인 0에 있다는 의미입니다. x의 성분을 표시하여 확인합니다.

disp(x)
    0.0000
    1.5000
    1.5000

이후 quadprog 호출 속도를 높이기 위해 warm start 객체를 만듭니다.

options = optimoptions('quadprog','Algorithm','active-set');
x0 = [1 2 3];
ws = optimwarmstart(x0,options);

ws를 사용하여 2차 계획법을 풉니다.

H = [1,-1,1
    -1,2,-2
    1,-2,4];
f = [-7;-12;-15];
A = [1,1,1];
b = 3;
lb = zeros(3,1);
tic
[ws,fval,exitflag,output,lambda] = quadprog(H,f,A,b,[],[],lb,[],ws);
toc
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.
Elapsed time is 0.021717 seconds.

목적 함수를 변경하고 문제를 다시 풉니다.

f = [-10;-15;-20];

tic
[ws,fval,exitflag,output,lambda] = quadprog(H,f,A,b,[],[],lb,[],ws);
toc
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.
Elapsed time is 0.018485 seconds.

입력 인수

모두 축소

2차 목적 함수 항으로, 대칭 실수 행렬로 지정됩니다. H는 표현식 1/2*x'*H*x + f'*x에서 2차 목적 함수 항을 나타냅니다. H가 대칭 행렬이 아닌 경우 quadprog는 경고를 발생시키고 대칭화된 식 (H + H')/2를 대신 사용합니다.

2차 행렬 H가 희소 행렬인 경우에는 기본적으로 'interior-point-convex' 알고리즘은 H가 조밀 행렬일 때와는 약간 다른 알고리즘을 사용합니다. 일반적으로, 희소 알고리즘은 대규모 희소 문제에서 더 빠르고 조밀 알고리즘은 조밀 문제나 소규모 문제에서 더 빠릅니다. 자세한 내용은 LinearSolver 옵션 설명과 quadprog의 interior-point-convex 알고리즘 항목을 참조하십시오.

예: [2,1;1,3]

데이터형: double

선형 목적 함수 항으로, 실수형 벡터로 지정됩니다. f는 표현식 1/2*x'*H*x + f'*x에서 선형 항을 나타냅니다.

예: [1;3;2]

데이터형: 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

초기점으로, 실수형 벡터로 지정됩니다. x0의 길이는 H의 행 개수 또는 열 개수입니다.

문제에 범위 제약 조건만 있는 경우 x0'trust-region-reflective' 알고리즘에 적용됩니다. x0'active-set' 알고리즘에도 적용됩니다.

참고

x0'active-set' 알고리즘의 필수 인수입니다.

x0을 지정하지 않을 경우, quadprogx0의 모든 성분을 범위로 정의된 상자 내부에 있는 점으로 설정합니다. quadprog'interior-point-convex' 알고리즘과 등식 제약 조건을 사용하는 'trust-region-reflective' 알고리즘에서 x0을 무시합니다.

예: [1;2;1]

데이터형: double

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

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

모든 알고리즘

Algorithm

다음과 같은 알고리즘을 선택합니다.

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

  • 'trust-region-reflective'

  • 'active-set'

'interior-point-convex' 알고리즘은 볼록 문제만 처리합니다. 'trust-region-reflective' 알고리즘은 범위와 선형 등식 제약 조건 중 하나만 있는 문제를 처리합니다. 'active-set' 알고리즘은 Aeq의 영공간에 H를 투영한 결과가 양의 준정부호인 경우 부정 문제를 처리합니다. 자세한 내용은 알고리즘 선택하기 항목을 참조하십시오.

Diagnostics

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

Display

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

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

  • 'final'은 최종 출력값만 표시합니다(디폴트 값).

'interior-point-convex' 알고리즘 및 'active-set' 알고리즘은 다음과 같은 추가 값을 허용합니다.

  • 'iter'은 반복 과정을 표시합니다.

  • 'iter-detailed'는 상세 종료 메시지와 함께 반복 과정을 표시합니다.

  • 'final-detailed'는 상세 종료 메시지와 함께 최종 출력값만 표시합니다.

MaxIterations

허용되는 최대 반복 횟수로, 양의 정수입니다.

  • 'trust-region-reflective' 등식 제약 조건이 있는 문제의 경우, 디폴트 값은 2*(numberOfVariables – numberOfEqualities)입니다.

  • 'active-set'의 디폴트 값은 10*(numberOfVariables + numberOfConstraints)입니다.

  • 기타 모든 알고리즘과 문제의 경우, 디폴트 값은 200입니다.

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

OptimalityTolerance

1차 최적성에 대한 종료 허용오차로, 양의 스칼라입니다.

  • 'trust-region-reflective' 등식 제약 조건이 있는 문제의 경우, 디폴트 값은 1e-6입니다.

  • 'trust-region-reflective' 범위 제약 조건이 있는 문제의 경우, 디폴트 값은 100*eps, 약 2.2204e-14입니다.

  • 'interior-point-convex' 알고리즘 및 'active-set' 알고리즘의 경우, 디폴트 값은 1e-8입니다.

허용오차와 중지 기준 항목을 참조하십시오.

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

StepTolerance

x에 대한 종료 허용오차로, 양의 스칼라입니다.

  • 'trust-region-reflective'의 경우, 디폴트 값은 100*eps, 약 2.2204e-14입니다.

  • 'interior-point-convex'의 경우, 디폴트 값은 1e-12입니다.

  • 'active-set'의 경우, 디폴트 값은 1e-8입니다.

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

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

FunctionTolerance

함수 값에 대한 종료 허용오차로, 양의 스칼라입니다. 디폴트 값은 문제 유형에 따라 달라집니다. 범위 제약 조건이 있는 문제는 100*eps를 사용하고, 선형 등식 제약 조건이 있는 문제는 1e-6을 사용합니다. 허용오차와 중지 기준 항목을 참조하십시오.

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

HessianMultiplyFcn

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

W = hmfun(Hinfo,Y)

여기서 Hinfo(그리고 추가될 수 있는 일부 파라미터)는 H*Y를 계산하는 데 사용되는 행렬을 포함합니다.

이 옵션을 사용하는 예제는 Quadratic Minimization with Dense, Structured Hessian 항목을 참조하십시오.

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

MaxPCGIter

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

PrecondBandWidth

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

SubproblemAlgorithm

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

TolPCG

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

TypicalX

일반적인 x 값입니다. TypicalX의 요소 개수는 시작점 x0의 요소 개수와 같습니다. 디폴트 값은 ones(numberOfVariables,1)입니다. quadprog는 스케일링에 내부적으로 TypicalX를 사용합니다. TypicalXx에 비유계 성분이 있고 비유계 성분의 TypicalX 값이 1보다 큰 경우에만 유효합니다.

'interior-point-convex' 알고리즘만 해당

ConstraintTolerance

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

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

LinearSolver

알고리즘의 내부 선형 솔버 유형입니다.

  • 'auto'(디폴트 값) — H 행렬이 희소 행렬이면 'sparse'를 사용하고, 그렇지 않으면 'dense'를 사용합니다.

  • 'sparse' — 희소 선형 대수를 사용합니다. 희소 행렬 항목을 참조하십시오.

  • 'dense' — 조밀한 선형 대수를 사용합니다.

'active-set' 알고리즘만 해당

ConstraintTolerance

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

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

ObjectiveLimit

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

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

H

1/2*x'*H*x의 대칭 행렬

f

일차항 f'*x의 벡터

Aineq

선형 부등식 제약 조건 Aineq*x bineq에 포함되는 행렬

bineq

선형 부등식 제약 조건 Aineq*x bineq에 포함되는 벡터

Aeq

선형 등식 제약 조건 Aeq*x = beq에 포함되는 행렬

beq

선형 등식 제약 조건 Aeq*x = beq에 포함되는 벡터
lb하한으로 구성된 벡터
ub상한으로 구성된 벡터

x0

x의 초기점

solver

'quadprog'

options

optimoptions 또는 optimset을 사용하여 생성되는 옵션

필수 필드는 H, f, solveroptions입니다. 해를 구할 때 quadprog는 위 목록에 표시되지 않은 모든 필드를 problem에서 무시합니다.

참고

웜 스타트는 problem 인수와 함께 사용할 수 없습니다.

데이터형: struct

warm start 객체로, optimwarmstart를 사용하여 생성되는 객체로 지정됩니다. warm start 객체는 시작점과 옵션, 그리고 코드 생성 시 메모리 크기에 대한 선택적 데이터를 포함합니다. Warm Start Best Practices 항목을 참조하십시오.

예: ws = optimwarmstart(x0,options)

출력 인수

모두 축소

해로, 실수형 벡터로 반환됩니다. x는 모든 범위와 선형 제약 조건이 적용된 1/2*x'*H*x + f'*x를 최소화하는 벡터입니다. x는 비볼록 문제의 경우 국소 최솟값일 수 있습니다. 볼록 문제의 경우, x는 전역 최솟값입니다. 자세한 내용은 국소 최적해와 전역 최적해 항목을 참조하십시오.

해 warm start 객체로, QuadprogWarmStart 객체로 반환됩니다. 해에 해당하는 점은 wsout.X입니다.

이후 quadprog 호출에서 wsout를 입력 warm start 객체로 사용할 수 있습니다.

해에서 계산된 목적 함수 값으로, 실수형 스칼라로 반환됩니다. fval은 해 x에서 1/2*x'*H*x + f'*x를 계산한 값입니다.

quadprog가 중지된 이유로, 아래 표에 설명되어 있는 정수로 반환됩니다.

모든 알고리즘

1

함수가 해 x로 수렴되었습니다.

0

반복 횟수가 options.MaxIterations를 초과했습니다.

-2

문제가 실현 가능하지 않습니다. 또는 'interior-point-convex'의 경우 스텝 크기가 options.StepTolerance보다 작지만, 제약 조건이 충족되지 않았습니다.

-3

문제가 비유계입니다.

'interior-point-convex' 알고리즘

2

스텝 크기가 options.StepTolerance보다 작고 제약 조건이 충족되었습니다.

-6

비볼록 문제가 감지되었습니다.

-8

스텝 방향을 계산할 수 없습니다.

'trust-region-reflective' 알고리즘

4

국소 최솟값을 찾았거나, 최솟값이 고유하지 않습니다.

3

목적 함수 값의 변화량이 options.FunctionTolerance보다 작습니다.

-4

현재 탐색 방향이 하강 방향이 아닙니다. 더 이상 진행할 수 없습니다.

'active-set' 알고리즘

-6

비볼록 문제가 감지되었습니다. Aeq의 영공간에 H를 투영한 결과가 양의 준정부호가 아닙니다.

참고

실제로 문제가 비유계인 경우 'active-set' 알고리즘은 종료 플래그 0을 발생시키고 중단되기도 합니다. 반복 한도를 더 높이 설정해도 종료 플래그 0을 발생시킵니다.

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

iterations

수행된 반복 횟수

algorithm

사용된 최적화 알고리즘

cgiterations

총 PCG 반복 횟수('trust-region-reflective' 알고리즘만 해당)

constrviolation

제약 조건 함수의 최댓값

firstorderopt

1차 최적성에 대한 측정값

linearsolver

내부 선형 솔버의 유형으로, 'dense' 또는 'sparse'('interior-point-convex' 알고리즘만 해당)

message

종료 메시지

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

lower

하한 lb

upper

상한 ub

ineqlin

선형 부등식

eqlin

선형 등식

자세한 내용은 라그랑주 승수 구조체 항목을 참조하십시오.

알고리즘

모두 축소

'interior-point-convex'

'interior-point-convex' 알고리즘은 엄밀하게 제약 조건 내에 있는 경로를 따르려고 시도합니다. 이 알고리즘은 중복된 항목을 제거하려는 경우와 간단한 성분을 구하여 문제를 단순화하려는 경우에 풀이 전처리 모듈을 사용합니다.

이 알고리즘은 희소 헤세 행렬 H와 조밀 행렬에 대해 각각 다르게 구현됩니다. 일반적으로, 희소 구현(Sparse Implementation)은 대규모 희소 문제에서 더 빠르고 조밀 구현(Dense Implementation)은 조밀 문제나 소규모 문제에서 더 빠릅니다. 자세한 내용은 quadprog의 interior-point-convex 알고리즘 항목을 참조하십시오.

'trust-region-reflective'

'trust-region-reflective' 알고리즘은 interior-reflective 뉴턴 방법([1]에 설명되어 있음)을 기반으로 하는 부분공간 trust-region 방법입니다. 각 반복에는 선조건 적용 켤레 기울기(PCG) 방법을 사용한 대규모 선형 시스템의 근사해 풀이 작업이 포함됩니다. 자세한 내용은 quadprog의 trust-region-reflective 알고리즘 항목을 참조하십시오.

'active-set'

'active-set' 알고리즘은 [2]에서 설명한 것과 유사한 투영법입니다. 이 알고리즘은 대규모 알고리즘이 아닙니다. 대규모 알고리즘과 중간 규모 알고리즘 비교 항목을 참조하십시오. 자세한 내용은 quadprog의 active-set 알고리즘 항목을 참조하십시오.

웜 스타트

warm start 객체는 이전에 푼 문제의 활성 제약 조건 목록을 유지합니다. 솔버는 현재 문제를 풀기 위해 가능한 한 많은 활성 제약 조건 정보를 전달합니다. 이전 문제가 현재 문제와 너무 다른 경우, 활성 세트 정보가 재사용되지 않습니다. 이 경우, 솔버는 활성 제약 조건의 목록을 재빌드하기 위해 콜드 스타트를 효과적으로 실행합니다.

대체 기능

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

참고 문헌

[1] Coleman, T. F., and Y. Li. “A Reflective Newton Method for Minimizing a Quadratic Function Subject to Bounds on Some of the Variables.” SIAM Journal on Optimization. Vol. 6, Number 4, 1996, pp. 1040–1058.

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

[3] Gould, N., and P. L. Toint. “Preprocessing for quadratic programming.” Mathematical Programming. Series B, Vol. 100, 2004, pp. 95–132.

확장 기능

버전 내역

R2006a 이전에 개발됨