【機械学習基礎研究11】
倒立状態維持の強化学習(原点付近に留まるように学習した結果)
前回までは、おもりが下に落下しないように滑車に加える力を学習しました。 その際に、滑車の位置に関する制限は加えなかったため、おもりと滑車が水平に移動しながら上下を保つという状況が学習結果得られた解でした。そこで今回は、滑車の位置を原点付近に留まるように利得を与えてQ学習を実行してみます。
Q学習のパラメータ
環境と行動と利得の定義(行動価値関数の定義)
・おもりの角度の分割数:12
・おもりの分割数:12
・滑車の位置の分割数:11
→ 環境数:12×12×11
・力の分割数(行動数):5
利得の定義
滑車を原点付近に留めるために、おもりの位置(x座標)と原点との距離の2乗に比例するバネ弾性エネルギーを減点項として利得に与えます。
\begin{align} r = mgz-\frac{1}{2} m v^2 - \frac{1}{2} k x^2 \end{align}
第1項目:ポテンシャルエネルギー(加点)、第2項目:運動エネルギー(減点)、第3項目:バネ弾性エネルギー(減点)
目標達成時(5秒間落下しない)やペナルティー(5秒以内に落下)は与えないことにします。
Q学習の表式とパラメータの値
\begin{align} Q^{(i+1)}(s,a) \leftarrow Q^{(i)}(s,a)+\eta\left[ r+\gamma \max\limits_{a'} Q^{(i)}(s',a') -Q^{(i)}(s,a) \right] \end{align}
$s$ : 時刻tにおける状態。$s(t)$と同値。
$a$ : 時刻tにおける行動。$a(t)$と同値。
$r$ : 時刻tの行動で得られた利得。$r(t+1)$と同値。
$Q(s, a)$ : 状態$s$における行動aに対する行動価値関数。上付き添字($i$)は学習回数を表す。
$\gamma$ : 割引率($0< \gamma \le 1$)
$\eta$ : 学習率($0< \eta \le 1$)
$s'=s(t+1)$
今回の設定
行動時間間隔:0.05(20Hz)(0.05秒ごとに行動を選択・実行する)
学習回数(episode):90,000回(残りの10,000回は学習なし)
割引率($\gamma$): 1.0
貪欲性($\epsilon$):学習回数0回から90,000回まで0.5から1.0まで徐々に上げる。それ以降1.0のまま
学習率($\eta$):学習回数0回から90,000回まで0.1、それ以降0。
初速度( $\boldsymbol{v}_{0}$ ):-1~1[m/s]でランダムに与える
外力( $\boldsymbol{f}_{\rm ext}$ ):なし
学習結果
学習回数に対する成功確率
学習回数に対する成功率(100回学習ごとの平均)のグラフを示します。最後の10,000回は貪欲性1として学習結果を評価しています。 同じ条件で100回学習し、①最も成績が良い結果(青色)、②最も成績が悪い結果(橙色)、③100回の平均(茶色)の3つを表示します。
最も成功率が高い機械による制御結果:おもりの位置と速度、滑車の位置の時間依存性
結果と考察とメモ
・環境変数に滑車の位置を加えたため環境数が増大した結果、滑車を付近に留めるにはことのほか学習回数が必要になった(90,000回)。しかしながら、一番学習が進んだ機械は成功率が100%となることができた。
・おもりの位置と速度、滑車の位置の時間依存性を見ると、意図通りおもりの位置が原点に向かうように滑車に力が加えられている様子がわかる。
【メモ】おもりが真下にいる状態から倒立状態になるための学習を行う。
プログラムソース(C++)
・http://www.natural-science.or.jp/files/NN/20180628-1.zip
※VisualStudio2017のソルーションファイルです。GCC(MinGW)でも動作確認しています。
参考(物理シミュレーション)
上記シミュレーションは、ルンゲ・クッタ法という常微分方程式を解くアルゴリズムを用いてニュートンの運動方程式を数値的に解いています。本稿で紹介した物理シミュレーションの方法を詳しく解説している書籍です。もしよろしければ「ルンゲ・クッタで行こう!~物理シミュレーションを基礎から学ぶ~(目次)」を参照ください。