モデル予測制御シミュレーター 戻る
制御工学シミュレーター

モデル予測制御シミュレーター — 有限ホライズン最適化

1次プロセスを離散化し、予測ホライズン先までの出力誤差を最小化する最適入力を毎ステップ解析的に計算。MPCの基本動作とPIDとの応答差を可視化します。

パラメータ設定
予測ホライズン N_p
step
制御ホライズン N_c
step
入力ペナルティ λ
目標値 r

プロセス: K = 2、T = 5 s、dt = 0.1 s(固定)。シミュレーション時間 15 s。比較対象として同じ系に PID(Kp=2, Ki=0.4)を適用した応答も表示します。

計算結果
立ち上がり時間(0→90%)
整定時間(±2%)
オーバーシュート
初期入力 u(0)
出力 y(t)、目標 r、入力 u(t)

上段=出力 y(青)・目標 r(赤破線)・PID応答(灰)・予測ホライズン先読み線(青点線)/下段=入力 u(緑)・Nc 個の最適化入力(黄点)

理論・主要公式

1次プロセス $G_p(s) = K/(T s + 1)$ を前進 Euler で離散化し、$x_{k+1} = a\,x_k + b\,u_k$($a = e^{-dt/T}$、$b = K(1-a)$)で表します。

$N_p$ ステップ先までの予測:

$$y_{k+i} = a^{i}\,x_k + \sum_{j=0}^{i-1} a^{i-1-j}\,b\,u_{k+j}$$

コスト関数(出力誤差 + 入力変化ペナルティで積分動作を確保):

$$J = \sum_{i=1}^{N_p} (y_{k+i} - r)^2 + \lambda \sum_{j=0}^{N_c - 1} (\Delta u_{k+j})^2$$

無拘束 QP の解析解($\partial J / \partial U = 0$):

$$U = \bigl(H^\top H + \lambda\, L^\top L\bigr)^{-1} \bigl(H^\top (R - F\,x_k) + \lambda\,u_{k-1}\,\mathbf{e}_1\bigr)$$

$H$($N_p \times N_c$)と $F$($N_p \times 1$)はプロセス係数 $a, b$ から構成され、$L$ は前進差分演算子。受信ホライズン方式で先頭の $u_k = U[0]$ のみ印加し、次ステップで再最適化します。

モデル予測制御シミュレーターとは

🙋
「モデル予測制御」って聞いたことはあるんですけど、PIDと何が違うんですか?普通のフィードバックじゃダメなんですか?
🎓
ざっくり言うと、PIDは「今の誤差」しか見ないけど、MPC は「これから 10 ステップ先までの誤差」を見て、それを最小化する入力を計算するんだ。プロセスの内部モデルを持っていて、$x_{k+1} = a x_k + b u_k$ で将来を予測する。上のシミュレーターで MPC の青線と PID の灰線を比べてごらん。同じ系でも MPC の方が無駄な振動が少ないだろう。
🙋
「予測ホライズン Np」を 30 に上げてみたら、応答が少し穏やかになりました。これって計算量はどうなるんですか?
🎓
良い質問だ。Np を上げると行列 $H$ のサイズが Np × Nc に膨らむ。本ツールは無拘束 QP の解析解 $U = (H^\top H + \lambda I)^{-1} H^\top (R - F x_k)$ を使うから Nc × Nc の逆行列計算で済むけど、現場の拘束付き MPC では毎ステップ QP ソルバーを回すから、Np を倍にすると計算時間が一気に増える。実機では Np ≈ 整定時間の 80〜100%、Nc は 1〜3 で十分なことが多いんだ。
🙋
「入力ペナルティ λ」を 10 にしたら、応答がすごく遅くなりました。なんでこんなパラメータが必要なんですか?
🎓
λ は「入力を派手に動かしたくない」というペナルティだ。0 にすると MPC は最速で追従しようとして大きな入力を出す。実機ではバルブやモーターに無理がかかってしまう。λ を上げると「ゆっくりでいいから入力は穏やかに」になる。下段の u(t) を見ると、λ=0.1 と λ=10 で初期入力 u(0) の大きさが全然違うのが分かるはずだよ。
🙋
下段の黄色い点は何ですか?3 個並んでますね。
🎓
それが MPC の本質で、最初の最適化で計算した Nc 個の入力列 $u_{k}, u_{k+1}, u_{k+2}$ だ。でも MPC は受信ホライズン方式だから、実際にプラントに印加するのは先頭の $u_k$ だけ。次のステップで新しい測定値 $x_{k+1}$ を取り直してまた Nc 個計算する。「将来も含めて最適化するけど、実行は 1 個ずつ」というのがミソだよ。だから外乱が入ってもすぐに修正できる。

よくある質問

最大の違いは「将来予測」と「拘束を陽に扱える」ことです。PID は瞬時の誤差・積分・微分しか使いませんが、MPC はプロセスモデルで Np ステップ先まで予測し、入力上下限・出力安全限界などの拘束を最適化問題に直接組み込めます。さらに MIMO(多入力多出力)系で変数間の相互作用も自然に扱えるため、石油精製・化学プラントなど数十変数を協調制御する用途で標準的に使われています。一方で計算コストが高く、正確なモデルが必要なため、単純な SISO ループでは PID の方が低コストで実用的です。
受信ホライズン方式により毎ステップで新しい測定値を取り直して再最適化するため、ある程度のモデル誤差には頑健に動作します。ただしモデルとプラントが大きく乖離すると定常偏差や不安定化が起こる可能性があります。実装では「外乱モデル(積分外乱)」を追加してオフセットフリー追従を保証する手法や、ロバスト MPC(Tube MPC など)でモデル不確かさを陽に扱う手法が用いられます。シミュレーターでは内部モデルとプラントを同一にしているため理想的な追従が観察できます。
計算コスト削減と入力の暴れ抑制の2つが主な理由です。Nc を Np と同じにすると、入力変数が Np 個になり最適化問題のサイズが大きくなる上、Np 個の入力で Np 個の予測出力を厳密に追従させようとして入力が激しく振動します。Nc を 1〜3 程度に小さくし、それ以降は最後の入力を保持する「ブロッキング」を行うと、滑らかで実装しやすい入力列が得られます。本ツールでは Nc 個の入力の後は $u_{k+Nc-1}$ を保持する形式で予測式 $H$ 行列を構成しています。
石油精製・化学業界では AspenTech 社の DMCplus(Dynamic Matrix Control の商用版)、Shell 由来の SMOC、Honeywell 社の Profit Controller などが代表的です。これらは数十〜数百の入出力変数を持つ MIMO プロセスを扱い、経済最適化(LP/QP)を上位層に組み合わせた階層構成が一般的です。自動車業界ではエンジン制御・自動運転に MPC が使われ、医療分野では人工膵臓のインスリン投与制御にも応用されています。MATLAB の Model Predictive Control Toolbox や Python の do-mpc・CasADi も研究・教育で広く利用されます。

実世界での応用

石油精製・化学プラントの上位制御:MPC が最も普及している分野です。蒸留塔・接触分解装置・改質装置などの数十変数 MIMO プロセスに対し、製品純度・温度・圧力を同時に目標範囲内に保ちつつ、エネルギー消費や原料コストを経済最適化します。下位の PID ループの目標値を MPC が決定する階層構成(カスケード)が標準的で、世界の精製能力の大部分が MPC 制御下で運転されています。

自動車のエンジン・パワートレイン制御:ターボチャージャー付きエンジンの空気量制御、ハイブリッド車のエネルギー管理、自動運転の経路追従・衝突回避制御で MPC が使われます。特に車両運動制御では、ステアリング・加減速・トルク配分を 100 ms 程度の高速周期で最適化し、タイヤ摩擦限界などの拘束を陽に扱える点が強みです。

電力系統と再生可能エネルギー:マイクログリッドの電力需給バランス、風力・太陽光発電の蓄電池併用システム、HVDC 連系線の潮流制御に MPC が応用されます。気象予測情報を予測ホライズンに組み込み、数時間先までの発電量予測と消費予測を考慮した最適運用が可能です。建物の冷暖房制御(Building HVAC)でも、天気予報を使った MPC が省エネ実証で効果を上げています。

医療・バイオ:糖尿病患者向けの人工膵臓(クローズドループインスリン投与)に MPC が実用化されています。血糖値モデルで数十分先までを予測し、低血糖を避けつつ目標範囲に維持するインスリン量を計算します。米国 FDA 承認の Tandem Control-IQ などが代表例で、患者の QOL を大きく改善しています。

よくある誤解と注意点

最も多い誤解は、「予測ホライズン Np を長くすれば長くするほど良い制御になる」と考えてしまうことです。実際には Np が長すぎると、遠い将来の予測誤差が現在の決定を支配してしまい、近視眼的な応答や数値的に不安定な最適化を招くことがあります。経験則として Np はプロセスの整定時間の 80〜100% に対応するステップ数(ステップ応答が定常値の 95% に達する時間 / dt)に設定するのが目安です。本ツールで Np=30 に上げても応答が劇的に改善しないのは、既に Np=10 で整定時間の 80% をカバーしているためです。

次に多いのが、入力ペナルティ λ を 0 にすれば最速応答になると思い込むことです。確かに λ=0 では出力誤差のみを最小化するため理論上は最速ですが、初期入力 u(0) が極めて大きくなり、実機のアクチュエータでは飽和や寿命低下を招きます。さらに λ=0 ではモデル誤差や測定ノイズに過敏に反応し、入力が激しく振動する「リンギング」が発生します。実用では λ をプロセスゲイン $K$ の二乗($K^2$)程度から始めて、入力波形を見ながら調整するのが定石です。本ツールで λ を 0 にすると u(0) が大きく跳ね上がるのが確認できます。

最後に、本ツールは「内部モデルとプラントが完全一致した理想ケース」を扱っている点に注意してください。現実のプラントでは、モデル化されていない高次ダイナミクス、時変パラメータ、外乱、測定ノイズが必ず存在します。本シミュレーターで観察される滑らかな追従と低オーバーシュートは、その理想性に依存しています。実装では (1) 推定器(カルマンフィルタ)で状態を再構成、(2) 積分外乱モデルでオフセットフリー化、(3) 拘束付き QP ソルバーで安全限界を守る、という追加要素が必須です。MPC は強力な枠組みですが、PID よりも「設計とチューニングの専門知識」を要求する手法であることを忘れないでください。