🎯 1. Fundamentos de Optimización
La optimización matemática es el proceso de encontrar el mejor elemento (máximo o mínimo) de un conjunto de alternativas disponibles. En términos formales, buscamos resolver problemas de la forma:
Un problema de optimización consiste en:
- Función objetivo $f(x)$: función a minimizar (o maximizar)
- Variables de decisión $x \in \mathbb{R}^n$: variables sobre las que tenemos control
- Restricciones de desigualdad $g_i(x) \leq 0$: limitaciones del problema
- Restricciones de igualdad $h_j(x) = 0$: condiciones que deben cumplirse exactamente
Clasificación de Problemas
Sea $f: \mathbb{R}^n \to \mathbb{R}$ continua y $S \subset \mathbb{R}^n$ compacto no vacío. Entonces el problema $\min_{x \in S} f(x)$ tiene al menos una solución óptima.
Demostración: Se sigue del teorema de Weierstrass para funciones continuas en conjuntos compactos.
📏 2. Optimización Lineal
Programación Lineal
La programación lineal (LP) es el caso más simple donde tanto la función objetivo como las restricciones son lineales:
Todo problema de programación lineal puede escribirse en forma estándar:
donde $A \in \mathbb{R}^{m \times n}$, $b \in \mathbb{R}^m$, $c \in \mathbb{R}^n$.
Método Simplex
El método simplex, desarrollado por George Dantzig en 1947, es el algoritmo fundamental para resolver problemas de programación lineal.
- Encontrar una solución básica factible inicial
- Verificar optimalidad: si todos los costos reducidos son no negativos, parar
- Seleccionar variable entrante (costo reducido más negativo)
- Realizar test de ratio para encontrar variable saliente
- Realizar operaciones de pivoteo para actualizar la tabla simplex
- Volver al paso 2
Una empresa produce dos productos A y B. Las restricciones son:
Donde $x_1$ y $x_2$ son las cantidades a producir de A y B respectivamente.
Teoría de Dualidad
A todo problema de programación lineal (primal) le corresponde un problema dual asociado:
Si el problema primal tiene solución óptima finita, entonces el problema dual también tiene solución óptima finita, y los valores óptimos de ambos problemas son iguales:
📈 3. Optimización No Lineal
Condiciones de Optimalidad
Para problemas no lineales sin restricciones, las condiciones de optimalidad se basan en las derivadas de la función objetivo.
Si $x^*$ es un mínimo local de $f$ y $f$ es diferenciable en $x^*$, entonces:
Si $\nabla f(x^*) = 0$ y $\nabla^2 f(x^*)$ es definida positiva, entonces $x^*$ es un mínimo local estricto.
Métodos de Gradiente
Los métodos de gradiente utilizan la información de primera derivada para encontrar direcciones de descenso.
- Inicializar $x_0$, establecer $k = 0$
- Calcular $d_k = -\nabla f(x_k)$ (dirección de descenso)
- Encontrar $\alpha_k > 0$ mediante búsqueda lineal
- Actualizar $x_{k+1} = x_k + \alpha_k d_k$
- Si no converge, hacer $k = k + 1$ y volver al paso 2
Para minimizar $f(x, y) = x^2 + 4y^2$:
El algoritmo converge al punto óptimo $(0, 0)$ desde cualquier punto inicial.
Métodos de Newton y Quasi-Newton
El método de Newton utiliza información de segunda derivada para lograr convergencia cuadrática.
Aproxima la matriz Hessiana usando diferencias de gradientes:
donde $s_k = x_{k+1} - x_k$ y $y_k = \nabla f(x_{k+1}) - \nabla f(x_k)$.
🔗 4. Optimización con Restricciones
Multiplicadores de Lagrange
Para problemas con restricciones de igualdad, el método de multiplicadores de Lagrange transforma el problema restringido en uno sin restricciones.
Para el problema:
La función Lagrangiana es:
Si $x^*$ es un mínimo local, entonces existen $\lambda_j^*$ tales que:
Condiciones KKT
Las condiciones de Karush-Kuhn-Tucker extienden el método de Lagrange a problemas con restricciones de desigualdad.
Para el problema general con restricciones de igualdad y desigualdad, un punto $x^*$ es óptimo si existen multiplicadores $\lambda^*, \mu^*$ tales que:
Métodos de Penalización
Los métodos de penalización transforman problemas con restricciones en una secuencia de problemas sin restricciones.
Se resuelve una secuencia de problemas:
donde $\{\rho_k\}$ es una secuencia creciente de parámetros de penalización.
🎲 5. Optimización Estocástica
Gradiente Descendente Estocástico
El gradiente descendente estocástico (SGD) es fundamental en el entrenamiento de modelos de machine learning, especialmente cuando el conjunto de datos es muy grande.
En lugar de calcular el gradiente sobre todo el conjunto de datos:
SGD usa una muestra aleatoria (mini-lote) $\mathcal{B}_k$:
- Inicializar $m_0 = 0$, $v_0 = 0$, $t = 0$
- Para cada iteración:
- $t = t + 1$
- $g_t = \nabla f(x_{t-1})$ (gradiente)
- $m_t = \beta_1 m_{t-1} + (1 - \beta_1) g_t$ (momento)
- $v_t = \beta_2 v_{t-1} + (1 - \beta_2) g_t^2$ (segundo momento)
- $\hat{m}_t = m_t / (1 - \beta_1^t)$ (corrección de sesgo)
- $\hat{v}_t = v_t / (1 - \beta_2^t)$ (corrección de sesgo)
- $x_t = x_{t-1} - \alpha \hat{m}_t / (\sqrt{\hat{v}_t} + \epsilon)$
Algoritmos Genéticos
Los algoritmos genéticos son métodos de optimización inspirados en la evolución natural, útiles para problemas complejos y no convexos.
- Inicializar población aleatoria de soluciones
- Evaluar función de aptitud para cada individuo
- Selección: elegir padres basándose en aptitud
- Cruzamiento: combinar padres para crear descendencia
- Mutación: introducir variaciones aleatorias
- Reemplazo: formar nueva generación
- Repetir hasta convergencia o número máximo de generaciones
Optimización Bayesiana
La optimización bayesiana es especialmente útil cuando la evaluación de la función objetivo es costosa, como en la optimización de hiperparámetros.
Se modela la función objetivo $f(x)$ como un proceso gaussiano:
donde $\mu(x)$ es la función media y $k(x, x')$ es la función de covarianza.
- Evaluar $f$ en puntos iniciales para formar conjunto de datos $D_t$
- Entrenar modelo sustituto (GP) con $D_t$
- Optimizar función de adquisición (EI) para encontrar $x_{t+1}$
- Evaluar $f(x_{t+1})$ y actualizar $D_{t+1} = D_t \cup \{(x_{t+1}, f(x_{t+1}))\}$
- Repetir hasta convergencia
🔧 6. Aplicaciones Prácticas
La optimización tiene aplicaciones en prácticamente todas las áreas de la ingeniería, ciencias y negocios. Aquí presentamos algunos ejemplos representativos.
El modelo clásico de Markowitz busca minimizar el riesgo para un retorno esperado dado:
donde $w$ son los pesos del portafolio, $\Sigma$ es la matriz de covarianza de retornos, $\mu$ son los retornos esperados, y $r_0$ es el retorno objetivo.
Consideraciones Computacionales
La elección del método de optimización depende de las características del problema:
- Linealidad: Usar simplex para problemas lineales
- Convexidad: Métodos de gradiente son eficientes
- Restricciones: Métodos de punto interior o SQP
- Ruido: Métodos estocásticos o libre de derivadas
- Dimensión: Métodos especializados para alta dimensión
- Multimodal: Algoritmos globales como genéticos
No existe un algoritmo de optimización que sea superior para todos los problemas. La efectividad de un método depende de las características específicas del problema que se está resolviendo.