exponenta event banner

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

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

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