発展:最適制御とMPC

7 分で読了
このページの目次

極配置は望む動特性を指定しますが、偏差と操作のコストまでは決めません。最適制御はその取捨選択を目的関数にし、MPCは有限の未来と制約を毎回の決定に組み込みます。状態フィードバック、ディジタル制御、二次関数が前提です。

LQR:目的を定義する

連続系に対し、

を最小化します。は状態偏差、は操作への重みです。mをcmに変えて重みを変えなければ、物理的な好みも変わります。許容偏差や操作量を正規化尺度にできます。

可安定性と可検出性の標準条件下で、安定化Riccati解は

を満たし、、です。はコスト行列で、状態ではありません。基本LQRには操作量の硬い制約がなく、後からクリップすると最適性と保証が変わります。

手計算できる例

、、ではなので、安定化解は

ならです。にするとゲインは0.5になり、収束が遅くなります。で各最適コストは4と8ですが、目的関数が違うので、その数値だけで優劣は決まりません。

MPC:系列を計算し、最初だけ実行する

離散モデルで、毎回

を解きます。、モデル、状態制約、入力制約、必要なら終端制約を課します。最初の操作だけ実行し、次に測定・推定して再最適化します。

外乱やモデル誤差によるずれを新しい情報で修正でき、既知の将来目標も利用できます。予測軌道と実現軌道を区別します。do-mpcの原理説明は有限時域、推定、制約をまとめています。

有限候補で仕組みを見る

無次元モデル、、目標0、操作候補を使います。実験のコストは

で、追加の終端項はありません。前節の記法とは異なり、操作後の状態を評価します。全系列を探索し、有限集合内の大域的最適解を得ます。一般の連続入力MPCの最適解とは区別します。

図を準備しています
発展:最適制御とMPC · 実験

x(k+1)=x(k)+u(k)、x0=2.5、候補0、±0.5、±1、コストΣ[x(i+1)²+ρu(i)²]です。5^N候補を探索し最初の操作だけ実行します。破線は外乱を知らない最初の予測です。

予測長と操作重みを変え、最初の予測、実際の軌道、操作を比較します。3回目の操作後に+1外乱を加えられますが、事前には予測に含めません。同コストなら最初の操作の絶対値が小さいもの、さらに同じなら列挙順を優先します。

で、のコストは、はなので−1を選びます。連続入力をに制限するなら、停留点を区間へ射影します。有限候補なら近傍候補も比較します。

可行性と安定性は別に確認する

現在解があっても、外乱後の次回に解があるとは限りません。これが再帰的可行性です。有限時域で最適でも、無限時間の収束は自動保証されません。適切な終端コスト、終端集合、局所制御則などを用いますが、必要条件は対象に依存します。

予測を長くすると遠くまで見られますが計算量が増えます。期限を超えれば制御に遅れが加わります。タイムアウトや解なしの場合の代替操作、制約の優先順位、推定誤差、モデル更新を定義します。ソフト制約には許容違反量と罰則を明示し、硬い限界を無断で緩めません。

理解を確かめる

LQRの操作をクリップしても元の問題の最適解ですか。

考え方

閉ループが変わるため、そうとは言えません。飽和を分析するか制約付き問題として解き、安定性と可行性を再確認します。

一度計算した系列をずっと実行しないのはなぜですか。

考え方

外乱、モデル誤差、推定更新で状態が予測からずれるためです。新しい情報で再最適化しますが、計算遅延も実装に含めます。

再現と次の学習

python-controlのlqrはゲイン、Riccati解、閉ループ固有値を返します。SciPy経路で標量例を確認します。

import control as ct
K, X, poles = ct.lqr([[0.0]], [[1.0]], [[1.0]], [[4.0]], method="scipy")
print(K, X, poles)
# [[0.5]] [[2.0]] [-0.5]

次は、モデルを改善するシステム同定、保証範囲を広げる非線形・ロバスト制御、雑音を扱う確率的推定へ進めます。学習ルートに戻り、目的に合わせて選んでください。