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

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

Похожие темы