exponenta event banner

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

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

[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-10≤0.

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

Связанные темы