이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
quadprog
2차 계획법
구문
설명
선형 제약 조건이 있는 2차 목적 함수를 위한 솔버입니다.
quadprog는 다음으로 지정된 문제의 최솟값을 구합니다.
H, A , Aeq는 행렬이고, f, b, beq, lb, ub, x는 벡터입니다.
f, lb 및 ub를 벡터나 행렬로 전달할 수 있습니다. 행렬 인수 항목을 참조하십시오.
참고
quadprog
솔버는 솔버 기반 접근법에만 적용됩니다. 문제 기반 접근법에는 solve
를 사용하십시오. 두 가지 최적화 접근법에 대한 설명은 먼저 문제 기반 접근법 또는 솔버 기반 접근법 중 선택하기 항목을 참조하십시오.
는 위의 문제를 풀되, 여기에는 제한 사항 x
= quadprog(H
,f
,A
,b
,Aeq
,beq
,lb
,ub
)lb
≤ x
≤ ub
가 추가로 적용됩니다. 입력값 lb
와 ub
는 double형으로 구성된 벡터이고, 제한 사항은 각 x
성분에 대해 성립됩니다. 등식이 존재하지 않는 경우 Aeq = []
및 beq = []
을 설정하십시오.
참고
문제의 지정된 입력값 범위에 모순이 있는 경우 출력값 x
는 x0
이 되고 출력값 fval
은 []
이 됩니다.
quadprog
는 범위 lb
≤ x
≤ ub
를 위반하는 x0
의 성분을 그 범위로 정의된 상자의 내부로 재설정합니다. quadprog
는 범위를 충족하는 성분은 변경하지 않습니다.
은 x
= quadprog(problem
)problem
에 설명되어 있는 구조체인 problem
의 최솟값을 반환합니다. 점 표기법 또는 struct
함수를 사용하여 problem
구조체를 만듭니다. 또는 prob2struct
를 사용하여 OptimizationProblem
객체에서 problem
구조체를 만듭니다.
예제
다음 함수의 최솟값을 구합니다.
여기에는 다음 제약 조건이 적용됩니다.
quadprog
구문에서 이 문제는 다음 함수를 최소화하는 것입니다.
,
여기서
위의 선형 제약 조건이 그대로 적용됩니다.
이 문제를 풀려면 먼저 계수 행렬을 입력하십시오.
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. <stopping criteria details>
최종점, 함수 값, 종료 플래그를 검토합니다.
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
다음 함수의 최솟값을 구합니다.
여기에는 다음 제약 조건이 적용됩니다.
quadprog
구문에서 이 문제는 다음 함수를 최소화하는 것입니다.
,
여기서
위의 선형 제약 조건이 그대로 적용됩니다.
이 문제를 풀려면 먼저 계수 행렬을 입력하십시오.
H = [1 -1; -1 2]; f = [-2; -6]; Aeq = [1 1]; beq = 0;
입력 인수 A
와 b
에 대해 []
을 입력하여 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. <stopping criteria details>
최종점, 함수 값, 종료 플래그를 검토합니다.
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를 구합니다.
여기서
, ,
여기에는 다음 제약 조건이 적용됩니다.
, .
이 문제를 풀려면 먼저 계수를 입력하십시오.
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;
입력 인수 A
와 b
에 대해 []
을 입력하여 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. <stopping criteria details>
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 4.190870e-11 1.396883e-12 9.047989e-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. <stopping criteria details>
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;
prob
를 problem
구조체로 변환합니다.
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. <stopping criteria details>
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. <stopping criteria details>
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개의 출력값을 반환하도록 옵션을 설정합니다. 다음을 최소화하는 문제입니다.
여기에는 다음 조건이 적용됩니다.
,
여기서
, .
문제 계수를 입력합니다.
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.499995e+00 0.000000e+00 2.878422e-10 1.750743e-06 4 -5.500000e+00 0.000000e+00 1.454808e-13 8.753723e-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. <stopping criteria details>
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.↵↵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.↵↵<stopping criteria details>↵↵Optimization completed: The relative dual feasibility, 1.212340e-14,↵is less than options.OptimalityTolerance = 1.000000e-08, the complementarity measure,↵8.753723e-10, is less than options.OptimalityTolerance, and the relative maximum constraint↵violation, 0.000000e+00, is less than options.ConstraintTolerance = 1.000000e-08.'
algorithm: 'interior-point-convex'
firstorderopt: 2.3577e-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. <stopping criteria details>
라그랑주 승수 구조체 lambda
를 검토합니다.
disp(lambda)
ineqlin: 12.0000 eqlin: [0×1 double] lower: [3×1 double] upper: [3×1 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);
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. <stopping criteria details>
toc
Elapsed time is 0.060411 seconds.
목적 함수를 변경하고 문제를 다시 풉니다.
f = [-10;-15;-20]; tic [ws,fval,exitflag,output,lambda] = quadprog(H,f,A,b,[],[],lb,[],ws);
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. <stopping criteria details>
toc
Elapsed time is 0.010756 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]
데이터형: single
| double
선형 목적 함수 항으로, 실수형 벡터로 지정됩니다. f
는 표현식 1/2*x'*H*x + f'*x
에서 선형 항을 나타냅니다.
예: [1;3;2]
데이터형: single
| double
선형 부등식 제약 조건으로, 실수 행렬로 지정됩니다. A
는 M
×N
행렬입니다. 여기서 M
은 부등식 개수이고 N
은 변수 개수(x0
의 요소 개수)입니다. 희소 형식 데이터를 지원하는 알고리즘을 사용하는 대규모 문제의 경우, A
를 희소 행렬로 전달하십시오. 최적화 알고리즘의 희소성 항목을 참조하십시오.
A
는 다음과 같이 M
개의 선형 부등식을 인코딩합니다.
A*x <= b
,
여기서 x
는 N
개의 변수 x(:)
으로 구성된 열 벡터이고, b
는 M
개의 요소를 갖는 열 벡터입니다.
예를 들어, 다음 부등식을 살펴보겠습니다.
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
을 사용하십시오.
데이터형: single
| double
선형 부등식 제약 조건으로, 실수 벡터로 지정됩니다. b
는 A
행렬과 관련된, 요소를 M
개 가진 벡터입니다. b
를 행 벡터로 전달하면 솔버는 내부적으로 b
를 열 벡터 b(:)
으로 변환합니다.
b
는 다음과 같이 M
개의 선형 부등식을 인코딩합니다.
A*x <= b
,
여기서 x
는 N
개의 변수 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
을 사용하십시오.
데이터형: single
| double
선형 등식 제약 조건으로, 실수 행렬로 지정됩니다. Aeq
는 Me
×N
행렬입니다. 여기서 Me
는 부등식 개수이고 N
은 변수 개수(x0
의 요소 개수)입니다. 희소 형식 데이터를 지원하는 알고리즘을 사용하는 대규모 문제의 경우, A
를 희소 행렬로 전달하십시오. 최적화 알고리즘의 희소성 항목을 참조하십시오.
Aeq
는 다음과 같이 Me
개의 선형 등식을 인코딩합니다.
Aeq*x = beq
,
여기서 x
는 N
개의 변수 x(:)
으로 구성된 열 벡터이고, beq
는 Me
개의 요소를 갖는 열 벡터입니다.
예를 들어, 다음 부등식을 살펴보겠습니다.
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
을 사용하십시오.
데이터형: single
| double
선형 등식 제약 조건으로, 실수 벡터로 지정됩니다. beq
는 Aeq
행렬과 관련된, 요소를 Me
개 가진 벡터입니다. beq
를 행 벡터로 전달하면 솔버는 내부적으로 beq
를 열 벡터 beq(:)
으로 변환합니다.
beq
는 다음과 같이 Me
개의 선형 등식을 인코딩합니다.
Aeq*x = beq
,
여기서 x
는 N
개의 변수 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
을 사용하십시오.
데이터형: single
| 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))
을 사용하십시오.
데이터형: single
| 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))
을 사용하십시오.
데이터형: single
| double
초기점으로, 실수형 벡터로 지정됩니다. x0
의 길이는 H
의 행 개수 또는 열 개수입니다.
문제에 범위 제약 조건만 있는 경우 x0
이 'trust-region-reflective'
알고리즘에 적용됩니다. x0
은 'active-set'
알고리즘에도 적용됩니다.
참고
x0
은 'active-set'
알고리즘의 필수 인수입니다.
x0
을 지정하지 않을 경우, quadprog
는 x0
의 모든 성분을 범위로 정의된 상자 내부에 있는 점으로 설정합니다. quadprog
는 'interior-point-convex'
알고리즘과 등식 제약 조건을 사용하는 'trust-region-reflective'
알고리즘에서 x0
을 무시합니다.
예: [1;2;1]
데이터형: single
| double
최적화 옵션으로, optimoptions
의 출력값 또는 optimset
등이 반환하는 구조체로 지정됩니다.
일부 옵션은 optimoptions
표시에 나타나지 않습니다. 이러한 옵션은 다음 표에서 기울임꼴로 표시되어 있습니다. 자세한 내용은 최적화 옵션 보기 항목을 참조하십시오.
모든 알고리즘
Algorithm | 다음과 같은 알고리즘을 선택합니다.
|
Diagnostics | 최소화하거나 풀려는 함수에 대한 진단 정보를 표시합니다. |
Display | 표시 수준입니다(반복 과정 표시 참조):
|
MaxIterations | 허용되는 최대 반복 횟수로, 음이 아닌 정수입니다.
|
OptimalityTolerance | 1차 최적성에 대한 종료 허용오차로, 음이 아닌 스칼라입니다.
허용오차와 중지 기준 항목을 참조하십시오.
|
StepTolerance |
|
'trust-region-reflective'
알고리즘만 해당
FunctionTolerance | 함수 값에 대한 종료 허용오차로, 음이 아닌 스칼라입니다. 디폴트 값은 문제 유형에 따라 달라집니다. 범위 제약 조건이 있는 문제는
|
| 헤세 행렬의 곱셈 함수로, 함수 핸들로 지정됩니다. 특정 구조를 가진 대규모 문제의 경우, 이 함수는 W = hmfun(Hinfo,Y) 여기서 이 옵션을 사용하는 예제는 Quadratic Minimization with Dense, Structured Hessian 항목을 참조하십시오.
|
MaxPCGIter | 최대 PCG(선조건 적용 켤레 기울기) 반복 횟수로, 양의 스칼라입니다. 디폴트 값은 범위 제약 조건이 있는 문제의 경우 |
PrecondBandWidth | PCG에 대한 선조건자의 상부 대역폭으로, 음이 아닌 정수입니다. 기본적으로, |
SubproblemAlgorithm | 반복 스텝이 계산되는 방식을 결정합니다. 디폴트 값 |
TolPCG | PCG 반복에 대한 종료 허용오차로, 양의 스칼라입니다. 디폴트 값은 |
TypicalX | 일반적인 |
'interior-point-convex'
알고리즘만 해당
ConstraintTolerance | 제약 조건 위반에 대한 허용오차로, 음이 아닌 스칼라입니다. 디폴트 값은
|
LinearSolver | 알고리즘의 내부 선형 솔버 유형입니다.
|
ScaleProblem |
제대로 스케일링되지 않은 선형 제약 조건( |
'active-set'
알고리즘만 해당
ConstraintTolerance | 제약 조건 위반에 대한 허용오차로, 음이 아닌 스칼라입니다. 디폴트 값은
|
ObjectiveLimit | 허용오차(중지 기준)로, 스칼라입니다. 목적 함수 값이 |
UseCodegenSolver | 타깃 하드웨어에서 실행되는 소프트웨어 버전을 사용한다는 표시로, |
단정밀도 코드 생성
Algorithm |
|
ConstraintTolerance | 제약 조건 위반에 대한 허용오차로, 양의 스칼라입니다. 디폴트 값은
|
MaxIterations | 허용되는 최대 반복 횟수로, 음이 아닌 정수입니다. 디폴트 값은 |
ObjectiveLimit | 허용오차(중지 기준)로, 스칼라입니다. 목적 함수 값이 |
OptimalityTolerance | 1차 최적성에 대한 종료 허용오차입니다(양의 스칼라). 디폴트 값은
|
StepTolerance |
|
UseCodegenSolver | 타깃 하드웨어에서 실행되는 소프트웨어 버전을 사용한다는 표시로, |
문제 구조체로, 다음 필드를 가진 구조체로 지정됩니다.
| 1/2*x'*H*x 의 대칭 행렬 |
| 선형항 f'*x 의 벡터 |
| 선형 부등식 제약 조건 Aineq*x ≤ bineq 에 포함되는 행렬 |
| 선형 부등식 제약 조건 Aineq*x ≤ bineq 에 포함되는 벡터 |
| 선형 등식 제약 조건 Aeq*x = beq 에 포함되는 행렬 |
| 선형 등식 제약 조건 Aeq*x = beq 에 포함되는 벡터 |
lb | 하한으로 구성된 벡터 |
ub | 상한으로 구성된 벡터 |
| x 의 초기점 |
| 'quadprog' |
| optimoptions 또는 optimset 을 사용하여 생성되는 옵션 |
필수 필드는 H
, f
, solver
및 options
입니다. 해를 구할 때 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
가 중지된 이유로, 아래 표에 설명되어 있는 정수로 반환됩니다.
모든 알고리즘 | |
| 함수가 해 |
| 반복 횟수가 |
| 문제가 실현 가능하지 않습니다. 또는 |
| 문제가 비유계입니다. |
| |
| 스텝 크기가 |
| 비볼록 문제가 감지되었습니다. |
| 스텝 방향을 계산할 수 없습니다. |
| |
| 국소 최솟값을 찾았거나, 최솟값이 고유하지 않습니다. |
| 목적 함수 값의 변화량이 |
| 현재 탐색 방향이 하강 방향이 아닙니다. 더 이상 진행할 수 없습니다. |
| |
|
참고
실제로 문제가 비유계인 경우 'active-set'
알고리즘은 종료 플래그 0
을 발생시키고 중단되기도 합니다. 반복 한도를 더 높이 설정해도 종료 플래그 0
을 발생시킵니다.
최적화 과정에 대한 정보로, 다음 필드를 가진 구조체로 반환됩니다.
| 수행된 반복 횟수 |
| 사용된 최적화 알고리즘 |
| 총 PCG 반복 횟수( |
constrviolation | 제약 조건 함수의 최댓값 |
firstorderopt | 1차 최적성에 대한 측정값 |
linearsolver | 내부 선형 솔버의 유형으로, |
message | 종료 메시지 |
해에서의 라그랑주 승수로, 다음 필드를 가진 구조체로 반환됩니다.
| 하한 |
| 상한 |
| 선형 부등식 |
| 선형 등식 |
자세한 내용은 라그랑주 승수 구조체 항목을 참조하십시오.
세부 정보
다음 몇 가지 항목은 quadprog
에서 반환될 수 있는 향상된 종료 메시지를 나열한 것입니다. 향상된 종료 메시지에는 자세한 정보를 볼 수 있는 링크가 메시지의 첫 문장으로 제공됩니다.
솔버가 모든 범위와 선형 제약 조건을 충족하는 최소화 점을 찾았습니다. 문제가 볼록 문제이므로 최소화 점은 전역 최솟값입니다. 자세한 내용은 국소 최적해와 전역 최적해 항목을 참조하십시오.
마지막 스텝이 너무 작기 때문에 솔버가 중지되었습니다. 상대 스텝 크기가 StepTolerance허용오차 아래로 내려가면 반복이 종료됩니다. 경우에 따라 이는 솔버가 최솟값을 찾았음을 의미할 수 있습니다. 그러나 1차 최적성 측정값이 OptimalityTolerance보다 작지 않으므로 결과가 정확하지 않을 수 있습니다. 모든 제약 조건이 충족되었습니다.
계속 진행하려면 다음을 시도해 보십시오.
output
구조체에 저장된 1차 최적성 측정값을 검토합니다. 1차 최적성 측정값이 작으면 반환된 해가 정확할 가능성이 높습니다.StepTolerance
옵션을0
으로 설정합니다. 이렇게 설정하면 때로는 솔버 진행에 도움이 될 수 있지만 경우에 따라 다른 문제로 인해 솔버가 계속 중단된 상태에 머물 수도 있습니다.다른 알고리즘을 사용해 봅니다. 솔버가 여러 알고리즘을 제공하는 경우 다른 알고리즘으로 성공할 수도 있습니다.
종속 제약 조건을 제거해 봅니다. 즉, 어떠한 선형 제약 조건도 중복되지 않도록 하십시오.
모든 제약 조건을 충족하고 목적 함수의 한계 없는 감소를 유발하는 방향을 찾은 것으로 보이므로 quadprog
가 중지되었습니다.
계속 진행하려면 다음을 수행하십시오.
각 성분에 대해 유한 경계를 갖는지 확인합니다.
목적 함수가 순 볼록(2차 행렬이 순양수 고유값을 가짐)인지 확인합니다.
연결된 선형 계획법 문제(2차 항이 없는 원래 문제)가 유한 해를 갖는지 확인합니다.
솔버가 최솟값으로 향하는 방향을 계산할 수 없으므로 계속 진행할 수 없습니다. 선형 제약 조건이 중복되거나 허용오차가 너무 작기 때문에 발생하는 문제일 가능성이 높습니다.
계속 진행하려면 다음을 수행하십시오.
선형 제약 조건 행렬에 중복이 있는지 확인합니다. 중복 선형 제약 조건을 식별하고 제거해 보십시오.
FunctionTolerance
,OptimalityTolerance
,ConstraintTolerance
옵션 값이 최소1e-14
보다 큰지 그리고 가급적이면1e-12
보다 큰지 확인합니다. 허용오차와 중지 기준 항목을 참조하십시오.
quadprog
가 문제가 볼록 문제가 아님을 확인했습니다. 다른 알고리즘을 사용해 봅니다. 자세한 내용은 2차 계획법 알고리즘 항목을 참조하십시오.
솔버가 풀이 전처리 단계에서 해를 구했습니다. 이는 범위, 선형 제약 조건 및 f
(선형 목적 함수 계수)에서 바로 해를 구했다는 의미입니다. 자세한 내용은 풀이 전처리/풀이 후처리 항목을 참조하십시오.
풀이 전처리 중에 솔버가 문제에 모순된 정식화가 있음을 발견했습니다. 단일 점 x에서 일부 제약 조건을 충족할 수 없다는 의미에서 모순입니다. 자세한 내용은 풀이 전처리/풀이 후처리 항목을 참조하십시오.
풀이 전처리 중에 목적 함수가 한계 없이 감소하는 실현 가능한 방향을 솔버가 찾았습니다. 자세한 내용은 풀이 전처리/풀이 후처리 항목을 참조하십시오.
quadprog
가 ConstraintTolerance라고 하는 제약 조건 허용오차 내에서 일부 제약 조건을 충족하지 않는 점으로 수렴되었습니다. quadprog
가 중지된 이유는 마지막 스텝이 너무 작았기 때문입니다. 상대 스텝 크기가 StepTolerance 허용오차 아래로 내려가면 반복이 종료됩니다.
진행 방법에 대한 제안 사항은 quadprog가 실현불가능점으로 수렴됨 항목을 참조하십시오.
솔버가 ConstraintTolerance라고 하는 제약 조건 허용오차 내에서 일부 제약 조건을 충족하지 않는 점으로 수렴되었습니다. 솔버가 중지된 이유는 마지막 스텝이 너무 작았기 때문입니다. 상대 스텝 크기가 StepTolerance 허용오차 아래로 내려가면 반복이 종료됩니다.
모든 범위와 선형 제약 조건을 충족하는 점이 없습니다. 선형 제약 조건이 모순되는지 검토하는 데 도움이 필요하면 Investigate Linear Infeasibilities 항목을 참조하십시오.
실현가능점이 하나만 있습니다. 독립 선형 등식 제약 조건 개수는 문제의 변수 개수와 같습니다.
1차 최적성 측정값이 OptimalityTolerance
허용오차보다 작기 때문에 솔버가 중지되었습니다.
1차 최적성 측정값은 투영된 기울기의 무한대 노름입니다. 이 투영은 선형 등식 행렬 Aeq
의 영공간으로 투영된 것입니다.
솔버는 곡률이 0인 점, 즉 국소 최솟값에서 중지되었습니다. 동일한 목적 함수 값을 갖는 다른 실현가능점이 있습니다.
목적 함수가 무한정으로 감소하는 영곡률 또는 음의 곡률 방향이 있습니다. 따라서 모든 목표값에 대해 목적 함수 값이 목표값보다 작은 실현가능점이 있습니다. 문제에 충분한 제약 조건을 포함시켰는지 확인합니다(예: 모든 변수에 대한 범위).
1차 최적성 측정값이 OptimalityTolerance 허용오차보다 작기 때문에 솔버가 중지되었습니다.
함수 값의 상대 변화가 FunctionTolerance
허용오차보다 작기 때문에 솔버가 중지되었습니다. 해의 질을 검사하려면 국소 최솟값일 수 있음 항목을 참조하십시오.
함수 값의 상대 변화가 FunctionTolerance
허용오차의 제곱근보다 작고 이전 반복에서 함수 값의 변화가 인자 3.5보다 작게 감소하므로 솔버가 중지되었습니다. 목적 함수 값의 차가 상대적으로 작지만 0으로 충분히 빠르게 감소하지 않을 경우, 이 기준에 따라 솔버가 중지됩니다. 해의 질을 검사하려면 국소 최솟값일 수 있음 항목을 참조하십시오.
다음 몇 가지 항목은 quadprog
종료 메시지에 나오는 용어에 대한 정의를 포함합니다.
일반적으로, 허용오차는 이 값을 넘는 경우 솔버의 반복이 중지되는 임계값입니다. 허용오차에 대한 자세한 내용은 허용오차와 중지 기준 항목을 참조하십시오.
임의의 실현가능점에서 음의 곡률을 갖는 실현 가능한 방향이 없다면 2차 계획법은 볼록입니다. 볼록 문제는 하나의 국소 최솟값만 가지며, 이 값은 전역 최솟값이기도 합니다.
실현가능점 x의 실현 가능한 방향은 충분히 작은 양수 a에 대해 x + av가 실현 가능한 벡터 v입니다.
실현가능점은 모든 제약 조건을 충족하는 점입니다.
StepTolerance
는 마지막 스텝의 크기에 대한 허용오차로, fsolve
가 실행된 위치에서의 변화량 크기입니다.
OptimalityTolerance
라고 하는 허용오차는 1차 최적성 측정값과 관련이 있습니다. 1차 최적성 측정값이 OptimalityTolerance
보다 작은 경우 반복이 종료됩니다.
제약 조건이 있는 문제의 경우 1차 최적성 측정값은 다음 두 수량의 최댓값입니다.
제약 조건이 없는 문제의 경우 1차 최적성 측정값은 기울기 벡터 성분의 절댓값의 최댓값입니다(무한대 노름이라고도 함).
1차 최적성 측정값은 최소화 점에서 0이어야 합니다.
이러한 방정식에서의 모든 변수의 정의를 비롯한 자세한 내용은 1차 최적성 측정값 항목을 참조하십시오.
제약 조건이 없는 문제의 경우 1차 최적성 측정값은 기울기 벡터 성분의 절댓값의 최댓값입니다(기울기의 무한대 노름이라고도 함). 이 값은 최소화 점에서 0이어야 합니다.
범위를 갖는 문제의 경우 1차 최적성 측정값은 i에 대해 |vi*gi|의 최댓값입니다. 여기서 gi는 기울기의 i번째 성분이고, x는 현재 점이며, 다음과 같습니다.
xi가 경계에 있는 경우, vi는 0입니다. xi가 경계에 있지 않는 경우 최소화 점에서 기울기 gi는 0이어야 합니다. 따라서 1차 최적성 측정값은 최소화 점에서 0이어야 합니다.
자세한 내용은 1차 최적성 측정값 항목을 참조하십시오.
ConstraintTolerance
라고 하는 제약 조건 허용오차는 현재 점에서 모든 제약 조건 함수 값의 최댓값입니다.
ConstraintTolerance
는 다른 허용오차와 다르게 동작합니다. ConstraintTolerance
가 충족되지 않으면(예: 제약 조건 함수의 크기가 ConstraintTolerance
를 초과) 솔버는 다른 이유로 중단되지 않는 한 계속 진행을 시도합니다. 단순히 ConstraintTolerance
가 충족된다는 이유로는 솔버가 중단되지 않습니다.
KKT 조건에 따르면 최적값 x에서는 다음 조건이 성립되는 라그랑주 승수 및 λeq가 있습니다.
변수 , , 는 선형 부등식의 일부로 범위를 포함합니다.
쌍대 문제 실현가능성 rd는 의 절댓값입니다.
스케일링 인자 ρ는 다음과 같습니다.
노름 은 표현식에 있는 요소의 최대 절댓값입니다.
KKT 조건에 따르면 최적값 x에서는 다음 조건이 성립되는 라그랑주 승수 및 λeq가 있습니다.
변수 , , 는 선형 부등식의 일부로 범위를 포함합니다.
이득 함수 φ는 다음과 같습니다.
φ 정의에 사용된 항은 다음과 같습니다.
표현식 φmin은 모든 반복에서 나타나는 φ의 값 중 최솟값을 의미합니다.
풀이 전처리는 선형 계획법 문제 또는 2차 계획법 문제를 단순화하는 일련의 알고리즘입니다. 이 알고리즘은 일치하지 않는 범위와 선형 제약 조건 같은 간단한 불일치 항목을 찾습니다. 또한 중복되는 범위와 선형 부등식도 찾습니다. 자세한 내용은 풀이 전처리/풀이 후처리 항목을 참조하십시오.
내부적으로 계산된 탐색 방향은 목적 함수 값을 감소시키지 않습니다. 문제가 잘못 스케일링되었거나 조건이 나쁜 행렬(quadprog
의 경우 H
, lsqlin
의 경우 C
)이 포함되어 있을 수 있습니다. 진행 방법에 대한 제안 사항은 솔버가 실패한 경우 항목 또는국소 최솟값일 수 있음 항목을 참조하십시오.
알고리즘
'interior-point-convex'
알고리즘은 엄밀하게 제약 조건 내에 있는 경로를 따르려고 시도합니다. 이 알고리즘은 중복된 항목을 제거하려는 경우와 간단한 성분을 구하여 문제를 단순화하려는 경우에 풀이 전처리 모듈을 사용합니다.
이 알고리즘은 희소 헤세 행렬 H
와 조밀 행렬에 대해 각각 다르게 구현됩니다. 일반적으로, 희소 구현(Sparse Implementation)은 대규모 희소 문제에서 더 빠르고 조밀 구현(Dense Implementation)은 조밀 문제나 소규모 문제에서 더 빠릅니다. 자세한 내용은 quadprog의 interior-point-convex 알고리즘 항목을 참조하십시오.
'trust-region-reflective'
알고리즘은 interior-reflective 뉴턴 방법([1]에 설명되어 있음)을 기반으로 하는 부분공간 trust-region 방법입니다. 각 반복에는 선조건 적용 켤레 기울기(PCG) 방법을 사용한 대규모 선형 시스템의 근사해 풀이 작업이 포함됩니다. 자세한 내용은 quadprog의 trust-region-reflective 알고리즘 항목을 참조하십시오.
'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.
확장 기능
사용법 관련 참고 및 제한 사항:
quadprog
은codegen
(MATLAB Coder) 함수 또는 MATLAB® Coder™ 앱을 사용한 코드 생성을 지원합니다. 코드를 생성하려면 MATLAB Coder 라이선스가 있어야 합니다.타깃 하드웨어는 표준 배정밀도 부동소수점 계산 또는 표준 단정밀도 부동소수점 계산을 지원해야 합니다.
코드 생성 대상은 MATLAB 솔버와 동일한 수학 커널 라이브러리를 사용하지 않습니다. 따라서 특히 조건이 나쁜 문제인 경우에 코드 생성의 해가 솔버의 해와 다를 수 있습니다.
코드를 생성하기 전에 MATLAB에서 코드를 테스트하려면
UseCodegenSolver
옵션을true
로 설정하십시오. 그러면 솔버가 코드 생성 시 생성된 코드와 동일한 코드를 사용합니다.quadprog
은 코드 생성 시problem
인수를 지원하지 않습니다.[x,fval] = quadprog(problem) % Not supported
A
,Aeq
,lb
,ub
같은quadprog
입력 행렬은 모두 희소 행렬이 아니라 비희소 행렬이어야 합니다.full
함수를 사용하여 희소 행렬을 비희소 행렬로 변환할 수 있습니다.lb
인수와ub
인수는H
의 열 개수와 동일한 개수의 요소를 가지거나 비어 있어야 합니다([]
).타깃 하드웨어가 무한 범위를 지원하지 않는 경우
optim.coder.infbound
를 사용하십시오.임베디드 프로세서가 사용되는 고급 코드 최적화의 경우에는 Embedded Coder® 라이선스도 필요합니다.
quadprog
에 대한 옵션을 포함하고optimoptions
를 사용하여 옵션을 지정해야 합니다. 옵션에는'active-set'
으로 설정된Algorithm
옵션이 포함되어야 합니다.options = optimoptions("quadprog",Algorithm="active-set"); [x,fval,exitflag] = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0,options);
코드 생성에 지원되는 옵션은 다음과 같습니다.
Algorithm
—'active-set'
이어야 함ConstraintTolerance
MaxIterations
ObjectiveLimit
OptimalityTolerance
StepTolerance
UseCodegenSolver
생성된 코드는 옵션에 대해 제한적인 오류 검사를 수행합니다. 옵션을 업데이트할 때 권장하는 방법은 점 표기법이 아니라
optimoptions
를 사용하는 것입니다.opts = optimoptions('quadprog','Algorithm','active-set'); opts = optimoptions(opts,'MaxIterations',1e4); % Recommended opts.MaxIterations = 1e4; % Not recommended
파일에서 옵션을 불러오지 마십시오. 파일에서 불러오면 코드 생성이 실패할 수 있습니다. 대신 코드에서 옵션을 만드십시오.
지원되지 않는 옵션을 지정하면 일반적으로 코드 생성 시에 해당 옵션이 무시됩니다. 안정된 결과를 얻기 위해, 지원되는 옵션만 지정하십시오.
예제는 quadprog에 대한 코드 생성하기 항목을 참조하십시오.
버전 내역
R2006a 이전에 개발됨새로운 UseCodegenSolver
옵션을 true
로 설정하면 quadprog
함수가 코드 생성 시 생성된 소프트웨어와 동일한 버전을 사용합니다. 이 옵션을 사용하면 코드를 생성하거나 하드웨어에 코드를 배포하기 전에 솔버의 동작을 확인할 수 있습니다. 단정밀도 코드 생성을 지원하는 솔버의 경우, 생성된 코드도 단정밀도 하드웨어를 지원할 수 있습니다. 이 옵션은 코드 생성 시 포함할 수 있으며, 코드 생성에 아무런 영향을 미치지 않습니다. 따라서 제거할 필요 없이 그대로 두어도 됩니다. 생성된 코드가 MATLAB 코드와 동일하더라도 연결된 수학 라이브러리가 다를 수 있으므로 결과는 약간 다를 수 있습니다.
단정밀도 부동소수점 하드웨어의 경우 quadprog
를 사용하여 코드를 생성할 수 있습니다. 지침은 단정밀도 코드 생성 항목을 참조하십시오.
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
웹사이트 선택
번역된 콘텐츠를 보고 지역별 이벤트와 혜택을 살펴보려면 웹사이트를 선택하십시오. 현재 계신 지역에 따라 다음 웹사이트를 권장합니다:
또한 다음 목록에서 웹사이트를 선택하실 수도 있습니다.
사이트 성능 최적화 방법
최고의 사이트 성능을 위해 중국 사이트(중국어 또는 영어)를 선택하십시오. 현재 계신 지역에서는 다른 국가의 MathWorks 사이트 방문이 최적화되지 않았습니다.
미주
- América Latina (Español)
- Canada (English)
- United States (English)
유럽
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)