이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

fminimax

최대최소화(minimax) 제약 조건 문제 풀기

설명

fminimax는 일련의 목적 함수의 최댓값을 최소화하는 점을 찾습니다.

이 문제는 모든 유형의 제약 조건을 포함합니다. 자세히 설명하자면, fminimax는 다음으로 지정된 문제의 최솟값을 구합니다.

minxmaxiFi(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는 벡터 또는 행렬로 전달될 수 있습니다. 행렬 인수 항목을 참조하십시오.

다음 항등식을 사용하여 fminimax로 최대-최소 문제를 풀 수도 있습니다.

maxxminiFi(x)=minxmaxi(Fi(x)).

다음 형식의 문제를 풀 수 있습니다.

minxmaxi|Fi(x)|

이 경우에는 AbsoluteMaxObjectiveCount 옵션을 사용합니다. 한 목적 함수의 절댓값을 사용하여 최대최소화 문제 풀기 항목을 참조하십시오.

예제

x = fminimax(fun,x0)x0에서 시작하여 fun에 정의된 함수의 최대최소화 해 x를 구합니다.

참고

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

예제

x = fminimax(fun,x0,A,b)는 최대최소화 문제를 풉니다. 여기에는 선형 부등식 A*x ≤ b이 적용됩니다.

x = fminimax(fun,x0,A,b,Aeq,beq)는 최대최소화 문제를 풉니다. 여기에는 선형 등식 Aeq*x = beq도 적용됩니다. 부등식이 존재하지 않는 경우 A = []b = []을 설정하십시오.

예제

x = fminimax(fun,x0,A,b,Aeq,beq,lb,ub)는 최대최소화 문제를 풀며, 여기에는 범위 lb  x  ub가 적용됩니다. 등식이 존재하지 않는 경우 Aeq = []beq = []을 설정하십시오. x(i)의 하한이 비유계인 경우 lb(i) = –Inf를 설정하고, x(i)의 상한이 비유계인 경우 ub(i) = Inf를 설정하십시오.

참고

Iterations Can Violate Constraints 항목을 참조하십시오.

참고

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

예제

x = fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)은 최대최소화 문제를 풀며, 여기에는 nonlcon에 정의된 비선형 부등식 c(x) 또는 등식 ceq(x)가 적용됩니다. 이 함수는 c(x) ≤ 0ceq(x) = 0이 성립하도록 최적화합니다. 범위가 존재하지 않을 경우 lb = [] 또는 ub = []을 설정하거나 둘 다 설정하십시오.

예제

x = fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)options에 지정된 최적화 옵션을 사용하여 최대최소화 문제를 풉니다. 이 옵션을 설정하려면 optimoptions를 사용하십시오.

x = fminimax(problem)problem에 대한 최대최소화 문제를 해결합니다. 여기서 problemproblem에 설명되어 있는 구조체입니다. problem 구조체는 작업 내보내기에 설명된 대로 최적화 앱에서 문제를 내보내어 만들 수 있습니다.

예제

[x,fval] = fminimax(___)는 임의의 구문에 대해 해 x에서 fun을 통해 계산된 목적 함수 값을 반환합니다.

예제

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

예제

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

예제

모두 축소

구간 [–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

이 예제에 사용되는 목적 함수는 상수를 더한 선형 함수입니다. 이 목적 함수에 대한 설명과 플롯은 Compare fminimax and fminunc 항목을 참조하십시오.

목적 함수를 세 개의 벡터 v와 세 개의 상수 v0에 대해 dot(x,v)+v0 형식의 선형 함수 세 개로 설정합니다.

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

이 예제에 사용되는 목적 함수는 상수를 더한 선형 함수입니다. 이 목적 함수에 대한 설명과 플롯은 Compare fminimax and fminunc 항목을 참조하십시오.

목적 함수를 세 개의 벡터 v와 세 개의 상수 v0에 대해 dot(x,v)+v0 형식의 선형 함수 세 개로 설정합니다.

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

이 예제에 사용되는 목적 함수는 상수를 더한 선형 함수입니다. 이 목적 함수에 대한 설명과 플롯은 Compare fminimax and fminunc 항목을 참조하십시오.

목적 함수를 세 개의 벡터 v와 세 개의 상수 v0에 대해 dot(x,v)+v0 형식의 선형 함수 세 개로 설정합니다.

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 함수는 비선형 부등식 제약 조건 x21을 나타냅니다.

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

fminimaxAbsoluteMaxObjectiveCount 옵션을 사용하여 i의 처음 몇 개 값에 대해 Fi(x) 또는 |Fi(x)|의 최댓값을 최소화할 수 있습니다. k개 목적 함수의 절댓값을 최소화하려면 F1(x)에서 Fk(x)까지가 절댓값 최소화를 위한 목적 함수가 되도록 목적 함수 값을 배열하고 AbsoluteMaxObjectiveCount 옵션을 k로 설정하십시오.

이 예제에서는 sincos의 최댓값을 최소화하고 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의 최댓값 최소화하기의 플롯을 비교해 보십시오.

최대최소화 점의 위치와 목적 함수의 값을 둘 다 구합니다. 이 목적 함수에 대한 설명과 플롯은 Compare fminimax and fminunc 항목을 참조하십시오.

목적 함수를 세 개의 벡터 v와 세 개의 상수 v0에 대해 dot(x,v)+v0 형식의 선형 함수 세 개로 설정합니다.

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

세 목적 함수가 모두 최대최소화 점에서 동일한 값을 가집니다. 제약 조건이 없는 문제의 경우 일반적으로 해에서 두 개 이상의 목적 함수가 같은 값을 가집니다. 어떤 점에서 목적 함수 중 어느 것도 국소 최솟값을 갖지 않고 또한 그 점에서 가장 큰 값을 갖는 목적 함수가 하나만 있다면, 이 목적 함수는 이 점 근방에서 더 낮은 값을 가지는 게 가능합니다. 따라서 이러한 점은 해가 될 수 없습니다. 대부분의 경우, 해가 될 수 있는 점은 목적 함수가 교차하는 점입니다.

이 예제에 사용되는 목적 함수는 상수를 더한 선형 함수입니다. 이 목적 함수에 대한 설명과 플롯은 Compare fminimax and fminunc 항목을 참조하십시오.

목적 함수를 세 개의 벡터 v와 세 개의 상수 v0에 대해 dot(x,v)+v0 형식의 선형 함수 세 개로 설정합니다.

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: '...'

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은 벡터 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);

xF의 사용자 정의 값이 배열인 경우, fminimax는 선형 인덱싱을 사용하여 배열을 벡터로 변환합니다(배열 인덱싱 (MATLAB) 참조).

벡터 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이면(여기서 nx0의 길이임), F(x)의 기울기 Gnxm 행렬입니다. 여기서 G(i,j)x(i)에 대한 F(j)의 편도함수입니다(즉, Gj번째 열이 j번째 목적 함수 F(j)의 기울기임). F를 배열로 정의하면 앞에서 설명한 사항이 F 배열의 선형적 순서인 F(:)에 적용됩니다. 어떤 경우든, G는 2차원 행렬입니다.

참고

SpecifyObjectiveGradienttrue로 설정하는 것은 문제에 비선형 제약 조건이 없거나 문제에 SpecifyConstraintGradienttrue로 설정된 비선형 제약 조건이 있는 경우에만 효과가 있습니다. 내부적으로 목적 함수가 제약 조건에 내포되어 있으므로 솔버가 기울기를 추정하지 않기 위해서는 두 기울기(목적 함수와 제약 조건)가 모두 제공되어야 합니다.

데이터형: char | string | function_handle

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

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

데이터형: double

선형 부등식 제약 조건으로, 실수 행렬로 지정됩니다. AMxN 행렬입니다. 여기서 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는 크기가 MxN인 행렬입니다.

예를 들어 다음을 지정하려면

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

선형 등식 제약 조건으로, 실수 행렬로 지정됩니다. AeqMexN 행렬입니다. 여기서 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는 크기가 MexN인 행렬입니다.

예를 들어 다음을 지정하려면

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의 비선형 부등식 제약 조건으로 구성된 배열입니다. fminimax은 다음을 충족하려고 시도합니다.

    c(x) <= 0 for all entries of c.

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

    ceq(x) = 0 for all entries of ceq.

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

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)의 기울기 GCceq(x)의 기울기 GCeq도 반환해야 합니다. 제공되는 기울기를 받지 않는 솔버에 사용하기 위해 기울기를 “조건화”하는 방법에 대한 설명은 비선형 제약 조건 항목을 참조하십시오.

nonlconm개의 성분으로 구성된 벡터 c를 반환하고 x의 길이가 n이면(여기서 nx0의 길이임), c(x)의 기울기 GCnxm 행렬입니다. 여기서 GC(i,j)x(i)에 대한 c(j)의 편도함수입니다(즉, GCj번째 열이 j번째 부등식 제약 조건 c(j)의 기울기임). 마찬가지로, ceqp개의 성분이 있으면 ceq(x)의 기울기 GCeqnxp 행렬입니다. 여기서 GCeq(i,j)x(i)에 대한 ceq(j)의 편도함수입니다(즉, GCeqj번째 열이 j번째 등식 제약 조건 ceq(j)의 기울기임).

참고

SpecifyConstraintGradienttrue로 설정하는 것은 SpecifyObjectiveGradienttrue로 설정된 경우에만 효과가 있습니다. 내부적으로 목적 함수가 제약 조건에 내포되어 있으므로 솔버가 기울기를 추정하지 않기 위해서는 두 기울기(목적 함수와 제약 조건)가 모두 제공되어야 합니다.

참고

Optimization Toolbox™ 함수는 double형 입력값만 받기 때문에 사용자 제공 목적 함수와 비선형 제약 조건 함수는 double형 출력값을 반환해야 합니다.

필요한 경우 비선형 제약 조건 함수 nonlcon을 파라미터화하는 방법에 대한 설명은 추가 파라미터 전달하기 항목을 참조하십시오.

데이터형: char | function_handle | string

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

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

optimset에 대해 다른 이름을 가진 옵션에 대한 자세한 내용은 현재 옵션 이름 테이블과 이전 옵션 이름 테이블 항목을 참조하십시오.

옵션설명
AbsoluteMaxObjectiveCount

Fi의 절댓값을 최소화할 Fi의 요소 개수(x)입니다. 한 목적 함수의 절댓값을 사용하여 최대최소화 문제 풀기 항목을 참조하십시오.

optimset의 경우, 이 이름은 MinAbsMax입니다.

ConstraintTolerance

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

optimset의 경우, 이 이름은 TolCon입니다.

Diagnostics

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

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배 더 많지만 일반적으로 더 정확합니다.

알고리즘은 두 유형의 유한 차분을 모두 추정하는 경우 범위를 준수하려고 노력합니다. 예를 들어, 범위 외부에 있는 점에서 실행되는 것을 방지하기 위해 전향 차분이 아니라 후향 차분을 사용할 수 있습니다.

optimset의 경우, 이 이름은 FinDiffType입니다.

FunctionTolerance

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

optimset의 경우, 이 이름은 TolFun입니다.

FunValCheck

목적 함수 값과 제약 조건 값이 유효한지 여부를 나타내는 검사입니다. 'on'은 목적 함수 또는 제약 조건이 complex, Inf 또는 NaN 값을 반환하는 경우에 오류를 표시합니다. 디폴트 값인 'off'는 오류를 표시하지 않습니다.

MaxFunctionEvaluations

허용되는 최대 함수 실행 횟수입니다(양의 정수). 디폴트 값은 100*numberOfVariables입니다. 허용오차와 중지 기준 항목과 반복 횟수와 함수 실행 횟수 항목을 참조하십시오.

optimset의 경우, 이 이름은 MaxFunEvals입니다.

MaxIterations

허용되는 최대 반복 횟수입니다(양의 정수). 디폴트 값은 400입니다. 허용오차와 중지 기준 항목과 반복 횟수와 함수 실행 횟수 항목을 참조하십시오.

optimset의 경우, 이 이름은 MaxIter입니다.

MaxSQPIter

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

MeritFunction

이 옵션이 'multiobj'(디폴트 값)로 설정된 경우 목표 달성 또는 최대최소화 이득 함수를 사용합니다. 이 옵션이 'singleobj'로 설정된 경우 fmincon 이득 함수를 사용합니다.

OptimalityTolerance

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

optimset의 경우, 이 이름은 TolFun입니다.

OutputFcn

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

PlotFcn

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

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

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

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

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

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

사용자 지정 플롯 함수를 작성하는 방법에 대한 자세한 내용은 Plot Function Syntax 항목을 참조하십시오.

optimset의 경우, 이 이름은 PlotFcns입니다.

RelLineSrchBnd

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

RelLineSrchBndDuration

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

SpecifyConstraintGradient

사용자가 정의하는 비선형 제약 조건 함수의 기울기입니다. 이 옵션이 true로 설정된 경우, fminimax에서 제약 조건 함수가 4개의 출력값을 가져야 합니다. 이에 대한 설명은 nonlcon에 나와 있습니다. 이 옵션이 false(디폴트 값)로 설정된 경우, fminimax 함수는 유한 차분을 사용하여 비선형 제약 조건의 기울기를 추정합니다.

optimset의 경우, 이 이름은 GradConstr이고 값은 'on' 또는 'off'입니다.

SpecifyObjectiveGradient

사용자가 정의하는 목적 함수의 기울기입니다. 기울기를 정의하는 방법을 보려면 fun에 대한 설명을 참조하십시오. fminimax가 목적 함수에 대한 사용자 정의 기울기를 사용하도록 하려면 이 옵션을 true로 설정하십시오. 디폴트 값 false를 설정하면 fminimax이 유한 차분을 사용하여 기울기를 추정합니다.

optimset의 경우, 이 이름은 GradObj이고 값은 'on' 또는 'off'입니다.

StepTolerance

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

optimset의 경우, 이 이름은 TolX입니다.

TolConSQP

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

TypicalX

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

UseParallel

병렬 연산을 사용하기 위한 옵션입니다. 이 옵션이 true로 설정된 경우, fminimax 함수는 병렬로 기울기를 추정합니다. 디폴트 값은 false입니다. 병렬 연산 항목을 참조하십시오.

예: optimoptions('fminimax','PlotFcn','optimplotfval')

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

필드 이름항목

objective

목적 함수 fun

x0

x의 초기점

Aineq

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

bineq

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

Aeq

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

beq

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

nonlcon

비선형 제약 조건 함수

solver

'fminimax'

options

optimoptions로 생성되는 옵션

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

problem 구조체를 얻을 수 있는 가장 간단한 방법은 최적화 앱에서 문제를 내보내는 것입니다.

데이터형: struct

출력 인수

모두 축소

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

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

해에서 계산된 목적 함수 값의 최댓값으로, 실수형 스칼라로 반환됩니다. maxfval = max(fval(:)).

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

1

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

4

탐색 방향의 크기가 지정된 허용오차보다 작고 제약 조건 위반 값이 options.ConstraintTolerance보다 작습니다.

5

방향 도함수의 크기가 지정된 허용오차보다 작고 제약 조건 위반 값이 options.ConstraintTolerance보다 작습니다.

0

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

-1

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

-2

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

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

iterations

수행된 반복 횟수

funcCount

함수 실행 횟수

lssteplength

탐색 방향을 기준으로 한 직선 탐색 스텝의 크기

constrviolation

제약 조건 함수의 최댓값

stepsize

x의 마지막 변위의 길이

algorithm

사용된 최적화 알고리즘

firstorderopt

1차 최적성에 대한 측정값

message

종료 메시지

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

lower

lb에 대응하는 하한

upper

ub에 대응하는 상한

ineqlin

Ab에 대응하는 선형 부등식

eqlin

Aeqbeq에 대응하는 선형 등식

ineqnonlin

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

eqnonlin

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

알고리즘

fminimax는 최대최소화 문제를 목표 달성 문제로 변환한 다음, 변환된 목표 달성 문제를 fgoalattain을 사용하여 푸는 방식으로 최대최소화 문제를 풉니다. 이 변환에서는 모든 목표를 0으로 설정하고 모든 가중치를 1로 설정합니다. Multiobjective Optimization Algorithms수식 1 항목을 참조하십시오.

확장 기능

R2006a 이전에 개발됨