Moduł 05 · predykcyjne

MPC — sterowanie predykcyjne

Horyzont predykcji (rolling horizon), LQR jako MPC z ∞ horyzontem, linear MPC z ograniczeniami (QP per krok).

Pomysł w jednym akapicie

W każdym kroku tt, mając aktualny stan xtx_t, rozwiązujemy problem optymalizacji:

minut,,ut+N1  k=0N1(xkTQxk+Ruk2)+xNTPfxN\min_{u_t,\ldots,u_{t+N-1}}\; \sum_{k=0}^{N-1}\Big(x_k^T Q\, x_k + R\, u_k^2\Big) + x_N^T P_f\, x_N
przy ograniczeniachxk+1=Axk+Buk,uminukumax,xkX.\text{przy ograniczeniach}\quad x_{k+1} = A\, x_k + B\, u_k, \quad u_{min} \le u_k \le u_{max}, \quad x_k \in \mathcal{X}.

Dostajemy sekwencję sterowań ut,,ut+N1u_t^*, \ldots, u_{t+N-1}^*. Aplikujemy tylko utu_t^*, mierzymy nowy stan xt+1x_{t+1}, i powtarzamy całą procedurę. To jest receding horizon principle — predykcja jest WYRZUCANA w każdym kroku.

1. Idea horyzontu predykcji — cień w przyszłość

Najsilniejszą wizualizacją MPC jest pokazanie, jak w każdym kroku regulator wyobraża sobie przyszłą trajektorię na NN kroków, wybiera najlepszą, ale stosuje tylko pierwsze sterowanie z planu. Demo poniżej pokazuje cztery snapshoty predykcji w czasie symulacji oraz rzeczywistą trajektorię (obserwowaną).

parametry MPC

N (długość horyzontu)15
R (waga sterowania)0.10
u_max (saturacja)8.0 N

4 fioletowe „cienie" to przewidywane trajektorie planowane przez MPC w chwilach 0, 0.5, 1.5, 3 s. Każda zaczyna się w bieżącej pozycji (kropka) i pokazuje, jak MPC wyobraża sobie następne NN kroków. Niebieska linia to to, co FAKTYCZNIE się stało.

Zauważ: predykcja z t=0 nie pokrywa się z rzeczywistą trajektorią (mimo identycznych parametrów planu). MPC w każdym kroku replanuje od bieżącej obserwacji — to receding horizon principle.

-0.20.250.71.151.601.63.24.86.48r (cel)predykcja t=0.0spredykcja t=0.5spredykcja t=1.5spredykcja t=3.0sx (rzeczywista)t [s]x-12-6061201.63.24.86.48±u_max = 8u (zaaplikowane)t [s]u

Receding horizon. W chwili tt MPC:

  1. mierzy stan xtx_t,
  2. rozwiązuje problem optymalizacji na horyzoncie NN: znajduje sekwencję sterowań ut,ut+1,,ut+N1u_t, u_{t+1}, \ldots, u_{t+N-1} minimalizującą koszt kwadratowy z ograniczeniami,
  3. aplikuje TYLKO utu_t,
  4. w kolejnym kroku t+1t + 1 wszystko zaczyna się od nowa (z świeżą obserwacją xt+1x_{t+1}).

„Cień w przyszłość" jest WYRZUCANY w każdym kroku. To jest źródło robustności MPC: błędy modelu nie kumulują się, bo predykcja startuje od pomiaru, a nie od poprzedniej predykcji.

Zwiększ RR i widać, że MPC „oszczędza energię" — predykcja wyprowadza system wolniej, ale gładziej. Zmniejsz umaxu_{max} do 3 — predykcja zacznie „uderzać" o ograniczenie i odkształcać się: trajektoria nie idzie już w najszybsze rozwiązanie, tylko w najszybsze dopuszczalne.

2. LQR jako MPC z nieskończonym horyzontem

Klasyczne LQR i MPC są ze sobą blisko spokrewnione. Dla problemu BEZ ograniczeń, z funkcją kosztu kwadratową:

J=k=0(xkTQxk+Ruk2)J_\infty = \sum_{k=0}^{\infty}\big(x_k^T Q x_k + R u_k^2\big)

optymalna strategia to liniowe sprzężenie zwrotne u=KLQRxu = -K_{LQR} x, gdzie KLQRK_{LQR} wyznacza się z algebraicznego równania Riccatiego (DARE). Twierdzenie: dla rosnącego horyzontu NN \to \infty, gain MPC pierwszego kroku zbiega monotonicznie do KLQRK_{LQR}.

Wykres poniżej pokazuje wprost zbieżność dla naszego planta MSD. Dla horyzontu N15N \approx 15 różnica między MPC a LQR jest poniżej 1%. Stąd praktyczna wskazówka: w MPC bez ograniczeń, jeśli stać Cię na N5τplant/TsN \ge 5\,\tau_{plant}/T_s (gdzie τplant\tau_{plant} to dominująca stała czasowa), MPC zachowuje się jak LQR — możesz równie dobrze użyć LQR analitycznie. MPC płaci się, gdy są ograniczenia (które LQR nie potrafi obsłużyć).

wagi LQR

log₁₀ Q₁₁ (waga pozycji)1.0
log₁₀ R (waga sterowania)-1.0
gain LQR (∞-horizon)
K_x4.943K_ẋ3.102Q₁₁10.00R0.100
01.482.974.455.930816243240K_x (LQR ∞)K_x (MPC z horyzontem N)K_ẋ (LQR ∞)K_ẋ (MPC z horyzontem N)N (długość horyzontu MPC)gain

Zbieżność do LQR. Dla nieograniczonego problemu MPC z funkcją kosztu:

J=k=0N1(xkTQxk+Ruk2)J = \sum_{k=0}^{N-1} \big(x_k^T Q\, x_k + R\, u_k^2\big)

gain pierwszego kroku K0(N)K_0(N) wyznaczany przez cofającą się rekurencję Riccatiego, monotonicznie zbieżny do KLQRK_{LQR} z DARE (przerywana linia). Wykres pokazuje wprost: dla N15N \ge 15 różnica jest znikoma — finite MPC jest już praktycznie LQR.

To uzasadnia twierdzenie pedagogicznie: LQR to MPC z nieskończonym horyzontem. Wybór NN w MPC to kompromis: większe NN = bliżej optimum, ale droższe obliczeniowo (QP ma NN zmiennych decyzyjnych).

Dla planta drugiego rzędu z dynamiką spoczynkową w skali kilku sekund i krokiem MPC Ts=0.1T_s = 0.1 s wystarcza N20N \approx 20. Dla cart-pole'a (czwarty rząd, niestabilny) typowe N[30,100]N \in [30, 100].

Spróbuj: zwiększ RR (waga sterowania) do 100 — gain spada, MPC będzie „leniwy". Zmniejsz do 0.001 — gain rośnie wykładniczo, MPC „agresywny" za cenę większego uu.

3. Ograniczenia liniowe — QP per krok

Z ograniczeniami pudełkowymi ukumax|u_k| \le u_{max} (i ewentualnie xkXx_k \in \mathcal{X}) problem MPC przestaje mieć rozwiązanie analityczne. Mamy program kwadratowy z NN zmiennymi decyzyjnymi:

minU  12UTHU+gTUs.t.CUd.\min_U\; \tfrac{1}{2} U^T H U + g^T U \quad\text{s.t.}\quad C U \le d.

gdzie H,gH, g wyrażone są przez A,B,Q,R,x0A, B, Q, R, x_0, a C,dC, d kodują ograniczenia. Standardowe algorytmy QP: aktywny zbiór (active set), punkt wewnętrzny (interior point), operator splitting (OSQP). W praktyce embedded używa się explicit MPC — prekomputowanego rozwiązania jako odcinkowo-liniowej funkcji x0x_0 (Bemporad et al. 2002).

W naszym demo § 1 powyżej rozwiązujemy QP iteracyjnie (gradient z projekcją na pudełko). To NIE jest wydajne, ale wystarcza do wizualizacji. Spróbuj zmniejszyć umaxu_{max} tam: gdy ograniczenie jest aktywne, predykcja deformuje się — zamiast prostej drogi do referencji, planuje „okrężną" tak, by nigdzie nie naruszyć saturacji. To jest jakościowa różnica względem PID lub LQR: te ostatnie najpierw obliczają sterowanie a potem clip do limitu (z możliwością wind-upu); MPC od początku uwzględnia ograniczenie w optymalizacji.

Stabilność MPC — wskazówki

Dla zbieżności i feasibility MPC potrzebne są:

  • Terminal cost PfP_f — typowo z DARE (LQR cost-to-go). Bez niego skończony horyzont może być niestabilizujący nawet dla stabilnego planta.
  • Terminal constraint xNXfx_N \in \mathcal{X}_f — zbiór niezmienniczy pod LQR; gwarantuje recursive feasibility.
  • Wystarczająco długi N — żeby z dowolnego punktu x0x_0 dojść do Xf\mathcal{X}_f w NN krokach z dopuszczalnym uu.

W naszym demo pomijam terminal cost (używam Pf=QP_f = Q) — dla małego planta i dużego N nie ma to znaczenia praktycznego. Pełna teoria — Mayne et al. „Constrained Model Predictive Control" (Automatica 2000).

4. Robust MPC — tube-based

Klasyczny (nominalny) MPC zakłada, że model planta jest dokładny. W rzeczywistości xk+1=Axk+Buk+wkx_{k+1} = A x_k + B u_k + w_k, gdzie wkw_k to ograniczone zaburzenie wkW\|w_k\| \le W. Pytanie: jak zaprojektować MPC, żeby gwarantował feasibility i stabilność w obecności zaburzeń?

Tube-based MPC (Mayne, Seron, Raković 2005) jest najpopularniejszym podejściem. Ideę można oddać tak:

  1. Trajektoria nominalna xˉk\bar x_k i sterowanie uˉk\bar u_k spełniają model bez zaburzeń.
  2. Rzeczywista trajektoria xk=xˉk+ekx_k = \bar x_k + e_k, gdzie błąd eke_k ewoluuje: ek+1=(ABK)ek+wke_{k+1} = (A - BK)e_k + w_k.
  3. Wybieramy KK (np. LQR) tak, by ABKA - BK było stabilne. Wtedy eke_k żyje w pewnym zbiorze niezmienniczym Ω\Omega tube wokół trajektorii nominalnej.
  4. W MPC obniżamy ograniczenia o miarę „tubki": xˉkXΩ\bar x_k \in \mathcal{X} \ominus \Omega, uˉkUKΩ\bar u_k \in \mathcal{U} \ominus K\Omega (operator \ominus to różnica Minkowskiego). To gwarantuje, że rzeczywista trajektoria xk=xˉk+ekx_k = \bar x_k + e_k nadal spełnia oryginalne ograniczenia.
  5. Sterowanie: uk=uˉkK(xkxˉk)u_k = \bar u_k - K(x_k - \bar x_k) — feedback K stabilizuje rzeczywistą trajektorię wokół nominalnej.

Cena: konserwatyzm. Tubka „zjada" margines bezpieczeństwa, więc dopuszczalny zbiór nominalnych trajektorii jest mniejszy niż dla nominal MPC. Dla małych WW akceptowalne; dla dużych — pojawia się min-max MPC, gdzie sterowanie optymalizuje koszt w najgorszym przypadku.

Pełen demo tube-based MPC wymaga obliczania zbiorów niezmienniczych (operacje Pontryagina, Minkowskiego), co wykracza poza prosty interaktywny komponent. Pomijam implementację — najlepszy wstęp: Rawlings, Mayne, Diehl „Model Predictive Control: Theory, Computation, and Design" rozdz. 3.

Co świadomie pomijam

  • Nonlinear MPC (NMPC) — dla układów nieliniowych zamiast jednego QP rozwiązuje się problem NLP w każdym kroku. Algorytmy: Sequential Quadratic Programming (SQP), Interior Point, Real-Time Iteration. Aplikacje: drony, cart-pole z pełnym modelem nieliniowym, robotyka.
  • Economic MPC — gdy funkcja kosztu nie jest kwadratowa wokół setpointu, ale jest bezpośrednio ekonomiczna (zysk minus koszt operacji). Przykład: optymalizacja produkcji procesowej.
  • Stochastic MPC — zaburzenia mają znaną dystrybucję (nie tylko ograniczenie). Problem optymalizacji traktuje koszt jako wartość oczekiwaną i ograniczenia jako chance constraints.
  • Explicit MPC — pre-komputacja optymalnego sterowania jako odcinkowo-liniowej funkcji x0x_0. Pozwala uniknąć rozwiązywania QP online; krytyczne dla embedded systems.