이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
fminimax
최대최소화(minimax) 제약 조건 문제 풀기
구문
설명
fminimax
는 일련의 목적 함수의 최댓값을 최소화하는 점을 찾습니다.
이 문제는 모든 유형의 제약 조건을 포함합니다. 자세히 설명하자면, fminimax
는 다음으로 지정된 문제의 최솟값을 구합니다.
여기서 b와 beq는 벡터이고, A와 Aeq는 행렬이고, c(x), ceq(x), F(x)는 벡터를 반환하는 함수입니다. F(x), c(x) 및 ceq(x)는 비선형 함수일 수 있습니다.
x, lb, ub는 벡터 또는 행렬로 전달될 수 있습니다. 행렬 인수 항목을 참조하십시오.
다음 항등식을 사용하여 fminimax
로 최대-최소 문제를 풀 수도 있습니다.
다음 형식의 문제를 풀 수 있습니다.
이 경우에는 AbsoluteMaxObjectiveCount
옵션을 사용합니다. 한 목적 함수의 절댓값을 사용하여 최대최소화 문제 풀기 항목을 참조하십시오.
은 x
= fminimax(fun
,x0
)x0
에서 시작하여 fun
에 정의된 함수의 최대최소화 해 x
를 구합니다.
참고
추가 파라미터 전달하기에는 필요한 경우 추가 파라미터를 목적 함수와 비선형 제약 조건 함수에 전달하는 방법이 설명되어 있습니다.
예제
sin
및 cos
의 최댓값 최소화하기
구간 [–pi,pi]
에서 sin
함수 및 cos
함수와 그 최댓값의 플롯을 만듭니다.
t = linspace(-pi,pi); plot(t,sin(t),'r-') hold on plot(t,cos(t),'b-'); plot(t,max(sin(t),cos(t)),'ko') legend('sin(t)','cos(t)','max(sin(t),cos(t))','Location','NorthWest')
이 플롯은 최댓값의 두 국소 최솟값을 보여주는데, 하나는 1 근방에 있고 다른 하나는 –2 근방에 있습니다. 1 근방에서 최솟값을 구합니다.
fun = @(x)[sin(x);cos(x)]; x0 = 1; x1 = fminimax(fun,x0)
Local minimum possible. Constraints satisfied. fminimax stopped because the size of the current search direction is less than twice the value of the step size tolerance and constraints are satisfied to within the value of the constraint tolerance.
x1 = 0.7854
–2 근방에서 최솟값을 구합니다.
x0 = -2; x2 = fminimax(fun,x0)
Local minimum possible. Constraints satisfied. fminimax stopped because the size of the current search direction is less than twice the value of the step size tolerance and constraints are satisfied to within the value of the constraint tolerance.
x2 = -2.3562
선형 제약 조건이 있는 최대최소화 문제 풀기
이 예제에 사용되는 목적 함수는 상수를 더한 선형 함수입니다. 이 목적 함수에 대한 설명과 플롯은 fminimax와 fminunc 비교하기 항목을 참조하십시오.
목적 함수를 세 개의 벡터 와 세 개의 상수 에 대해 형식의 선형 함수 세 개로 설정합니다.
a = [1;1]; b = [-1;1]; c = [0;-1]; a0 = 2; b0 = -3; c0 = 4; fun = @(x)[x*a+a0,x*b+b0,x*c+c0];
부등식 x(1) + 3*x(2) <= –4
를 적용하여 최대최소화 점을 찾습니다.
A = [1,3]; b = -4; x0 = [-1,-2]; x = fminimax(fun,x0,A,b)
Local minimum possible. Constraints satisfied. fminimax stopped because the size of the current search direction is less than twice the value of the step size tolerance and constraints are satisfied to within the value of the constraint tolerance.
x = 1×2
-5.8000 0.6000
범위 제약 조건이 있는 최대최소화 문제 풀기
이 예제에 사용되는 목적 함수는 상수를 더한 선형 함수입니다. 이 목적 함수에 대한 설명과 플롯은 fminimax와 fminunc 비교하기 항목을 참조하십시오.
목적 함수를 세 개의 벡터 와 세 개의 상수 에 대해 형식의 선형 함수 세 개로 설정합니다.
a = [1;1]; b = [-1;1]; c = [0;-1]; a0 = 2; b0 = -3; c0 = 4; fun = @(x)[x*a+a0,x*b+b0,x*c+c0];
–2 <= x(1) <= 2
와 –1 <= x(2) <= 1
로 범위를 설정하고 [0,0]
에서 시작하여 최대최소화 문제를 풉니다.
lb = [-2,-1];
ub = [2,1];
x0 = [0,0];
A = []; % No linear constraints
b = [];
Aeq = [];
beq = [];
[x,fval] = fminimax(fun,x0,A,b,Aeq,beq,lb,ub)
Local minimum possible. Constraints satisfied. fminimax stopped because the size of the current search direction is less than twice the value of the step size tolerance and constraints are satisfied to within the value of the constraint tolerance.
x = 1×2
-0.0000 1.0000
fval = 1×3
3.0000 -2.0000 3.0000
이 경우, 해는 고유하지 않습니다. 여러 점이 제약 조건을 충족하고 동일한 최대최소화 값을 갖습니다. 세 목적 함수의 최댓값을 나타내는 곡면을 플로팅하고 동일한 최대최소화 값을 가진 점을 보여주는 빨간색 선을 플로팅합니다.
[X,Y] = meshgrid(linspace(-2,2),linspace(-1,1)); Z = max(fun([X(:),Y(:)]),[],2); Z = reshape(Z,size(X)); surf(X,Y,Z,'LineStyle','none') view(-118,28) hold on line([-2,0],[1,1],[3,3],'Color','r','LineWidth',8) hold off
비선형 제약 조건을 적용하여 최대최소화 구하기
이 예제에 사용되는 목적 함수는 상수를 더한 선형 함수입니다. 이 목적 함수에 대한 설명과 플롯은 fminimax와 fminunc 비교하기 항목을 참조하십시오.
목적 함수를 세 개의 벡터 와 세 개의 상수 에 대해 형식의 선형 함수 세 개로 설정합니다.
a = [1;1]; b = [-1;1]; c = [0;-1]; a0 = 2; b0 = -3; c0 = 4; fun = @(x)[x*a+a0,x*b+b0,x*c+c0];
unitdisk
함수는 비선형 부등식 제약 조건 을 나타냅니다.
type unitdisk
function [c,ceq] = unitdisk(x) c = x(1)^2 + x(2)^2 - 1; ceq = [];
x0 = [0,0]
부터 시작하여 최대최소화 문제를 풉니다. 여기에는 unitdisk
제약 조건이 적용됩니다.
x0 = [0,0];
A = []; % No other constraints
b = [];
Aeq = [];
beq = [];
lb = [];
ub = [];
nonlcon = @unitdisk;
x = fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
Local minimum possible. Constraints satisfied. fminimax stopped because the size of the current search direction is less than twice the value of the step size tolerance and constraints are satisfied to within the value of the constraint tolerance.
x = 1×2
-0.0000 1.0000
한 목적 함수의 절댓값을 사용하여 최대최소화 문제 풀기
fminimax
는 AbsoluteMaxObjectiveCount
옵션을 사용하여 의 처음 몇 개 값에 대해 또는 의 최댓값을 최소화할 수 있습니다. 개 목적 함수의 절댓값을 최소화하려면 에서 까지가 절댓값 최소화를 위한 목적 함수가 되도록 목적 함수 값을 배열하고 AbsoluteMaxObjectiveCount
옵션을 k
로 설정하십시오.
이 예제에서는 sin
과 cos
의 최댓값을 최소화하고 sin
을 첫 번째 목적 함수로 지정하고 AbsoluteMaxObjectiveCount
를 1로 설정합니다.
fun = @(x)[sin(x),cos(x)]; options = optimoptions('fminimax','AbsoluteMaxObjectiveCount',1); x0 = 1; A = []; % No constraints b = []; Aeq = []; beq = []; lb = []; ub = []; nonlcon = []; x1 = fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
Local minimum possible. Constraints satisfied. fminimax stopped because the size of the current search direction is less than twice the value of the step size tolerance and constraints are satisfied to within the value of the constraint tolerance.
x1 = 0.7854
x0 = –2
에서 시작해 봅니다.
x0 = -2; x2 = fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
Local minimum possible. Constraints satisfied. fminimax stopped because the size of the current search direction is less than twice the value of the step size tolerance and constraints are satisfied to within the value of the constraint tolerance.
x2 = -3.1416
이 함수를 플로팅합니다.
t = linspace(-pi,pi); plot(t,max(abs(sin(t)),cos(t)))
AbsoluteMaxObjectiveCount
옵션의 효과를 확인하려면 이 플롯과 예제 sin 및 cos의 최댓값 최소화하기의 플롯을 비교해 보십시오.
최대최소화 값 구하기
최대최소화 점의 위치와 목적 함수의 값을 둘 다 구합니다. 이 목적 함수에 대한 설명과 플롯은 fminimax와 fminunc 비교하기 항목을 참조하십시오.
목적 함수를 세 개의 벡터 와 세 개의 상수 에 대해 형식의 선형 함수 세 개로 설정합니다.
a = [1;1]; b = [-1;1]; c = [0;-1]; a0 = 2; b0 = -3; c0 = 4; fun = @(x)[x*a+a0,x*b+b0,x*c+c0];
초기점을 [0,0]
으로 설정하고 최대최소화 점과 값을 구합니다.
x0 = [0,0]; [x,fval] = fminimax(fun,x0)
Local minimum possible. Constraints satisfied. fminimax stopped because the size of the current search direction is less than twice the value of the step size tolerance and constraints are satisfied to within the value of the constraint tolerance.
x = 1×2
-2.5000 2.2500
fval = 1×3
1.7500 1.7500 1.7500
세 목적 함수가 모두 최대최소화 점에서 동일한 값을 가집니다. 제약 조건이 없는 문제의 경우 일반적으로 해에서 두 개 이상의 목적 함수가 같은 값을 가집니다. 어떤 점에서 목적 함수 중 어느 것도 국소 최솟값을 갖지 않고 또한 그 점에서 가장 큰 값을 갖는 목적 함수가 하나만 있다면, 이 목적 함수는 이 점 근방에서 더 낮은 값을 가지는 게 가능합니다. 따라서 이러한 점은 해가 될 수 없습니다. 대부분의 경우, 해가 될 수 있는 점은 목적 함수가 교차하는 점입니다.
모든 최대최소화 출력값 구하기
이 예제에 사용되는 목적 함수는 상수를 더한 선형 함수입니다. 이 목적 함수에 대한 설명과 플롯은 fminimax와 fminunc 비교하기 항목을 참조하십시오.
목적 함수를 세 개의 벡터 와 세 개의 상수 에 대해 형식의 선형 함수 세 개로 설정합니다.
a = [1;1]; b = [-1;1]; c = [0;-1]; a0 = 2; b0 = -3; c0 = 4; fun = @(x)[x*a+a0,x*b+b0,x*c+c0];
부등식 x(1) + 3*x(2) <= –4
를 적용하여 최대최소화 점을 찾습니다.
A = [1,3]; b = -4; x0 = [-1,-2];
반복 과정을 표시하기 위한 옵션을 설정하고 모든 솔버 출력값을 구합니다.
options = optimoptions('fminimax','Display','iter'); Aeq = []; % No other constraints beq = []; lb = []; ub = []; nonlcon = []; [x,fval,maxfval,exitflag,output,lambda] =... fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
Objective Max Line search Directional Iter F-count value constraint steplength derivative Procedure 0 4 0 6 1 9 5 0 1 0.981 2 14 4.889 0 1 -0.302 Hessian modified twice 3 19 3.4 8.132e-09 1 -0.302 Hessian modified twice Local minimum possible. Constraints satisfied. fminimax stopped because the size of the current search direction is less than twice the value of the step size tolerance and constraints are satisfied to within the value of the constraint tolerance.
x = 1×2
-5.8000 0.6000
fval = 1×3
-3.2000 3.4000 3.4000
maxfval = 3.4000
exitflag = 4
output = struct with fields:
iterations: 4
funcCount: 19
lssteplength: 1
stepsize: 6.0684e-10
algorithm: 'active-set'
firstorderopt: []
constrviolation: 8.1323e-09
message: 'Local minimum possible. Constraints satisfied....'
lambda = struct with fields:
lower: [2x1 double]
upper: [2x1 double]
eqlin: [0x1 double]
eqnonlin: [0x1 double]
ineqlin: 0.2000
ineqnonlin: [0x1 double]
반환되는 정보를 검토합니다.
두 목적 함수 값이 해에서 같습니다.
솔버가 4회의 반복과 19회의 함수 실행을 통해 수렴됩니다.
lambda.ineqlin
값이 0이 아니며, 이는 선형 제약 조건이 해에서 활성화된 상태임을 나타냅니다.
입력 인수
fun
— 목적 함수
함수 핸들 | 함수 이름
목적 함수로, 함수 핸들 또는 함수 이름으로 지정됩니다. fun
은 벡터 x
를 받고 x
에서 계산된 목적 함수 값인 벡터 F
를 반환하는 함수입니다. 함수 fun
을 함수 파일에 대한 함수 핸들로 지정할 수 있습니다.
x = fminimax(@myfun,x0,goal,weight)
여기서 myfun
은 다음과 같은 MATLAB® 함수입니다.
function F = myfun(x) F = ... % Compute function values at x.
fun
을 익명 함수에 대한 함수 핸들로 지정할 수도 있습니다.
x = fminimax(@(x)sin(x.*x),x0,goal,weight);
fminimax
함수는 x
를 x0
인수 형태로 목적 함수와 비선형 제약 조건 함수에 전달합니다. 예를 들어, x0
이 5×3 배열이면 fminimax
함수는 x
를 5×3 배열로 fun
에 전달합니다. fminimax
함수는 x
를 열 벡터 x(:)
로 변환한 후 선형 제약 조건 행렬 A
또는 Aeq
와 x
를 곱합니다.
벡터 F(x)의 일부 요소가 갖는 최악의 경우의 절댓값을 최소화하려면(즉, min{max abs{F(x)} }), 이 목적 함수들을 F의 처음 요소가 되도록 분할하고 optimoptions
를 사용하여 AbsoluteMaxObjectiveCount
옵션을 이러한 목적 함수의 개수로 설정하십시오. 이러한 목적 함수들은 fun
이 반환하는 벡터 F
의 첫 요소들로 반드시 분할되어야 합니다. 예제는 한 목적 함수의 절댓값을 사용하여 최대최소화 문제 풀기 항목을 참조하십시오.
목적 함수의 기울기도 계산할 수 있고 다음 설정처럼 SpecifyObjectiveGradient
옵션도 true
인 것으로 가정하겠습니다.
options = optimoptions('fminimax','SpecifyObjectiveGradient',true)
이 경우, 함수 fun
은 두 번째 출력 인수에 x
에서 계산된 기울기 값 G
를 행렬로 반환해야 합니다. 기울기는 점 x
에서 계산된 각 F
의 편도함수 dF/dx로 구성됩니다. F
가 길이가 m
인 벡터이고 x
의 길이가 n
이면(여기서 n
은 x0
의 길이임), F(x)
의 기울기 G
는 n
×m
행렬입니다. 여기서 G(i,j)
는 x(i)
에 대한 F(j)
의 편도함수입니다(즉, G
의 j
번째 열이 j
번째 목적 함수 F(j)
의 기울기임). F
를 배열로 정의하면 앞에서 설명한 사항이 F
배열의 선형적 순서인 F(:)
에 적용됩니다. 어떤 경우든, G
는 2차원 행렬입니다.
참고
SpecifyObjectiveGradient
를 true
로 설정하는 것은 문제에 비선형 제약 조건이 없거나 문제에 SpecifyConstraintGradient
가 true
로 설정된 비선형 제약 조건이 있는 경우에만 효과가 있습니다. 내부적으로 목적 함수가 제약 조건에 내포되어 있으므로 솔버가 기울기를 추정하지 않기 위해서는 두 기울기(목적 함수와 제약 조건)가 모두 제공되어야 합니다.
데이터형: char
| string
| function_handle
x0
— 초기점
실수형 벡터 | 실수형 배열
초기점으로, 실수형 벡터나 실수형 배열로 지정됩니다. 솔버는 x0
의 요소 개수와 x0
의 크기를 사용하여 fun
이 받는 변수의 개수와 크기를 확인합니다.
예: x0 = [1,2,3,4]
데이터형: 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
nonlcon
— 비선형 제약 조건
함수 핸들 | 함수 이름
비선형 제약 조건으로, 함수 핸들 또는 함수 이름으로 지정됩니다. nonlcon
은 벡터 또는 배열 x
를 받고 두 개의 배열 c(x)
와 ceq(x)
를 반환하는 함수입니다.
c(x)
는x
의 비선형 부등식 제약 조건으로 구성된 배열입니다.fminimax
은 다음을 충족하려고 시도합니다.c(x) <= 0
for all entries ofc
.ceq(x)
는x
의 비선형 등식 제약 조건으로 구성된 배열입니다.fminimax
은 다음을 충족하려고 시도합니다.ceq(x) = 0
for all entries ofceq
.
예를 들면 다음을 입력합니다.
x = fminimax(@myfun,x0,...,@mycon)
여기서 mycon
은 다음과 같은 MATLAB 함수입니다.
function [c,ceq] = mycon(x) c = ... % Compute nonlinear inequalities at x. ceq = ... % Compute nonlinear equalities at x.
제약 조건의 기울기도 계산할 수 있고 다음 설정처럼 SpecifyConstraintGradient
옵션도 true
라고 가정하겠습니다.
options = optimoptions('fminimax','SpecifyConstraintGradient',true)
이 경우, 함수 nonlcon
은 세 번째 출력 인수와 네 번째 출력 인수에 c(x)
의 기울기 GC
와 ceq(x)
의 기울기 GCeq
도 반환해야 합니다. 제공되는 기울기를 받지 않는 솔버에 사용하기 위해 기울기를 “조건화”하는 방법에 대한 설명은 비선형 제약 조건 항목을 참조하십시오.
nonlcon
이 m
개의 성분으로 구성된 벡터 c
를 반환하고 x
의 길이가 n
이면(여기서 n
은 x0
의 길이임), c(x)
의 기울기 GC
는 n
×m
행렬입니다. 여기서 GC(i,j)
는 x(i)
에 대한 c(j)
의 편도함수입니다(즉, GC
의 j
번째 열이 j
번째 부등식 제약 조건 c(j)
의 기울기임). 마찬가지로, ceq
에 p
개의 성분이 있으면 ceq(x)
의 기울기 GCeq
는 n
×p
행렬입니다. 여기서 GCeq(i,j)
는 x(i)
에 대한 ceq(j)
의 편도함수입니다(즉, GCeq
의 j
번째 열이 j
번째 등식 제약 조건 ceq(j)
의 기울기임).
참고
SpecifyConstraintGradient
를 true
로 설정하는 것은 SpecifyObjectiveGradient
가 true
로 설정된 경우에만 효과가 있습니다. 내부적으로 목적 함수가 제약 조건에 내포되어 있으므로 솔버가 기울기를 추정하지 않기 위해서는 두 기울기(목적 함수와 제약 조건)가 모두 제공되어야 합니다.
참고
Optimization Toolbox™ 함수는 double
형 입력값만 받기 때문에 사용자 제공 목적 함수와 비선형 제약 조건 함수는 double
형 출력값을 반환해야 합니다.
필요한 경우 비선형 제약 조건 함수 nonlcon
을 파라미터화하는 방법에 대한 설명은 추가 파라미터 전달하기 항목을 참조하십시오.
데이터형: char
| function_handle
| string
options
— 최적화 옵션
optimoptions
의 출력값 | optimset
등이 반환하는 구조체
최적화 옵션으로, optimoptions
의 출력값 또는 optimset
등이 반환하는 구조체로 지정됩니다.
일부 옵션은 optimoptions
표시에 나타나지 않습니다. 이러한 옵션은 다음 표에서 기울임꼴로 표시되어 있습니다. 자세한 내용은 최적화 옵션 보기 항목을 참조하십시오.
optimset
에 대해 다른 이름을 가진 옵션에 대한 자세한 내용은 현재 옵션 이름과 이전 옵션 이름 항목을 참조하십시오.
옵션 | 설명 |
---|---|
AbsoluteMaxObjectiveCount | Fi의 절댓값을 최소화할 Fi의 요소 개수(x)입니다. 한 목적 함수의 절댓값을 사용하여 최대최소화 문제 풀기 항목을 참조하십시오.
|
ConstraintTolerance | 제약 조건 위반에 대한 종료 허용오차(음이 아닌 스칼라)입니다. 디폴트 값은
|
Diagnostics | 최소화하거나 풀려는 함수에 대한 진단 정보를 표시합니다. |
DiffMaxChange | 유한 차분 기울기에 대한 변수의 최대 변화량입니다(양의 스칼라). 디폴트 값은 |
DiffMinChange | 유한 차분 기울기에 대한 변수의 최소 변화량입니다(양의 스칼라). 디폴트 값은 |
| 표시 수준입니다(반복 과정 표시 참조):
|
FiniteDifferenceStepSize | 유한 차분에 대한 스칼라 또는 벡터 스텝 크기 인자입니다.
sign′(x) = sign(x) 입니다(단, sign′(0) = 1 임). 중심 유한 차분은 다음과 같습니다.
FiniteDifferenceStepSize 는 벡터로 확장됩니다. 디폴트 값은 전향 유한 차분의 경우 sqrt(eps) 이고 중심 유한 차분의 경우 eps^(1/3) 입니다.
|
FiniteDifferenceType | 기울기를 추정하는 데 사용되는 유한 차분의 유형으로, 알고리즘은 두 유형의 유한 차분을 모두 추정하는 경우 범위를 준수하려고 노력합니다. 예를 들어, 범위 외부에 있는 점에서 실행되는 것을 방지하기 위해 전향 차분이 아니라 후향 차분을 사용할 수 있습니다.
|
FunctionTolerance | 함수 값에 대한 종료 허용오차(음이 아닌 스칼라)입니다. 디폴트 값은
|
FunValCheck | 목적 함수 값과 제약 조건 값이 유효한지 여부를 나타내는 검사입니다. |
MaxFunctionEvaluations | 허용되는 함수 실행의 최대 횟수(음이 아닌 정수)입니다. 디폴트 값은
|
MaxIterations | 허용되는 최대 반복 횟수(음이 아닌 정수)입니다. 디폴트 값은
|
MaxSQPIter | 허용되는 최대 SQP 반복 횟수입니다(양의 정수). 디폴트 값은 |
MeritFunction | 이 옵션이 |
OptimalityTolerance | 1차 최적성에 대한 종료 허용오차(음이 아닌 스칼라)입니다. 디폴트 값은
|
OutputFcn | 각 반복마다 최적화 함수가 호출하는 하나 이상의 사용자 정의 함수입니다. 함수 핸들 또는 함수 핸들 셀형 배열을 전달합니다. 디폴트 값은 없음( |
PlotFcn | 알고리즘이 실행되는 동안 다양한 진행률 측정값을 보여주는 플롯입니다. 미리 정의된 플롯에서 선택하거나 사용자가 직접 작성할 수 있습니다. 이름, 함수 핸들 또는 이름이나 함수 핸들로 구성된 셀형 배열을 전달합니다. 사용자 지정 플롯 함수의 경우, 함수 핸들을 전달하십시오. 디폴트 값은 없음(
사용자 지정 플롯 함수는 출력 함수와 동일한 구문을 사용합니다. Optimization Toolbox의 출력 함수 항목과 Output Function and Plot Function Syntax 항목을 참조하십시오.
|
RelLineSrchBnd | 직선 탐색 스텝 길이에 대한 상대적 범위(음이 아닌 실수 스칼라 값)입니다. |
RelLineSrchBndDuration |
|
SpecifyConstraintGradient | 사용자가 정의하는 비선형 제약 조건 함수의 기울기입니다. 이 옵션이
|
SpecifyObjectiveGradient | 사용자가 정의하는 목적 함수의 기울기입니다. 기울기를 정의하는 방법을 보려면
|
StepTolerance |
|
TolConSQP | 내부 반복 SQP 제약 조건 위반에 대한 종료 허용오차입니다(양의 스칼라). 디폴트 값은 |
TypicalX | 일반적인 |
UseParallel | 병렬 연산을 사용하기 위한 옵션입니다. 이 옵션이 |
예: optimoptions('fminimax','PlotFcn','optimplotfval')
problem
— 문제 구조체
구조체
문제 구조체로, 다음 표에 있는 필드를 가진 구조체로 지정됩니다.
필드 이름 | 항목 |
---|---|
| 목적 함수 fun |
| x 의 초기점 |
| 선형 부등식 제약 조건에 대한 행렬 |
| 선형 부등식 제약 조건에 대한 벡터 |
| 선형 등식 제약 조건에 대한 행렬 |
| 선형 등식 제약 조건에 대한 벡터 |
lb | 하한으로 구성된 벡터 |
ub | 상한으로 구성된 벡터 |
| 비선형 제약 조건 함수 |
| 'fminimax' |
| optimoptions 로 생성되는 옵션 |
problem
구조체에 적어도 objective
, x0
, solver
, options
필드는 반드시 제공해야 합니다.
데이터형: struct
출력 인수
x
— 해(Solution)
실수형 벡터 | 실수형 배열
해로, 실수형 벡터나 실수형 배열로 반환됩니다. x
의 크기는 x0
의 크기와 같습니다. 일반적으로 x
는 exitflag
가 양수인 경우 문제에 대한 국소해입니다. 해의 품질에 대한 자세한 내용은 솔버가 성공한 경우 항목을 참조하십시오.
fval
— 해에서 계산된 목적 함수 값
실수형 배열
해에서 계산된 목적 함수 값으로, 실수형 배열로 반환됩니다. 일반적으로 fval
= fun(x)
입니다.
maxfval
— 해에서 계산된 목적 함수 값의 최댓값
실수형 스칼라
해에서 계산된 목적 함수 값의 최댓값으로, 실수형 스칼라로 반환됩니다. maxfval = max(fval(:))
.
exitflag
— fminimax
가 중지된 이유
정수
fminimax
가 중지된 이유로, 정수로 반환됩니다.
| 함수가 해 |
| 탐색 방향의 크기가 지정된 허용오차보다 작고 제약 조건 위반 값이 |
| 방향 도함수의 크기가 지정된 허용오차보다 작고 제약 조건 위반 값이 |
| 반복 횟수가 |
| 출력 함수나 플롯 함수에 의해 중지되었습니다. |
| 실현가능점을 찾을 수 없습니다. |
output
— 최적화 과정에 대한 정보
구조체
최적화 과정에 대한 정보로, 다음 표에 있는 필드를 가진 구조체로 반환됩니다.
iterations | 수행된 반복 횟수 |
funcCount | 함수 실행 횟수 |
lssteplength | 탐색 방향을 기준으로 한 직선 탐색 스텝의 크기 |
constrviolation | 제약 조건 함수의 최댓값 |
stepsize |
|
algorithm | 사용된 최적화 알고리즘 |
firstorderopt | 1차 최적성에 대한 측정값 |
message | 종료 메시지 |
알고리즘
fminimax
는 최대최소화 문제를 목표 달성 문제로 변환한 다음, 변환된 목표 달성 문제를 fgoalattain
을 사용하여 푸는 방식으로 최대최소화 문제를 풉니다. 이 변환에서는 모든 목표를 0으로 설정하고 모든 가중치를 1로 설정합니다. Multiobjective Optimization Algorithms의 수식 1 항목을 참조하십시오.
대체 기능
앱
최적화 라이브 편집기 작업은 fminimax
에 대한 시각적 인터페이스를 제공합니다.
확장 기능
자동 병렬 지원
Parallel Computing Toolbox™를 사용해 자동 병렬 계산을 실행하여 코드 실행 속도를 높일 수 있습니다.
병렬로 실행하려면 'UseParallel'
옵션을 true
로 설정하십시오.
options = optimoptions('
solvername
','UseParallel',true)
자세한 내용은 Using Parallel Computing in Optimization Toolbox 항목을 참조하십시오.
버전 내역
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)