Main Content

비선형 부등식 제약 조건

이 예제에서는 비선형 부등식 제약 조건이 있는 스칼라 최소화 문제를 푸는 방법을 보여줍니다. 이 문제는 다음 방정식의 해에 해당하는 x를 구하는 것이 목적입니다.

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

여기에는 다음 제약 조건이 적용됩니다.

x1x2-x1-x2-1.5x1x2-10.

어떠한 제약 조건도 선형이 아니므로 두 제약 조건의 값을 벡터 c로 반환하는 함수 confun.m을 생성합니다. fmincon 솔버에서 제약 조건을 c(x) 0 형식으로 작성하도록 요구하기 때문에, 다음 값을 반환하는 제약 조건 함수를 작성합니다.

c(x)=[x1x2-x1-x2+1.5-10-x1x2].

목적 함수 만들기

헬퍼 함수 objfun은 목적 함수로, 이 예제의 마지막 부분에에 나와 있습니다. fun 인수를 objfun 함수에 대한 함수 핸들로 설정합니다.

fun = @objfun;

비선형 제약 조건 함수 만들기

비선형 제약 조건 함수는 두 개의 인수 즉, 부등식 제약 조건인 c와 등식 제약 조건인 ceq를 반환해야 합니다. 이 문제에는 등식 제약 조건이 없기 때문에 이 예제의 마지막 부분에 있는 헬퍼 함수 confun[]을 등식 제약 조건으로 반환합니다.

문제 풀기

초기점을 [-1,1]로 설정합니다.

x0 = [-1,1];

문제에 범위 또는 선형 제약 조건이 없습니다. 따라서 관련 인수를 []로 설정합니다.

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

fmincon를 사용하여 문제를 풉니다.

[x,fval] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,@confun)
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

   -9.5473    1.0474

fval = 0.0236

해 검토하기

종료 메시지는 해가 제약 조건에 대해 실현 가능함을 나타냅니다. 이중으로 확인하기 위해 해에서 비선형 제약 조건 함수를 평가합니다. 음수 값은 제약 조건이 충족되었음을 나타냅니다.

[c,ceq] = confun(x)
c = 2×1
10-4 ×

   -0.3179
   -0.3063

ceq =

     []

두 비선형 제약 조건이 모두 0에 가까운 음수입니다. 이는 해가 실현 가능하고 두 제약 조건이 해에서 활성임을 나타냅니다.

헬퍼 함수

다음 코드는 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

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

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

관련 항목