비선형 등식 및 부등식 제약 조건
이 예제에서는 비선형 제약 조건을 포함하는 최적화 문제를 푸는 방법을 보여줍니다. 등식 제약 조건 값과 부등식 제약 조건 값을 모두 계산하는 함수를 작성하여 비선형 제약 조건을 포함시키십시오. 비선형 제약 조건 함수의 구문은 다음과 같습니다.
[c,ceq] = nonlinconstr(x)
함수 c(x)
는 제약 조건 c(x) <= 0
을 나타냅니다. 함수 ceq(x)
는 제약 조건 ceq(x) = 0
을 나타냅니다.
참고: 한 유형의 비선형 제약 조건만 사용하는 경우에도 비선형 제약 조건 함수가 c(x)
와 ceq(x)
를 모두 반환하도록 해야 합니다. 제약 조건이 존재하지 않을 경우, 함수가 이러한 제약 조건에 대해 []
을 반환하도록 해야 합니다.
비선형 제약 조건
다음과 같은 비선형 등식 제약 조건과
다음과 같은 비선형 부등식 제약 조건이 있다고 가정하겠습니다.
.
이 두 제약 조건을 다음과 같이 재작성합니다.
이 예제의 마지막 부분에 있는 confuneq
헬퍼 함수는 이러한 부등식을 올바른 구문으로 구현합니다.
목적 함수
다음 문제를 풀어 보겠습니다.
여기에는 다음 제약 조건이 적용됩니다. 이 예제의 마지막 부분에 있는 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