12. Cálculo multivariable y técnicas de optimización
¿Qué combinación operativa mejora recuperación sin disparar riesgo?
Cálculo multivariable y técnicas de optimización
Usamos funciones objetivo, restricciones y búsqueda de escenarios para conectar cálculo con decisión operativa.
1. Pregunta de planta
El cálculo multivariable y la optimización aparecen cuando queremos buscar una combinación operativa mejor, no solo describir lo que ya pasó.
2. Matemática simple
Podemos pensar en una función objetivo:
Una versión simple:
Y restricciones razonables:
3. Traducción operativa
| Elemento | En matemática | En planta |
|---|---|---|
| Variables de decisión | x1, x2, x3... | Aire, nivel, pH, espumante. |
| Función objetivo | J(x) | Recuperación alta con riesgo controlado. |
| Restricciones | límites de x | Rangos operativos y seguridad. |
| Óptimo | mejor valor encontrado | Set point candidato para revisar, no orden automática. |
4. Excel: ejercicio guiado
En Excel se puede crear una tabla de escenarios.
Recuperación estimada
Objetivo penalizado
Semáforo de restricción
5. Python: búsqueda simple de escenarios
import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression
archivo = "flotacion_cobre.xlsx"
df = pd.read_excel(archivo)
features = ["flujo_aire", "nivel_celda", "ph", "dosificacion_espumante"]
X = df[features]
y = df["recuperacion_cu"]
modelo = LinearRegression()
modelo.fit(X, y)
# Crear escenarios alrededor de rangos observados
air = np.linspace(df["flujo_aire"].quantile(0.10), df["flujo_aire"].quantile(0.90), 8)
nivel = np.linspace(df["nivel_celda"].quantile(0.10), df["nivel_celda"].quantile(0.90), 8)
ph = np.linspace(df["ph"].quantile(0.10), df["ph"].quantile(0.90), 6)
esp = np.linspace(df["dosificacion_espumante"].quantile(0.10), df["dosificacion_espumante"].quantile(0.90), 6)
escenarios = []
for a in air:
for n in nivel:
for p in ph:
for e in esp:
escenarios.append([a, n, p, e])
esc = pd.DataFrame(escenarios, columns=features)
esc["recuperacion_estimada"] = modelo.predict(esc[features])
esc["penalizacion_riesgo"] = 0.02*esc["flujo_aire"] + 0.04*esc["nivel_celda"] + 0.12*esc["dosificacion_espumante"]
esc["objetivo"] = esc["recuperacion_estimada"] - 0.20*esc["penalizacion_riesgo"]
esc.sort_values("objetivo", ascending=False).head(10)6. Puente hacia Machine Learning
La optimización puede usar modelos predictivos como función interna: el modelo estima recuperación o riesgo, y luego buscamos el mejor escenario permitido.
from sklearn.ensemble import RandomForestRegressor
modelo_ml = RandomForestRegressor(random_state=42, n_estimators=200)
modelo_ml.fit(X, y)
esc["recuperacion_ml"] = modelo_ml.predict(esc[features])
esc["objetivo_ml"] = esc["recuperacion_ml"] - 0.20*esc["penalizacion_riesgo"]
mejores = esc.sort_values("objetivo_ml", ascending=False).head(10)
mejores7. Cierre del Módulo 3
Mensaje final: el Módulo 3 une sensibilidad, acumulación, dinámica y optimización. Con eso el alumno entiende que la IA industrial no empieza entrenando modelos complejos; empieza midiendo cómo cambia la planta y qué decisiones podrían mejorarla.
