∫Atlas Matemáticas Aplicadas

Inicio › Temas › Optimización

🎯 Optimización nivel avanzado

Multiplicadores de Lagrange

Optimizar sobre una restricción de igualdad: en el óptimo los gradientes son paralelos.

🕹️ Ábrelo en el curso interactivo (simulador y código ejecutable)

La idea

Queremos maximizar o minimizar f(x, y) pero no en todo el plano, sino solo sobre la curva definida por una restricción de igualdad g(x, y) = 0. La idea geométrica de Lagrange es preciosa: imagina las curvas de nivel de f y muévete a lo largo de la curva g = 0. Mientras la curva de nivel que pisas corte transversalmente a la restricción, podrás avanzar hacia niveles mejores. El óptimo llega justo cuando la curva de nivel es tangente a la restricción, y tangencia significa que los gradientes ∇f y ∇g son paralelos.

Esa condición se escribe ∇f = λ ∇g, donde el escalar λ es el multiplicador de Lagrange. Junto con g = 0, obtenemos un sistema de tres ecuaciones con tres incógnitas (x, y, λ). Equivale a buscar los puntos críticos de la lagrangiana ℒ(x, y, λ) = f(x, y) − λ g(x, y), derivando respecto a las tres variables. El método se extiende sin cambios a n variables y a varias restricciones, usando un multiplicador por restricción, y a desigualdades mediante las condiciones de Karush-Kuhn-Tucker, que añaden λ ≥ 0 y la complementariedad λ·g = 0.

El multiplicador no es un artificio de cálculo: tiene significado económico. Vale λ = ∂f*/∂c, la variación del valor óptimo cuando se relaja la restricción g = c en una unidad. Es el mismo precio sombra de la programación lineal: si la restricción es un presupuesto, λ indica cuánto más beneficio obtendríamos con un euro adicional. Conviene recordar que el método da candidatos: hay que comparar los valores de f en todos ellos, y vigilar los puntos donde ∇g = 0, en los que el razonamiento falla.

Fórmulas clave

  • Condición de Lagrange∇f(x, y) = λ ∇g(x, y)
  • Lagrangianaℒ(x, y, λ) = f(x, y) − λ g(x, y)
  • Sistema a resolver∂ℒ/∂x = 0, ∂ℒ/∂y = 0, g(x, y) = 0
  • Paralelismo (2 variables)f_x g_y − f_y g_x = 0
  • Interpretación del multiplicadorλ = ∂f*/∂c con la restricción g(x, y) = c
  • Condición KKT (desigualdad)∇f = λ ∇g, λ ≥ 0, λ g = 0, g ≤ 0

Dónde se aplica

En economía, maximizar la utilidad de un consumidor sujeto a su presupuesto da la regla clásica de igualdad entre utilidades marginales por euro gastado: el multiplicador es la utilidad marginal del dinero. En física, la mecánica lagrangiana impone las ligaduras de un sistema (una cuenta que desliza por un alambre, un péndulo de longitud fija) exactamente con multiplicadores, que resultan ser las fuerzas de reacción. En ingeniería de estructuras se minimiza el peso de una viga con la restricción de una tensión máxima admisible, y en aprendizaje automático la máquina de vectores soporte y la regresión con regularización se deducen de un problema con multiplicadores y condiciones KKT.

Con programación (Python)

import math

# max f(x,y) = x + 2y  sobre la circunferencia g(x,y) = x^2 + y^2 - 5 = 0
def f(x, y):
    return x + 2 * y

def grad_f(x, y):
    return (1.0, 2.0)

def grad_g(x, y):
    return (2 * x, 2 * y)

r = math.sqrt(5)
mejor = None
for i in range(3600):
    t = 2 * math.pi * i / 3600
    x, y = r * math.cos(t), r * math.sin(t)
    v = f(x, y)
    if mejor is None or v > mejor[0]:
        mejor = (v, x, y)

v, x, y = mejor
fx, fy = grad_f(x, y)
gx, gy = grad_g(x, y)
print("Maximo numerico sobre g = 0: f = %.6f en (%.5f, %.5f)" % (v, x, y))
print("Producto cruzado fx*gy - fy*gx = %.6f  (0 = gradientes paralelos)" % (fx * gy - fy * gx))
print("Multiplicador lambda = fx/gx = %.6f" % (fx / gx))
print("Solucion exacta: (1, 2), f = 5, lambda = 0.5")
print("Relajando a x^2 + y^2 = 6: f* = %.6f  (aumento ~ lambda = %.4f)" % (math.sqrt(5 * 6), math.sqrt(5 * 6) - 5))

La versión en JavaScript, editable y ejecutable en el navegador, está en la página interactiva del tema.

Temas relacionados

Derivadas parciales y gradiente · Máximos, mínimos y optimización · Convexidad

← Todos los temas