Ограниченная оптимизация включает набор множителей Лагранжа, как описано в Мере оптимальности Первого порядка. Решатели возвращают оцененные множители Лагранжа в структуре. Структура называется lambda потому что обычный символ для множителей Лагранжа является 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Вот интерпретация структуры множителя Лагранжа.
lambda.eqlin и lambda.eqnonlin поля имеют размер 0, потому что нет никаких линейных ограничений равенства и никаких нелинейных ограничений равенства.
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.2365lambda.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.