強化学習による Cart-Pole Balancing




cp_rl_app.jarをダウンロードしてダブルクリックして実行してください(コマンドラインでは java -jar cp_rl_app.jar)。

左から順に、振り子の状態、Critic、Actor。

「After Learning」ボタンを押すと、学習が完了した状態にセットされます。

Critic/Actor は x=v=0 におけるものを表示しており、横軸は -π <θ < π、 縦軸は -2.5π <ω < 2.5π を表す。
値は、青:負緑:0赤:正を表す。

Critic/Actor のフィールドをクリックすると、初期状態を定められます。
スクロールバーによりおもりの質量を変更できます。

シミュレータが実行出来ない方は adoptium.net からOpenJDKをインストールしてください。


台車 (Cart) 上の棒 (Pole) を鉛直上向きに振り上げて静止させる制御を 強化学習を用いて行ないます。
台車に力 F の加わった系の運動方程式は次式になります。



このとき、Cart-Pole 系の状態 (θ, ω, x, v) を観測し、その状態に応じた 力 F を出力する制御器を構築するのが課題となります。

強化学習では、下図のような構成で制御を行います。



まず、系の状態に応じた報酬 r は Pole の振り上げ時が最大となるよう r(θ) = cos θ で定義されます。
このとき、方策 F に従った時に期待される報酬 V(θ, ω, x, v) は次式で定義されます。



V(θ, ω, x, v) が大きくなるように制御を行うと、系は所望の状態に近付くことになります。

しかし V(θ, ω, x, v) は未知の関数なので、実際には関数近似を行って V(θ, ω, x, v) を推定することになります。
このとき、以下の TD 誤差が小さくなるようにパラメータの変更を行うと、 V(θ, ω, x, v) が推定されます。
このように、V(θ, ω, x, v) を推定するユニットを Critic と呼びます。



一方、(θ, ω, x, v) の値に応じて制御入力 F を決めるユニットを Actor と言い、以下の式に従います。 (n はノイズ)



μ(θ, ω, x, v) も未知関数であり、関数近似を行う必要があります。
μ(θ, ω, x, v) の推定においても、上記の TD 誤差を小さくする ようにパラメータを変更することで、学習が進みます。

ここでは、Critic の学習に連続時間、連続空間の TD(λ) 法、 Actor の学習に方策こう配法を用いています。

このページは以下の文献を参考にしています。


←「二足歩行モデルの手動制御」へ「強化学習による振り子の振り上げ制御」へ→

金丸隆志のページに戻る