Skip to main content

Perspectiva de un ignorante - preguntas a la IA - Non Linear Model Predictive Control

¿Qué problema se resuelve en un solver de MPC no lineal?


Un solver de MPC no lineal (Nonlinear Model Predictive Control, NMPC) resuelve un problema de optimización no lineal restringido, cuyo objetivo es encontrar la secuencia óptima de acciones de control que lleven al sistema a un comportamiento deseado, respetando tanto la dinámica no lineal del sistema como las restricciones impuestas (por ejemplo, límites en estados o entradas).


💡 Problema que resuelve el solver NMPC:

Dado un modelo dinámico no lineal:

$\dot{x}(t) = f(x(t), u(t))$

o en forma discreta:

$x_{k+1} = f(x_k, u_k)$

y una función de costo a minimizar del tipo:

$J = \sum_{k=0}^{N-1} \ell(x_k, u_k) + \ell_f(x_N)$

sujeta a:

  • Dinámica del sistema: $x_{k+1} = f(x_k, u_k)$

  • Restricciones en los estados: $x_k \in \mathcal{X}$

  • Restricciones en las entradas: $u_k \in \mathcal{U}$

El solver NMPC resuelve el siguiente problema de optimización en cada instante de control:


Problema de optimización no lineal restringido (NLP):

$\min_{u_0, u_1, ..., u_{N-1}} \quad \sum_{k=0}^{N-1} \ell(x_k, u_k) + \ell_f(x_N)$

sujeto a:

  • $x_{k+1} = f(x_k, u_k), \quad \forall k = 0,...,N-1$

  • $x_k \in \mathcal{X}, \quad u_k \in \mathcal{U}$

  • $x_0 = x_{\text{actual}}$ (condición inicial)


🧩 ¿Qué hace el solver exactamente?

  1. Predice la evolución futura del sistema usando el modelo no lineal.

  2. Optimiza la secuencia de controles futuros en un horizonte NN.

  3. Respeta todas las restricciones dinámicas y físicas.

  4. Ejecuta solo el primer control de la secuencia óptima.

  5. Repite el proceso en el siguiente instante (receding horizon).


Ejemplo de aplicación:

Control de un robot con dinámica compleja, como un dron o un vehículo autónomo, donde las ecuaciones de movimiento son no lineales, y se deben evitar obstáculos y respetar límites de velocidad o aceleración.


¿Quieres que te muestre un ejemplo numérico o código con CasADi o ACADO?

¿Y ese problema de optimización cómo se plantea y se resuelve matematicamente?

Excelente pregunta. Vamos a profundizar paso a paso en cómo se plantea y se resuelve matemáticamente el problema de optimización que enfrenta un solver de MPC no lineal (NMPC).


✅ 1. Planteamiento del problema matemático (NLP)

El problema se plantea como un problema de optimización no lineal restringido (NLP), donde se desea encontrar la secuencia de controles {u0,u1,...,uN−1}\{u_0, u_1, ..., u_{N-1}\} que minimiza un costo sujeto a restricciones dinámicas y físicas.

📌 Formulación estándar (discreta):

min⁡{xk,uk}J=∑k=0N−1ℓ(xk,uk)+ℓf(xN)\min_{\{x_k, u_k\}} \quad J = \sum_{k=0}^{N-1} \ell(x_k, u_k) + \ell_f(x_N)

sujeto a:

  1. Dinámica del sistema (no lineal):

    xk+1=f(xk,uk),∀k=0,...,N−1x_{k+1} = f(x_k, u_k), \quad \forall k = 0, ..., N-1
  2. Restricciones de estado y control:

    xk∈X⊂Rn,uk∈U⊂Rmx_k \in \mathcal{X} \subset \mathbb{R}^n, \quad u_k \in \mathcal{U} \subset \mathbb{R}^m
  3. Condición inicial:

    x0=xmedidox_0 = x_{\text{medido}}

✅ 2. Discretización del sistema dinámico

El modelo continuo x˙(t)=f(x(t),u(t))\dot{x}(t) = f(x(t), u(t)) se discretiza en el tiempo usando algún método de integración:

  • Euler explícito:

    xk+1=xk+Δt⋅f(xk,uk)x_{k+1} = x_k + \Delta t \cdot f(x_k, u_k)
  • Runge-Kutta (RK4 es muy común en NMPC):

    xk+1=Φ(xk,uk)x_{k+1} = \Phi(x_k, u_k)

Esto convierte el modelo en un conjunto de igualdades algebraicas no lineales.


✅ 3. Reescritura como NLP (con todas las variables)

Una vez discretizado, se agrupan todas las variables:

  • Variables de decisión:

    z={x1,...,xN,u0,...,uN−1}z = \{x_1, ..., x_N, u_0, ..., u_{N-1}\}
  • Función objetivo:

    J(z)=∑k=0N−1ℓ(xk,uk)+ℓf(xN)J(z) = \sum_{k=0}^{N-1} \ell(x_k, u_k) + \ell_f(x_N)
  • Restricciones de igualdad:

    h(z)=xk+1−f(xk,uk)=0h(z) = x_{k+1} - f(x_k, u_k) = 0
  • Restricciones de desigualdad:

    g(z)≤0(por ejemplo, lıˊmites en xk,uk)g(z) \leq 0 \quad \text{(por ejemplo, límites en } x_k, u_k \text{)}

Entonces, el problema se convierte en:

min⁡zJ(z)sujeto ah(z)=0g(z)≤0\begin{aligned} \min_{z} & \quad J(z) \\ \text{sujeto a} & \quad h(z) = 0 \\ & \quad g(z) \leq 0 \end{aligned}


✅ 4. Resolución del problema (técnicas)

Este NLP se resuelve con métodos de optimización numérica no lineal, como:

🔹 Métodos de punto interior (IPM)

  • Utilizados por IPOPT, CasADi, FORCES Pro.

  • Introducen penalizaciones logarítmicas para desigualdades.

  • Convierten el problema a un problema KKT (Karush-Kuhn-Tucker).

  • Iterativamente resuelven sistemas lineales para actualizar zz.

🔹 SQP (Sequential Quadratic Programming)

  • Aproximan el NLP por una QP (programación cuadrática) en cada iteración.

  • Usan linealización de restricciones y cuadratización del costo.

  • ACADO y algunas implementaciones en C usan este método.


✅ 5. Condiciones de optimalidad (KKT)

Para el óptimo z∗z^*, se deben cumplir las condiciones KKT:

  1. Gradiente nulo del lagrangiano:

    ∇zL(z∗,λ∗,μ∗)=0\nabla_z \mathcal{L}(z^*, \lambda^*, \mu^*) = 0
  2. Restricciones primales:

    h(z∗)=0,g(z∗)≤0h(z^*) = 0, \quad g(z^*) \leq 0
  3. Multiplicadores duales:

    μ∗≥0,μi∗gi(z∗)=0(complementariedad)\mu^* \geq 0, \quad \mu_i^* g_i(z^*) = 0 \quad \text{(complementariedad)}

🔁 Receding Horizon (horizonte móvil)

Una vez resuelto el problema:

  1. Se aplica solo el primer control óptimo u0∗u_0^*.

  2. Se mide el nuevo estado del sistema.

  3. Se replantea y resuelve el problema nuevamente con el nuevo x0x_0.


🎓 Ejemplo ilustrativo (simplificado)

Supongamos un sistema no lineal:

xk+1=xk+Δt(xk2+uk)x_{k+1} = x_k + \Delta t (x_k^2 + u_k)

Costo:

J=∑k=0N−1(xk2+uk2)J = \sum_{k=0}^{N-1} (x_k^2 + u_k^2)

Restricciones:

  • −1≤uk≤1-1 \leq u_k \leq 1

  • x0=1x_0 = 1

Esto se discretiza, se plantea como NLP, y se resuelve numéricamente (por ejemplo, usando IPOPT o CasADi).


¿Te gustaría que resolviera este ejemplo con código para verlo en práctica? ¿O prefieres explorar un sistema realista como el péndulo invertido o un robot móvil?