이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
quadprog
2차 계획법
구문
설명
선형 제약 조건이 있는 2차 목적 함수를 위한 솔버입니다.
quadprog는 다음으로 지정된 문제의 최솟값을 구합니다.
H, A , Aeq는 행렬이고, f, b, beq, lb, ub, x는 벡터입니다.
f, lb 및 ub를 벡터나 행렬로 전달할 수 있습니다. 행렬 인수 항목을 참조하십시오.
참고
quadprog
솔버는 솔버 기반 접근법에만 적용됩니다. 두 가지 최적화 접근법에 대한 설명은 먼저 문제 기반 접근법 또는 솔버 기반 접근법 중 선택하기 항목을 참조하십시오.
는 위의 문제를 풀되, 여기에는 제한 사항 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
구조체를 만듭니다.
예제
선형 제약 조건이 있는 2차 계획법
다음 함수의 최솟값을 구합니다.
여기에는 다음 제약 조건이 적용됩니다.
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.
최종점, 함수 값, 종료 플래그를 검토합니다.
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
선형 등식 제약 조건이 있는 2차 계획법
다음 함수의 최솟값을 구합니다.
여기에는 다음 제약 조건이 적용됩니다.
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.
최종점, 함수 값, 종료 플래그를 검토합니다.
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차 최소화
다음 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.
x = 3×1
0.0000
0.5000
0.0000
디폴트가 아닌 옵션을 이용한 2차 최소화
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 2.975398e-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
prob2struct
에서 생성한 2차 문제
문제 기반 최적화 워크플로의 절차에 따라 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.
x = 2×1
0.6667
1.3333
fval = -8.2222
quadprog
목적 함수 값 반환하기
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
최적화 과정 검토하기
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.499997e+00 0.000000e+00 1.221903e-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: []
quadprog
라그랑주 승수 반환하기
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
warm start 객체 반환하기
이후 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.
입력 인수
H
— 2차 목적 함수 항
대칭 실수 행렬
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
— 선형 목적 함수 항
실수형 벡터
선형 목적 함수 항으로, 실수형 벡터로 지정됩니다. f
는 표현식 1/2*x'*H*x + f'*x
에서 선형 항을 나타냅니다.
예: [1;3;2]
데이터형: double
A
— 선형 부등식 제약 조건
실수 행렬
선형 부등식 제약 조건으로, 실수 행렬로 지정됩니다. 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
을 사용하십시오.
데이터형: double
b
— 선형 부등식 제약 조건
실수형 벡터
선형 부등식 제약 조건으로, 실수 벡터로 지정됩니다. b
는 A
행렬과 관련된, 요소를 M
개 가진 벡터입니다. b
를 행 벡터로 전달하면 솔버는 내부적으로 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
을 사용하십시오.
데이터형: double
Aeq
— 선형 등식 제약 조건
실수 행렬
선형 등식 제약 조건으로, 실수 행렬로 지정됩니다. Aeq
는 Me
×N
행렬입니다. 여기서 Me
는 부등식 개수이고 N
은 변수 개수(x0
의 요소 개수)입니다. 대규모 문제의 경우, Aeq
를 희소 행렬로 전달하십시오.
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
을 사용하십시오.
데이터형: double
beq
— 선형 등식 제약 조건
실수형 벡터
선형 등식 제약 조건으로, 실수 벡터로 지정됩니다. beq
는 Aeq
행렬과 관련된, 요소를 Me
개 가진 벡터입니다. beq
를 행 벡터로 전달하면 솔버는 내부적으로 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
을 사용하십시오.
데이터형: double
lb
— 하한
실수형 벡터 | 실수형 배열
하한으로, 실수형 벡터나 실수형 배열로 지정됩니다. 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
ub
— 상한
실수형 벡터 | 실수형 배열
상한으로, 실수형 벡터나 실수형 배열로 지정됩니다. 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
— 초기점
실수형 벡터
초기점으로, 실수형 벡터로 지정됩니다. 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]
데이터형: double
options
— 최적화 옵션
optimoptions
의 출력값 | optimset
등이 반환하는 구조체
최적화 옵션으로, 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 | 알고리즘의 내부 선형 솔버 유형입니다.
|
'active-set'
알고리즘만 해당
ConstraintTolerance | 제약 조건 위반에 대한 허용오차로, 양의 스칼라입니다. 디폴트 값은
|
ObjectiveLimit | 허용오차(중지 기준)로, 스칼라입니다. 목적 함수 값이 |
problem
— 문제 구조체
구조체
문제 구조체로, 다음 필드를 가진 구조체로 지정됩니다.
| 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
ws
— warm start 객체
optimwarmstart
를 사용하여 생성되는 객체
warm start 객체로, optimwarmstart
를 사용하여 생성되는 객체로 지정됩니다. warm start 객체는 시작점과 옵션, 그리고 코드 생성 시 메모리 크기에 대한 선택적 데이터를 포함합니다. Warm Start Best Practices 항목을 참조하십시오.
예: ws = optimwarmstart(x0,options)
출력 인수
x
— 해(Solution)
실수형 벡터
해로, 실수형 벡터로 반환됩니다. x
는 모든 범위와 선형 제약 조건이 적용된 1/2*x'*H*x + f'*x
를 최소화하는 벡터입니다. x
는 비볼록 문제의 경우 국소 최솟값일 수 있습니다. 볼록 문제의 경우, x
는 전역 최솟값입니다. 자세한 내용은 국소 최적해와 전역 최적해 항목을 참조하십시오.
wsout
— 해 warm start 객체
QuadprogWarmStart
객체
해 warm start 객체로, QuadprogWarmStart
객체로 반환됩니다. 해에 해당하는 점은 wsout.X
입니다.
이후 quadprog
호출에서 wsout
를 입력 warm start 객체로 사용할 수 있습니다.
fval
— 해에서 계산된 목적 함수 값
실수형 스칼라
해에서 계산된 목적 함수 값으로, 실수형 스칼라로 반환됩니다. fval
은 해 x
에서 1/2*x'*H*x + f'*x
를 계산한 값입니다.
exitflag
— quadprog
가 중지된 이유
정수
quadprog
가 중지된 이유로, 아래 표에 설명되어 있는 정수로 반환됩니다.
모든 알고리즘 | |
| 함수가 해 |
| 반복 횟수가 |
| 문제가 실현 가능하지 않습니다. 또는 |
| 문제가 비유계입니다. |
| |
| 스텝 크기가 |
| 비볼록 문제가 감지되었습니다. |
| 스텝 방향을 계산할 수 없습니다. |
| |
| 국소 최솟값을 찾았거나, 최솟값이 고유하지 않습니다. |
| 목적 함수 값의 변화량이 |
| 현재 탐색 방향이 하강 방향이 아닙니다. 더 이상 진행할 수 없습니다. |
| |
|
참고
실제로 문제가 비유계인 경우 'active-set'
알고리즘은 종료 플래그 0
을 발생시키고 중단되기도 합니다. 반복 한도를 더 높이 설정해도 종료 플래그 0
을 발생시킵니다.
output
— 최적화 과정에 대한 정보
구조체
최적화 과정에 대한 정보로, 다음 필드를 가진 구조체로 반환됩니다.
| 수행된 반복 횟수 |
| 사용된 최적화 알고리즘 |
| 총 PCG 반복 횟수( |
constrviolation | 제약 조건 함수의 최댓값 |
firstorderopt | 1차 최적성에 대한 측정값 |
linearsolver | 내부 선형 솔버의 유형으로, |
message | 종료 메시지 |
lambda
— 해에서의 라그랑주 승수
구조체
해에서의 라그랑주 승수로, 다음 필드를 가진 구조체로 반환됩니다.
| 하한 |
| 상한 |
| 선형 부등식 |
| 선형 등식 |
자세한 내용은 라그랑주 승수 구조체 항목을 참조하십시오.
알고리즘
'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.
확장 기능
C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.
사용법 관련 참고 및 제한 사항:
quadprog
은codegen
(MATLAB Coder) 함수 또는 MATLAB® Coder™ 앱을 사용한 코드 생성을 지원합니다. 코드를 생성하려면 MATLAB Coder 라이선스가 있어야 합니다.타깃 하드웨어는 표준 배정밀도 부동소수점 계산을 지원해야 합니다. 단정밀도 또는 고정소수점 계산에 대해서는 코드를 생성할 수 없습니다.
코드 생성 대상은 MATLAB 솔버와 동일한 수학 커널 라이브러리를 사용하지 않습니다. 따라서 특히 조건이 나쁜 문제인 경우에 코드 생성의 해가 솔버의 해와 다를 수 있습니다.
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
생성된 코드는 옵션에 대해 제한적인 오류 검사를 수행합니다. 옵션을 업데이트할 때 권장하는 방법은 점 표기법이 아니라
optimoptions
를 사용하는 것입니다.opts = optimoptions('quadprog','Algorithm','active-set'); opts = optimoptions(opts,'MaxIterations',1e4); % Recommended opts.MaxIterations = 1e4; % Not recommended
파일에서 옵션을 불러오지 마십시오. 파일에서 불러오면 코드 생성이 실패할 수 있습니다. 대신 코드에서 옵션을 만드십시오.
지원되지 않는 옵션을 지정하면 일반적으로 코드 생성 시에 해당 옵션이 무시됩니다. 안정된 결과를 얻기 위해, 지원되는 옵션만 지정하십시오.
예제는 Generate Code for quadprog 항목을 참조하십시오.
버전 내역
R2006a 이전에 개발됨
MATLAB 명령
다음 MATLAB 명령에 해당하는 링크를 클릭했습니다.
명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)