Main Content

Estructuras de multiplicadores de Lagrange

La optimización restringida implica un conjunto de multiplicadores de Lagrange, tal y como se describe en Medida de optimalidad de primer orden. Los solvers devuelven multiplicadores de Lagrange estimados en una estructura. La estructura se llama lambda porque el símbolo convencional para multiplicadores de Lagrange es la letra griega lambda (λ). La estructura separa los multiplicadores en los siguientes tipos, llamados campos:

  • lower, asociado a límites inferiores

  • upper, asociado a límites superiores

  • eqlin, asociado a igualdades lineales

  • ineqlin, asociado a desigualdades lineales

  • eqnonlin, asociado a igualdades no lineales

  • ineqnonlin, asociado a desigualdades no lineales

  • soc, asociado a restricciones de cono de segundo orden

Para acceder, por ejemplo, al campo de desigualdad no lineal de una estructura de multiplicadores de Lagrange, escriba lambda.inqnonlin. Para acceder al tercer elemento del multiplicador de Lagrange asociado a límites inferiores, escriba lambda.lower(3).

El contenido de la estructura de multiplicadores de Lagrange depende del solver. Por ejemplo, la programación lineal no tiene no linealidades, por lo que no tiene ni campos eqnonlin ni campos ineqnonlin. Las páginas de referencia de función de cada solver aplicable contienen una descripción de su estructura de multiplicadores de Lagrange bajo el título "Outputs".

Examine la estructura de multiplicadores de Lagrange para la resolución de un problema no lineal con límites y restricciones de desigualdad lineales y no lineales.

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

Aquí se muestra una interpretación de la estructura de multiplicadores de Lagrange.

  • Los campos lambda.eqlin y lambda.eqnonlin tienen el tamaño 0, porque no hay restricciones de igualdad lineales ni restricciones de igualdad no lineales.

  • El campo lambda.ineqlin tiene el valor 0.3407, que indica que la restricción de desigualdad lineal está activa. La restricción de desigualdad lineal es x(1) + x(2) <= 1. Compruebe que la restricción está activa en la resolución, lo que significa que la resolución hace que la desigualdad sea una igualdad:

    x(1) + x(2)
    ans =
    
        1.0000
  • Compruebe los valores de los campos lambda.lower y lambda.upper.

    lambda.lower
    ans =
    
       1.0e-07 *
    
        0.2210
        0.2365
    lambda.upper
    ans =
    
       1.0e-07 *
    
        0.3361
        0.3056

    En la práctica, estos valores son cero, lo que indica que la solución no está cerca de los límites.

  • El valor del campo lambda.ineqnonlin es 1.7038e-07, lo que indica que esta restricción no está activa. Compruebe la restricción, que es x(1)^2 + x(2)^2 <= 1.

    x(1)^2 + x(2)^2
    ans =
    
        0.5282

    El valor de la función de restricción no lineal no está cerca de su límite, así que el multiplicador de Lagrange es aproximadamente 0.

Temas relacionados