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 inferioresupper
, asociado a límites superioreseqlin
, asociado a igualdades linealesineqlin
, asociado a desigualdades linealeseqnonlin
, asociado a igualdades no linealesineqnonlin
, asociado a desigualdades no linealessoc
, 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
ylambda.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 valor0.3407
, que indica que la restricción de desigualdad lineal está activa. La restricción de desigualdad lineal esx(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
ylambda.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
es1.7038e-07
, lo que indica que esta restricción no está activa. Compruebe la restricción, que esx(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.