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-07Aquí se muestra una interpretación de la estructura de multiplicadores de Lagrange.
Los campos
lambda.eqlinylambda.eqnonlintienen el tamaño 0, porque no hay restricciones de igualdad lineales ni restricciones de igualdad no lineales.El campo
lambda.ineqlintiene 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.0000Compruebe los valores de los campos
lambda.lowerylambda.upper.lambda.lower
ans = 1.0e-07 * 0.2210 0.2365lambda.upper
ans = 1.0e-07 * 0.3361 0.3056En 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.ineqnonlines1.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.5282El 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.