Нелинейные ограничения равенства и неравенства

Этот пример показывает, как решить задачу оптимизации, содержащую нелинейные ограничения. Включите нелинейные ограничения путем написания функции, которая вычисляет значения ограничений равенств и неравенств. Нелинейная функция ограничения имеет синтаксис

[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.

The confuneq вспомогательная функция в конце этого примера реализует эти неравенства в правильном синтаксисе.

Целевая функция

Решите задачу

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

удовлетворяющее ограничениям. The 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 равно 0 в пределах допуска ограничений по умолчанию 1e-6.

Вспомогательные функции

Следующий код создает 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

Похожие темы