跳轉到

07.2 模型預測控制 MPC#

本章導讀#

LQR 一次算好、永遠使用;MPC 卻是每一步都重新算: 預測未來數步、最佳化控制序列、只執行第一步、下一步重來。 2000 年代在化工與能源業普及,成為工業界的進階標準。

淺顯說明#

下棋的聰明法:

  1. 預測:往後想 10 步(預測時域)。
  2. 規劃:找出這 10 步中最好的走法(最佳化)。
  3. 執行:只走第 1 步。
  4. 重來:對手走了之後,重新預測、重新規劃。

為什麼只走第一步?因為對手(擾動)會改變局面——滾動時域讓規劃不斷自我修正, 這本質上就是一種回饋。

正規理論#

離散時間 MPC#

系統 \(x_{k+1} = f(x_k, u_k)\) ,在每一步 \(k\) 解有限時域最佳化:

\[ \min_{u_k, \dots, u_{k+N-1}} \; \sum_{i=0}^{N-1}\left( x_{k+i}^T Q x_{k+i} + u_{k+i}^T R u_{k+i} \right) + x_{k+N}^T P x_{k+N} \]
\[ \text{subject to } x_{k+1} = f(x_k, u_k), \qquad u \in \mathcal{U},\ x \in \mathcal{X} \]
  • \(N\) :預測時域(看多遠);
  • \(P\) :終端代價(保證穩定的關鍵);
  • \(\mathcal{U}, \mathcal{X}\) :控制與狀態的約束——MPC 的獨門絕活。

執行:滾動時域#

  1. 量測當前狀態 \(x_k\) ;
  2. 解最佳化,得控制序列 \(u_k^*, \dots, u_{k+N-1}^*\) ;
  3. 只執行 \(u_k^*\) ;
  4. \(k \to k+1\) ,回到第 1 步。

MPC 的兩大優勢#

  1. 顯式處理約束:閥門只能開 0–100%、溫度不能超過上限——直接寫進最佳化。 LQR/PID 做不到(要靠飽和與試誤)。
  2. 預測未來:已知將到的擾動(如電價、天氣)可提前反應。

代價:每步要解一次最佳化(QP/非線性規劃),需要算力——這是 MPC 2000 年代才普及的原因 (硬體跟上來了;化工的慢系統則早在 1980 年代就用)。

穩定性保證#

若終端代價 \(P\) 取對應的 Riccati 解、終端約束 \(x_{k+N} = 0\) (或終端集合), 則滾動時域 MPC 漸近穩定——LQR 是 \(N \to \infty\) 的特例。

簡易範例:一階系統的 MPC#

\(\dot x = -x + u\) (離散化 \(x_{k+1} = 0.9x_k + 0.1u_k\) ,取樣 0.1s), 預測時域 \(N = 3\) , \(Q = 1\) , \(R = 0.1\) ,約束 \(|u| \le 2\) ,當前 \(x_k = 5\) 。

預測:

\[ x_{k+1} = 0.9(5) + 0.1u_0 = 4.5 + 0.1u_0 \]
\[ x_{k+2} = 0.9x_{k+1} + 0.1u_1 = 4.05 + 0.09u_0 + 0.1u_1 \]
\[ x_{k+3} = 3.645 + 0.081u_0 + 0.09u_1 + 0.1u_2 \]

代價 \(= x_{k+1}^2 + x_{k+2}^2 + x_{k+3}^2 + 0.1(u_0^2 + u_1^2 + u_2^2)\) 。

這是 \(u_0, u_1, u_2\) 的二次函數——QP 問題,取 \(\partial/\partial u_i = 0\) 解線性方程組, 若解超出 \(|u| \le 2\) 則夾在邊界。解得(概值) \(u_0 \approx -2\) (飽和)、 \(u_1 \approx -1.8\) 、 \(u_2 \approx -1.4\) 。

執行 \(u_0 = -2\) ,下一步量測新的 \(x\) ,重新解—— 約束被顯式處理,這是 PID/LQR 做不到的。

歷史典故#

習題#

  1. 上例取 \(N = 1\) :寫出最佳化的解析解( \(u^*\) 對 \(x_k\) 是線性回饋嗎?), 並說明 \(N = 1\) 的 MPC 本質上就是 LQR 的單步版。
  2. 說明為什麼 MPC 需要「終端代價 \(P\) 」才能保證穩定,而 LQR 不需要。