この記事では、状態方程式表現された線形システムの最適レギュレータに基づく制御器設計ついて説明します。最適レギュレータは最適制御の一種であり、LQ制御・LQR(LQレギュレータ)とも呼ばれます。なお、状態フィードバック制御の状態方程式表現などのモデルも含めた全体像は次の記事でまとめています。
最適レギュレータの状態フィードバック制御構造
それでは状態フィードバックと最適制御、最適レギュレーターついて説明をしていきます。最適レギュレータは制御工学分野で広く知られた基礎的な設計手法の一つです。
まず状態フィードバックについての説明をします。状態方程式表現をされた制御対象は以下のように与えられます。

制御入力がu、制御出力がyとなります。多くのケースではD=0となります。状態はxです。状態フィードバックでは
![]()
と、状態に係数をかけたものを入力として用います。ここで、良く用いられるK, Fを例として記号化していますが、どんな記号を用いるかは論文により様々です。また、記号の前に陽にマイナスをつけるケースもあります。制御対象の状態量の例としては、速度や位置などが挙げられますが、詳しくは状態方程式の説明をご覧下さい。

ここでは状態フィードバックゲインを決める方法としての最適レギュレーターについての説明をしていきます。
まず状態方程式中の主な記号は以下のようになります。まず t が時間であり x が状態ベクトル、が入力 、
が出力です。
が次数であり、状態のベクトルの要素数に対応します。
は
次の正方行列で、
は
次の縦ベクトル、Cは
次 の横ベクトルとなります。これはただし、入力と出力の数が1個のケースが図のようになります 。

次の制御則
![]()
を施したとき、その制御系(自律系)は次のように与えられます。

最適レギュレータの考え方
次に、最適レギュレーター問題でどういうことを考えていくかについて説明します。

最適レギュレーター問題では、まず次のような評価関数を考えます。
![]()
この評価関数は状態 xにQをかけた二次形式のものになっており、それと Ru に関する二次形式の項の線形和で表されています。評価区間は時刻 t = 0 から時刻無限大までとなっています。無限区間の評価区間です。LQRと呼ばれる理由としては(Linear Quadratic)の頭文字からきています。
この評価関数値Jを最小にするようなゲインKを求める問題のことを最適レギュレーター問題と呼びます。ここで評価区間は時刻0秒を基準として無限大までとっていますが、ここは便宜上ゼロとしているだけで別の時刻からスタートしても構いません。
この二次形式の係数行列Qと Rは、重み行列と呼ばれるもので x を重視する場合にはQを大きめに取る、入力uを重視する場合は Rを大きく取るといった扱いがなされます。第一項が小さければ小さいほど、x が早くゼロに収束するような解が良いことを意味しており、他方、第二項が小さいほど入力エネルギーが小さくて済む、ような解が良いということを意味しています。
そして最適レギュレーター問題では、この収束の速さとエネルギーの少なさを両立する
制御手法といえます。

最適レギュレータ問題の解
ここで最適レギュレーター問題の解を先に説明します。この最適レギュレーター問題の解は、すでに求められており以下のようなステップで求めることができます。

まずは図のステップ 1 で示すように、リカッチ方程式(リッカチ方程式, Liccati方程式)と呼ばれるこのこちらの方程式を満足する正定行列 Pを求めます。これが最初のステップです。
この解は、代数計算として求めることができます。
そして、ステップ 2 でこの得られた正解 Pを使って、ゲインを Rの逆行列かけるBの転置かけるPというふうに設定してやると、それが先ほどの最適レギュレーター問題に対する最適解になります。
最適性の証明については、後半にある動画をご覧ください。
数値例を用いた最適レギュレータの検証
MATLAB でゲインKを求めるときには、この lqr という関数を使って、リカッチ方程式を解いてゲインKを求めることができます。
ここでは n =3、次数が3次のシステムの最適レギュレーターの設計の例を考えていきます。

制御対象がこのように与えられていて状態ベクトルは要素が3つあります。重み行列の要素を単位行列として与えてRの重みを0.01とした場合を最初にシミュレーションします。

その後で入力を重視してより省エネを目指すような評価値を、評価関数を考えたケースを2番目にシミュレーションしていきます。R = 1 および R = 100 を示します。


Rが大きいほど、振幅が大きくなることが許容された制御結果となっていることがわかります。入力については波形を示していませんが、 の時間推移を示した場合、逆に
は
の重みが大きい方が小さな値(時系列)となります。
数値例
初期値01
逆にを固定して、
を様々に変えることもできます。また、
の要素ごとに、どの状態量を小さくしたいか重視したい項目によって
の構造を変えることもできます。最適レギュレータでは、設定した評価関数(および重み)に対する最適な状態フィードバックゲインが求まるため、評価関数の設定が適切でないと所望の応答にはなりません。
以下、を変えて応答波形を確認します。制御対象の初期値を
]に固定し、まずは入力
とした場合の波形が以下の通りです。

次に、の重みを固定し、3つの重み
の設定に対するそれぞれの最適制御結果を示します。赤が
の重みが大きい場合、黄色が
の重みが小さい場合です。出力応答は次のようになります。

出力において、状態の重みを大きくしている赤が最も応答が良い(零への収束が速い)です。次に入力の大きさを比較します。

今度は、が小さな値となる黄色が最も入力が小さくて済みます。何を重視した応答を実現したいかで重みを適切に調整する必要があります。例えば、入力はいくらでも使って良い環境であれば、
の重みを大きく設定することができ、その結果として収束性を良くすることができます。
初期値02
初期値01と同じ条件での設計について、初期状態を変更した場合の応答波形を示します。制御器は制御対象および重みの組み合わせに対して(当然のように)同じものとなっています。
初期状態を ]と設定します。

前の数値例と同じくの重みを固定し、3つの重み
の設定に対するそれぞれの最適制御結果を示します。赤が
の重みが大きい場合、黄色が
の重みが小さい場合です。出力応答は次のようになります。

次が入力信号となります。

入力信号は黄色(の重みが小さい)のケースが最も大きくなります。なお、
の重みを極端に小さく設定した結果、入力は0に近くなり、制御対象の零入力応答に近い応答波形になります。
その他の最適制御に関連するMATLABシミュレーションについては次の記事をご覧ください。
数値アニメーション(YouTube)
この動画では最適レギュレータの数値アニメーションを示しています。
左は、3つの重みパターンで、それぞれに最適ゲインを定め、その結果(軌道)を表示しています。また、右下がR=2, R=10, R=25としQを固定したときの評価値です。紫がR=25の評価関数値、緑がR=10の評価関数値、赤がR=2の評価関数値であり、それぞれの評価関数値に対して最適化されたものが一番評価値が小さいことが3つそれぞれで確認できます(黒枠が最適値となっています。)。
以上が最適制御・最適レギュレータに関する説明になります。
最適制御の関連動画
以下は,状態方程式表現されたシステムの最適レギュレータについて説明した動画になります。
MATLABシミュレーションによる最適レギュレータ設計
関連ページ(最適制御)
>>制御工学チャンネル:500本以上の制御動画ポータルサイト Control Engineering Channel - 01-Prof.Okajima-02 (control-theory.com)
自己紹介
岡島 寛 (熊本大学工学部情報電気工学科准教授)
制御工学の研究をしています。モデル誤差抑制補償器,状態推定,量子化制御など
研究室HP
岡島研究室(システム制御 control-theory.com)
制御動画ポータルサイト
制御工学チャンネル(伝達関数・状態方程式・MATLABなど)
電気動画ポータルサイト
本記事をお読みいただきありがとうございます。役に立った、と思われましたら、ブックマーク・シェア等のアクションをしていただければ嬉しいです。