MyEnigmaスマートフォン用の表示で見るMyEnigmaとあるエンジニアのブログです。パラメータの自動チューニング手法が存在している。線形モデルを設計する必要がある。逐次的に最適化問題を解くことで制御入力を決定する手法です。Controlの頭文字を取って、MPCと呼ばれることも多いようです。MPCの歴史MPCは1970年代に石油精製や化学プラントのような制御ループが比較的遅いが、システムの遅れが大きいシステム用の制御アルゴリズムとして開発されました。Controlなどと呼ばれていました。制御ループが高速な、リアルタイム制御システムにまで応用が広がっています。二種類に分類されます。一つ目は、システムモデルが線形モデルであり、myenigma.hatenablog.com制約条件が凸関数や凸空間で表せる場合、MPCの制御問題は凸最適化アルゴリズムで解くことができます。一般的にMPCというとこの線形MPCのことを指します。本記事では基本的にこの線形MPCのことを述べます。線形MPC以外のMPCに関しては、下記の記事を参照ください。Horizon制御といいます。Horizon制御(:RH制御)を同じものとして扱っている場合も多いようです。下記の図は、一般的なRH制御のシステムダイアグラムです。左のブロックがMPCコントローラーであり、qはMPCの評価関数、xは状態変数、uは入力値を表します。時刻tの時の状態変数をx(t)とし、モデルは線形システムを前提とすることが多いようです。最後の行は、状態xや入力uの制約条件を表しています。下記の図は、RH制御の時刻t,t+1の時の入力プロファイルと出力プロファイルを表したものです。制御ホライズン:Nmといいます。制御ホライズンは短くすることが多いようです。最適化が不安定になるからです。制御が不安定になりやすくなります。初期値として、Nmは2~3の値を、Npの値は制御の時定数分の値を設定することが多いようです。大きく分けて3つの利点があります。制約条件というものがあります。安全性の面での速度の最大値、ステアリングの最大角度や最大変化量などです。制約条件の無い入出力は殆ど無いと思われます。精密な制御を実施することができます。下記の記事を参照下さい。多入力多出力のものが多いです。従来の制御手法では、そのような多入力多出力の制御システムを一つの制御システムとして取り扱うのが難しいという問題がありました。一つのコントローラーに制御システムをまとめるのが難しいという問題がありました。一つの制御システムで多入力多出力の制御を実現することができます。制御システムを実現できます。最適制御を実施するため、高い制御性能が期待できます。外乱などにも強く、実用性の高い制御を実現することができます。制御や入力の時刻遅れを明示的に考慮することができます。パラメータの自動チューニング手法が存在している。自動的にパラメータチューニングする手法が存在します。様々な利点がありますが、やはり欠点もいくつかあります。計算が重いという問題があります。よって、高速な応答性が必要な制御システムには利用しずらいという問題があります。問題にならないこともありますが、やはり最適化のロジックなどは高速なものを利用する必要があります。制御システムが安定であるとは限りません。MPCでは、この安定性をできるだけ担保するようにシステムを設計するのが重要になります。線形モデルを設計する必要がある。上記のモデルの図にあるように、MPCで制御する対象は線形モデルで記述される必要があります。制御する対象が非常に複雑であったり、非線形であったりすると、この線形モデルを作るのが難しい場合があります。様々な入力と出力により、ニューラルネットや機械学習により線形モデルを生成する方法もあるようです。下記記事を参照下さい。下記のようなフローをとることが多いようです。線形モデルを構築する前述の通り、MPCは基本的にシステムのモデルを線形システムでモデリングします。機械学習などでモデリングする方法があるようです。凸最適化のツールを選定するMPCでは一般的に、コスト関数の最適化に凸最適化の技術を利用します。自分の利用したい環境に合わせて、ツールを選定するのが便利かと思います。下記の資料を参照下さい。myenigma.hatenablog.comPythonによるシンプルなMPC制御シミュレーションPythonの最適化モデリングツールであるCVXPYを使って簡単なMPCの制御シミュレーションをしてみたいと思います。下記の式を満たす入力u0...uT-1を最適化で計算します。ここでlはコスト、lTは終端コストです。CとCtはそれぞれ、状態と入力、終端値に対する制約条件になります。線形モデルのパラメータと状態量の初期値は乱数で与えています。コストとしては、xの二乗和とuの二乗和としました。各入力に1以下という制約を入れてます。最終値を0にするように制約を入れます。下記がシミュレーションコードです。下記のグラフが表示されます。入力のuの値の制約条件がきちんと守られていることがわかります。その入力で4つの状態量のすべてが0に収束していることがわかります。MPCで制御できているようです。入力プロファイルの初めのデータのみを制御に利用します。x0の値を毎回センサなどの観測値を使って更新しながら制御する形になります。実際のシステムでMPCのコントローラを使いたい場合は、パフォーマンスを向上させるために、C言語などで再実装する必要があります。最適化コードジェネレータです。これは、モデリング言語で最適化問題を記述すると、その問題を高速に解くC言語コードを自動生成してくれます。problem)になることです。重要でない制約条件を緩和する方法があります。緩和する制約条件を(ソフト制約)といいます。制約を超えることを許容するようになります。出力の制約をソフト制約にすることが多いようです。variable)という疑似変数を追加することで実現できます。下記の式を一般的な形とすると、いくつかチューニングすべきパラメータがあります。各状態変数の重みパラメータです。状態変数の一つを最小化したい場合は、その部分の重みを大きくします。このQは基本的には正対称行列です。上記の式ではすべての予測時間において、Qが同じ値を使っていますが、MPCの手法によっては、予測時間に応じてQを変える手法もあるようです。別途Qfinalというコスト行列を設定することが多いようです。大きな重みを付けて、コスト関数に入れることが多いようです。入力の量を抑制するための重みパラメータです。このパラメータを大きくすることで、システムの安定性が向上します。外乱に対する復帰が遅くなるので、トレードオフの関係があることに注意が必要です。長ければ、長いほどシステムの安定性が向上します。Worksの入門ビデオがおすすめです。Toolboxの説明が多いですが、MPCの基本的な考え方もわかりやすく説明されています。Supportersもしこの記事が参考になり、ブログをサポートしたいと思われた方は、こちらからよろしくお願いします。はてなブログProとあるエンジニアのブログです。Page月別アーカイブスポンサーリンクスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。