Структуры множителя Лагранжа

Ограниченная оптимизация включает набор множителей Лагранжа, как описано в Мере по Оптимальности Первого порядка. Решатели возвращают оцененные множители Лагранжа в структуре. Структура называется lambda, поскольку обычный символ для множителей Лагранжа является lambda греческой буквы (λ). Структура разделяет множители на следующие типы, названные полями:

  • lower, сопоставленный с нижними границами

  • upper, сопоставленный с верхними границами

  • eqlin, сопоставленный с линейными равенствами

  • ineqlin, сопоставленный с линейными неравенствами

  • eqnonlin, сопоставленный с нелинейными равенствами

  • ineqnonlin, сопоставленный с нелинейными неравенствами

Для доступа, например, нелинейного поля неравенства структуры множителя Лагранжа, вводят 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.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.

Похожие темы