Main Content

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

비선형 제약 조건

여러 최적화 솔버가 비선형 제약 조건을 허용하며, 여기에는 fmincon, fseminf, fgoalattain, fminimaxGlobal Optimization Toolbox에서 제공하는 솔버인 ga (Global Optimization Toolbox), gamultiobj (Global Optimization Toolbox), patternsearch (Global Optimization Toolbox), paretosearch (Global Optimization Toolbox), GlobalSearch (Global Optimization Toolbox), MultiStart (Global Optimization Toolbox)가 포함됩니다. 비선형 제약 조건을 사용하면 매끄러운 함수로 나타낼 수 있는 영역으로 해를 제한할 수 있습니다.

비선형 부등식 제약 조건은 c(x) ≤ 0 형식입니다. 여기서 c는 각 제약 조건이 하나의 성분으로 구성된 벡터입니다. 이와 유사하게, 비선형 등식 제약 조건은 ceq(x) = 0 형식입니다.

참고

비선형 제약 조건 함수는 부등식 제약 조건 함수 c와 등식 제약 조건 함수 ceq가 존재하지 않을 경우에도 두 제약 조건 함수 모두를 반환해야 합니다. 존재하지 않는 제약 조건에 대해서는 빈 요소 []을 반환해야 합니다.

예를 들어, 제약 조건으로 다음 부등식을 갖는다고 가정하겠습니다.

x129+x2241,x2x121.

다음과 같이 함수 파일에 이 제약 조건을 작성합니다.

function [c,ceq] = ellipseparabola(x)
c(1) = (x(1)^2)/9 + (x(2)^2)/4 - 1;
c(2) = x(1)^2 - x(2) - 1;
ceq = [];
end
ellipseparabola는 비선형 등식 제약 조건 함수인 ceq에 대해 빈 요소 []을 반환합니다. 또한, 두 번째 부등식이 ≤ 0 형식으로 다시 작성되었습니다.

ellipseparabola 제약 조건이 적용된 함수 exp(x(1) + 2*x(2))를 최소화합니다.

fun = @(x)exp(x(1) + 2*x(2));
nonlcon = @ellipseparabola;
x0 = [0 0];
A = []; % No other constraints
b = [];
Aeq = [];
beq = [];
lb = [];
ub = [];
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
Local 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 =

   -0.2500   -0.9375

제약 조건 함수에 기울기 포함시키기

c 및 ceq에 대한 기울기를 제공하면 솔버가 더욱 빠르게 동작하고 더 신뢰할 수 있는 결과를 제공할 수 있습니다.

기울기를 제공하면 또 다른 이점을 얻을 수 있습니다. 솔버는 x가 실현가능점이 되는 x에 도달할 수 있지만, x 주위의 유한 차분으로 인해 항상 실현불가능점에 이르게 됩니다. 이 경우, 솔버가 실패하거나 도중에 중단될 수 있습니다. 기울기를 제공하면 솔버가 계속 진행할 수 있습니다.

기울기 정보를 포함시키려면 다음과 같이 조건화된 함수를 작성하십시오.

function [c,ceq,gradc,gradceq] = ellipseparabola(x)
c(1) = x(1)^2/9 + x(2)^2/4 - 1;
c(2) = x(1)^2 - x(2) - 1;
ceq = [];

if nargout > 2
    gradc = [2*x(1)/9, 2*x(1); ...
             x(2)/2, -1];
    gradceq = [];
end

조건화된 함수에 대한 자세한 내용은 스칼라 목적 함수 작성하기 항목을 참조하십시오. 기울기 행렬의 형식은 다음과 같습니다.

gradci, j = [∂c(j)/∂xi].

기울기 행렬의 첫 번째 열은 c(1)과 연결되며, 두 번째 열은 c(2)와 연결됩니다. 이 도함수 형식은 야코비 행렬을 전치한 형식입니다.

솔버가 비선형 제약 조건의 기울기를 사용하도록 하려면 optimoptions를 사용하여 기울기가 존재한다는 것을 나타내십시오.

options = optimoptions(@fmincon,'SpecifyConstraintGradient',true);

다음과 같이 options 구조체를 솔버에 전달해야 합니다.

[x,fval] = fmincon(@myobj,x0,A,b,Aeq,beq,lb,ub, ...
           @ellipseparabola,options)

Symbolic Math Toolbox™ 라이선스가 있는 경우 Calculate Gradients and Hessians Using Symbolic Math Toolbox에 설명된 대로 기울기와 헤세 행렬을 자동으로 계산할 수 있습니다.

익명 비선형 제약 조건 함수

비선형 제약 조건 함수는 출력값을 두 개 반환해야 합니다. 첫 번째 출력값은 비선형 부등식에 대응되고, 두 번째 출력값은 비선형 등식에 대응됩니다.

익명 함수는 하나의 출력값만 반환합니다. 어떻게 하면 익명 함수를 비선형 제약 조건으로 작성할 수 있을까요?

deal 함수는 여러 출력값을 분배합니다. 예를 들어, 다음과 같은 비선형 부등식이 있다고 가정하겠습니다.

x129+x2241,x2x12-1.

다음과 같은 비선형 등식이 있다고 가정하겠습니다.

x2=tanh(x1).

다음과 같이 비선형 제약 조건 함수를 작성합니다.

c = @(x)[x(1)^2/9 + x(2)^2/4 - 1;
        x(1)^2 - x(2) - 1];
ceq = @(x)tanh(x(1)) - x(2);
nonlinfcn = @(x)deal(c(x),ceq(x));

nonlinfcn의 제약 조건이 적용된 함수 cosh(x1) + sinh(x2)를 최소화하려면 다음과 같이 fmincon을 사용하십시오.

obj = @(x)cosh(x(1))+sinh(x(2));
opts = optimoptions(@fmincon,'Algorithm','sqp');
z = fmincon(obj,[0;0],[],[],[],[],[],[],nonlinfcn,opts)
Local 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.
z = 2×1

   -0.6530
   -0.5737

결과로 생성되는 점 z가 제약 조건을 얼마나 잘 충족하는지 확인하려면 다음과 같이 nonlinfcn을 사용하십시오.

[cout,ceqout] = nonlinfcn(z)
cout = 2×1

   -0.8704
         0

ceqout = 0

z는 제약 조건 허용오차 ConstraintTolerance의 디폴트 값 1e-6 내에서 모든 제약 조건을 충족합니다.

익명 목적 함수에 대한 자세한 내용은 익명 목적 함수 항목을 참조하십시오.

참고 항목

| | (Global Optimization Toolbox) | (Global Optimization Toolbox) | (Global Optimization Toolbox) | (Global Optimization Toolbox)

관련 항목