Main Content

비선형 등식 및 부등식 제약 조건

이 예제에서는 비선형 제약 조건을 포함하는 최적화 문제를 푸는 방법을 보여줍니다. 등식 제약 조건 값과 부등식 제약 조건 값을 모두 계산하는 함수를 작성하여 비선형 제약 조건을 포함시키십시오. 비선형 제약 조건 함수의 구문은 다음과 같습니다.

[c,ceq] = nonlinconstr(x)

함수 c(x)는 제약 조건 c(x) <= 0을 나타냅니다. 함수 ceq(x)는 제약 조건 ceq(x) = 0을 나타냅니다.

참고: 한 유형의 비선형 제약 조건만 사용하는 경우에도 비선형 제약 조건 함수가 c(x)ceq(x)를 모두 반환하도록 해야 합니다. 제약 조건이 존재하지 않을 경우, 함수가 이러한 제약 조건에 대해 []을 반환하도록 해야 합니다.

비선형 제약 조건

다음과 같은 비선형 등식 제약 조건과

x12+x2=1

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

x1x2-10.

이 두 제약 조건을 다음과 같이 재작성합니다.

x12+x2-1=0-x1x2-100.

이 예제의 마지막 부분에 있는 confuneq 헬퍼 함수는 이러한 부등식을 올바른 구문으로 구현합니다.

목적 함수

다음 문제를 풀어 보겠습니다.

minxf(x)=ex1(4x12+2x22+4x1x2+2x2+1)

여기에는 다음 제약 조건이 적용됩니다. 이 예제의 마지막 부분에 있는 objfun 헬퍼 함수는 이 목적 함수를 구현합니다.

문제 풀기

fmincon 솔버를 호출하여 문제를 풉니다. 이 솔버에는 초기점이 필요합니다. 점 x0 = [-1,-1]을 사용하십시오.

x0 = [-1,-1];

문제에 범위 또는 선형 제약 조건이 없으므로, 이러한 입력값을 []로 설정합니다.

A = [];
b = [];
Aeq = [];
beq = [];
lb = [];
ub = [];

다음과 같이 솔버를 호출합니다.

[x,fval] = fmincon(@objfun,x0,A,b,Aeq,beq,lb,ub,@confuneq)
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 = 1×2

   -0.7529    0.4332

fval = 1.5093

솔버가 해에서 제약 조건이 충족되었다고 보고합니다. 해에서 비선형 제약 조건을 확인합니다.

[c,ceq] = confuneq(x)
c = -9.6739
ceq = 2.0668e-12

조건에 맞게 c는 0보다 작습니다. ceq는 디폴트 제약 조건 허용오차 1e-6 내에서 0입니다.

헬퍼 함수

다음 코드는 confuneq 헬퍼 함수를 생성합니다.

function [c,ceq] = confuneq(x)
% Nonlinear inequality constraints
c = -x(1)*x(2) - 10;
% Nonlinear equality constraints
ceq = x(1)^2 + x(2) - 1;
end

다음 코드는 objfun 헬퍼 함수를 생성합니다.

function f = objfun(x)
f = exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1);
end

관련 항목