Ограниченная оптимизация включает набор множителей Лагранжа, как описано в мера оптимальности первого порядка. Решатели возвращают оцененные множители Лагранжа в структуре. Структура называется lambda
потому что обычным символом для множителей Лагранжа является греческая буква лямбда (λ). Структура разделяет множители на следующие типы, называемые полями:
lower
, сопоставленный с нижними границами
upper
, сопоставленный с верхними границами
eqlin
, сопоставленный с линейными равенствами
ineqlin
, связанный с линейными неравенствами
eqnonlin
, сопоставленный с нелинейными равенствами
ineqnonlin
, связанный с нелинейными неравенствами
soc
, связанная с ограничениями конуса второго порядка
Для доступа, для примера, к нелинейному полю неравенства структуры множителя Лагранжа, введите lambda.inqnonlin
. Для доступа к третьему элементу множителя Лагранжа, сопоставленному с нижними границами, введите lambda.lower(3)
.
Содержимое структуры множителя Лагранжа зависит от решателя. Для примера линейное программирование не имеет нелинейностей, поэтому не имеет eqnonlin
или ineqnonlin
поля. Каждые страницы с описанием функции применимого решателя содержат описание его структуры множителя Лагранжа под заголовком « Выходами».
Рассмотрим структуру множителя Лагранжа для решения нелинейной задачи с линейными и нелинейными ограничениями неравенства и границами.
lb = [-3 -3]; % lower bounds ub = [3 3]; % upper bounds A = [1 1]; % linear inequality x(1) + x(2) <= 1 b = 1; Aeq = []; beq = []; x0 = [-1 1]; fun = @(x)100*(x(2) - x(1)^2)^2 + (1 - x(1))^2; % Rosenbrock function nlcons = @(x)deal(x(1)^2 + x(2)^2 - 1,[]); % nonlinear inequality options = optimoptions('fmincon','Display','off'); [x,fval,exitflag,output,lambda] = ... fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nlcons,options); disp(lambda)
eqlin: [0×1 double] eqnonlin: [0×1 double] ineqlin: 0.3407 lower: [2×1 double] upper: [2×1 double] ineqnonlin: 1.7038e-07
Вот интерпретация структуры множителя Лагранжа.
The lambda.eqlin
и lambda.eqnonlin
поля имеют размер 0, потому что нет линейных ограничений равенства и нелинейных ограничений равенства.
The lambda.ineqlin
поле имеет значение 0.3407
, что указывает, что линейное ограничение неравенства активно. Линейное ограничение неравенства x(1) + x(2) <= 1
. Проверяйте, что ограничение активно в решении, что означает, что решение заставляет неравенство быть равенством:
x(1) + x(2)
ans = 1.0000
Проверяйте значения lambda.lower
и lambda.upper
поля.
lambda.lower
ans = 1.0e-07 * 0.2210 0.2365
lambda.upper
ans = 1.0e-07 * 0.3361 0.3056
Эти значения фактически равны нулю, что указывает на то, что решение не близко к границам.
Значение lambda.ineqnonlin
поле 1.7038e-07
, что указывает на то, что это ограничение не активно. Проверяйте ограничение, которое x(1)^2 + x(2)^2 <= 1
.
x(1)^2 + x(2)^2
ans = 0.5282
Значение нелинейной функции ограничения не близко к своему пределу, поэтому множитель Лагранжа равен приблизительно 0.