비선형 부등식 제약 조건
이 예제에서는 비선형 부등식 제약 조건이 있는 스칼라 최소화 문제를 푸는 방법을 보여줍니다. 이 문제는 다음 방정식의 해에 해당하는 를 구하는 것이 목적입니다.
여기에는 다음 제약 조건이 적용됩니다.
어떠한 제약 조건도 선형이 아니므로 두 제약 조건의 값을 벡터 c
로 반환하는 함수 confun.m
을 생성합니다. fmincon
솔버에서 제약 조건을 형식으로 작성하도록 요구하기 때문에, 다음 값을 반환하는 제약 조건 함수를 작성합니다.
.
목적 함수 만들기
헬퍼 함수 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