Model Predictive Control (MPC)
El control predictivo basado en modelos (MPC) planifica una breve secuencia de acciones con un modelo, aplica solo la primera y vuelve a planificar en cada paso. Descubre sus componentes, usos y código.
El control predictivo basado en modelo (MPC) es un método de control que utiliza un modelo del sistema para predecir su comportamiento durante un horizonte temporal futuro breve, elige la secuencia de acciones que mejor cumple un objetivo sin incumplir las restricciones, aplica solo la primera acción y, después, repite todo el proceso en el siguiente paso temporal con mediciones actualizadas. Este ciclo de planificar, actuar y volver a planificar se denomina control de horizonte móvil y permite al controlador anticiparse a lo que viene, en lugar de reaccionar únicamente al error actual. El MPC surgió en el refinado de petróleo y el procesamiento químico a finales de la década de 1970; el control matricial dinámico de Shell fue una de sus primeras aplicaciones industriales. Hoy dirige robots, vehículos autónomos y sistemas de climatización de edificios.
Componentes de un controlador MPC#
Todo controlador MPC combina cuatro componentes:
- Modelo dinámico: Predice el siguiente estado a partir del estado actual y una acción, por ejemplo, cómo cambian la posición y el rumbo de un coche con un determinado ángulo de dirección. Puede derivarse de ecuaciones físicas, de la identificación del sistema a partir de datos registrados o de una red neuronal entrenada con trayectorias grabadas.
- Función de coste: Puntúa una trayectoria predicha; normalmente penaliza la distancia respecto a un objetivo, el consumo de energía y los cambios bruscos en los controles.
- Restricciones: Límites que todos los planes deben respetar, como el par máximo del motor, los límites de velocidad y las zonas de exclusión alrededor de los obstáculos. Gestionar explícitamente las restricciones es la principal ventaja del MPC frente al control PID clásico, que solo reacciona a los errores cuando aparecen y no puede anticiparse a un límite.
- Optimizador: Busca la mejor secuencia de acciones dentro del horizonte en cada paso de control.
El modelo determina la dificultad de la optimización. Un modelo lineal con un coste cuadrático se convierte en un problema de programación cuadrática que los solucionadores específicos resuelven en milisegundos o menos; los modelos no lineales necesitan solucionadores de MPC no lineal, normalmente combinados con un filtro de Kalman extendido para estimar el estado, o una búsqueda basada en muestreo. En cada paso de control, el optimizador ejecuta un bucle interno de predicción y mejora de los planes candidatos, mientras que el controlador ejecuta un bucle externo que aplica una acción y vuelve a empezar a partir del estado recién medido:
La longitud del horizonte es la principal decisión de ajuste. Un horizonte más largo permite que un vehículo frene con antelación para tomar una curva cerrada, pero cada paso adicional aumenta el cálculo y acumula el error de predicción del modelo; además, toda la optimización debe terminar dentro de un periodo de control.
Horizonte deslizante en código#
El fragmento siguiente controla un carrito que debe desplazarse hasta la posición 5 y detenerse, con la aceleración limitada a más o menos 1. En cada paso, muestrea 500 planes de aceleración aleatorios, predice la trayectoria de cada plan con la dinámica del carrito, ejecuta la primera acción del plan de menor coste y vuelve a planificar a partir del nuevo estado:
import numpy as np
rng = np.random.default_rng(0)
position, velocity, target = 0.0, 0.0, 5.0
dt, horizon = 0.1, 30
for _ in range(100):
# Sample 500 candidate plans of accelerations within the actuator limit of +/-1
plans = rng.uniform(-1, 1, size=(500, horizon))
# Predict every plan's trajectory with the cart's dynamics model
v = velocity + dt * plans.cumsum(axis=1)
p = position + dt * v.cumsum(axis=1)
# Cost: distance from the target at each step plus speed at the end of the horizon
cost = ((p - target) ** 2).sum(axis=1) + 10 * v[:, -1] ** 2
# Apply only the first action of the cheapest plan, then replan from the new state
velocity += dt * plans[cost.argmin(), 0]
position += dt * velocity
print(f"position: {position:.2f}, velocity: {velocity:.2f}")Tras 10 segundos de simulación, el carro queda en la posición 5,04 con una velocidad de 0,04. Ningún plan aleatorio es bueno por sí solo, pero ejecutar un paso y volver a planificar a partir del estado medido corrige los errores continuamente. Este enfoque, llamado disparo aleatorio, es el método más sencillo de la familia de MPC basados en muestreo, que también incluye el método de entropía cruzada y el control de integral de trayectoria predictiva basado en modelo (MPPI), que investigadores de Georgia Tech utilizaron para competir con un coche de rally a escala de una quinta parte en una pista de tierra.
MPC en plantas, robots, coches y edificios#
- Industrias de procesos: Las refinerías, las plantas químicas y las centrales eléctricas usan MPC para mantener las temperaturas, las presiones y la calidad del producto cerca de los límites que maximizan el rendimiento, el ámbito en el que surgió el método.
- Robots con patas: Cheetah 3, del MIT, corría y mantenía el equilibrio mediante un MPC convexo que recalculaba sus fuerzas de reacción del suelo muchas veces por segundo. Más adelante, el MIT publicó ese controlador como software de código abierto para su Mini Cheetah.
- Conducción: Los controladores de seguimiento de trayectoria de los coches autónomos utilizan MPC para seguir de forma fluida una trayectoria planificada, respetando los límites de dirección, aceleración y confort.
- Edificios: Los controladores de calefacción y refrigeración predicen la temperatura de las habitaciones con varias horas de antelación a partir de las previsiones meteorológicas y de ocupación, y enfrían o calientan de antemano cuando la energía es más barata.
MPC frente a enfoques relacionados#
- Control PID: Un controlador PID calcula su salida a partir del error actual, su integral y su tasa de cambio. Es sencillo y económico, pero no tiene un modelo del futuro ni contempla las restricciones.
- Regulador cuadrático lineal (LQR): El LQR encuentra en forma cerrada la ley de realimentación óptima para un sistema lineal con un coste cuadrático y un horizonte infinito. El MPC resuelve en línea una versión con horizonte finito, lo que le permite imponer restricciones y gestionar modelos no lineales.
- Aprendizaje por refuerzo: El aprendizaje por refuerzo (RL) aprende una política a partir de la experiencia antes del despliegue; una vez desplegada, basta una pasada hacia delante rápida para elegir una acción. El MPC resuelve en línea una nueva optimización utilizando un modelo explícito.
Ambos enfoques convergen cada vez más. El aprendizaje profundo por refuerzo basado en modelos aprende un modelo del mundo y planifica a través de él con MPC; métodos como TD-MPC2 planifican en un espacio latente aprendido, mientras una función de valor aprendida puntúa lo que ocurre más allá del final del horizonte breve. Los modelos dinámicos aprendidos son una forma de modelado predictivo, y su precisión a lo largo del horizonte determina hasta dónde puede planificar de forma útil ese controlador.
Percepción para MPC#
Un controlador MPC solo planifica tan bien como percibe, y en un sistema de IA física, como un robot que se mueve entre personas, su estado debe incluir dónde están esas personas y hacia dónde se dirigen. Una cámara que ejecuta Ultralytics YOLO26 en modo de seguimiento proporciona un cuadro delimitador y un ID de seguimiento persistente para cada persona en todos los fotogramas. Combinadas con la estimación de profundidad o la calibración de la cámara y un filtro de Kalman, esas trayectorias se convierten en las posiciones y velocidades de los obstáculos que las restricciones del controlador deben mantener despejadas.










