07.2 模型預測控制 MPC#
本章導讀#
LQR 一次算好、永遠使用;MPC 卻是每一步都重新算: 預測未來數步、最佳化控制序列、只執行第一步、下一步重來。 2000 年代在化工與能源業普及,成為工業界的進階標準。
淺顯說明#
下棋的聰明法:
- 預測:往後想 10 步(預測時域)。
- 規劃:找出這 10 步中最好的走法(最佳化)。
- 執行:只走第 1 步。
- 重來:對手走了之後,重新預測、重新規劃。
為什麼只走第一步?因為對手(擾動)會改變局面——滾動時域讓規劃不斷自我修正, 這本質上就是一種回饋。
正規理論#
離散時間 MPC#
系統 \(x_{k+1} = f(x_k, u_k)\) ,在每一步 \(k\) 解有限時域最佳化:
- \(N\) :預測時域(看多遠);
- \(P\) :終端代價(保證穩定的關鍵);
- \(\mathcal{U}, \mathcal{X}\) :控制與狀態的約束——MPC 的獨門絕活。
執行:滾動時域#
- 量測當前狀態 \(x_k\) ;
- 解最佳化,得控制序列 \(u_k^*, \dots, u_{k+N-1}^*\) ;
- 只執行 \(u_k^*\) ;
- \(k \to k+1\) ,回到第 1 步。
MPC 的兩大優勢#
- 顯式處理約束:閥門只能開 0–100%、溫度不能超過上限——直接寫進最佳化。 LQR/PID 做不到(要靠飽和與試誤)。
- 預測未來:已知將到的擾動(如電價、天氣)可提前反應。
代價:每步要解一次最佳化(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}^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 做不到的。
歷史典故#
- 2000 年 MPC 在化工與能源業普及,見 2000-模型預測控制MPC.md—— 工業標準成形,煉油廠、電網調度都在用。
- MPC 的最佳化核心與 1957 年 Bellman 的動態規劃一脈相承,見 1957-Bellman動態規劃.md。
- 1987 年的 Riccati 解法為 MPC 的終端代價提供穩定性保證,見 1987-H∞狀態空間解法.md。
習題#
- 上例取 \(N = 1\) :寫出最佳化的解析解( \(u^*\) 對 \(x_k\) 是線性回饋嗎?), 並說明 \(N = 1\) 的 MPC 本質上就是 LQR 的單步版。
- 說明為什麼 MPC 需要「終端代價 \(P\) 」才能保證穩定,而 LQR 不需要。