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

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

[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 равно 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

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте