Capítulo 2
Optimización con Restricciones
2.1 Multiplicadores de Lagrange
Para minimizar sujeto a :
Resolvemos:
2.2 Ejemplo: Elipse y Recta
Minimizar sujeto a :
Derivando:
Solución: .
python
import numpy as np
from scipy.optimize import minimize
# Minimizar x^2 + 2y^2 sujeto a x + y = 3
def f(xy):
x, y = xy
return x**2 + 2*y**2
# Restricción: x + y - 3 = 0
def constraint(xy):
return xy[0] + xy[1] - 3
cons = {'type': 'eq', 'fun': constraint}
res = minimize(f, x0=[0, 0], constraints=cons)
print(f"Solución: x={res.x[0]:.4f}, y={res.x[1]:.4f}")
print(f"Valor óptimo: {res.fun:.4f}")
print(f"Verificación: x+y = {res.x[0] + res.x[1]:.4f}")2.3 Condiciones KKT
Generalización de Lagrange para restricciones de desigualdad:
Condiciones necesarias:
- Estacionariedad:
- Factibilidad:
- Holgura complementaria:
- Dualidad:
2.4 SVM: El ejemplo estrella
SVM busca el hiperplano que maximiza el margen, con restricciones de clasificación correcta:
El Lagrangiano dual convierte esto en un problema de programación cuadrática.
python
from sklearn.svm import SVC
import numpy as np
# SVM con kernel lineal
X = np.array([[1, 1], [2, 2], [3, 3], [4, 4]])
y = np.array([0, 0, 1, 1])
svm = SVC(kernel='linear', C=1e5) # C grande = margen duro
svm.fit(X, y)
print(f"Coeficientes: {svm.coef_}")
print(f"Intercepto: {svm.intercept_}")
print(f"Vectores soporte:
{svm.support_vectors_}")
# Predicción
print(f"Predicción [2.5, 2.5]: {svm.predict([[2.5, 2.5]])[0]}")