【Open AI gym、強化学習】Pendulumの紹介

問題の概要

Pendulumは、
単振り子の問題になります。
以下の振り子に適切な力を加え、
振り子を立たせることが目的となる問題です。

f:id:ttt242242:20190505103333p:plain

出典:Leaderboard · openai/gym Wiki · GitHub

制御値、観測、報酬等について

制御値(行動)

制御値は、左方向に力を加えるか、右方向に力を加えるかになります。
-2から2までの間での連続値になります。

以下のコードで確認してみます。

観測

観測値は、以下のようになります。

観測情報 最小値 最大値
$sin(\theta)$ -1.0 1.0
$cos(\theta)$ -1.0 1.0
$\dot{\theta}$ -8.0 8.0

確認してみます。

報酬

報酬は以下のように与えられます。
$$
\begin{eqnarray}
r = -(\theta^2 + 0.1 \cdot \dot{\theta}+0.001 \cdot a)
\end{eqnarray}
$$
$a$は行動になります。
振り子が立っていて静止している時が最適な状態なので、
その時に$r=0$ となります。
($\theta=0, \dot{\theta}=0, a=0$)

エピソードの終了判定

このゲームは非エピソード型のゲームになるので、終了判定はありません。
と、documentには書いてあるのですが、200ステップで強制終了する・・・
何故かはわかりません。調査中です。

ちょっと動かしてみる

実際に動かしてみます。
stepメソッドを使って1ステップづつ振り子を操作していきます。
stepメソッドの戻り値は操作した結果
(観測情報, 報酬, エピソードの終了判定) が返却されます。

サンプルコードを実行するために
gymをインストールする必要があります。

サンプルコード

ひたすらランダムで行動選択を行ってみます。
以下、サンプルコードになります。

実行結果

終了するまで実行します。

nb_stepがステップ数、actionが行動、obsが観測情報、rewardが報酬、is_finishがゲームの終了判定を表しています。

参考文献

github.com

github.com

機械学習スタートアップシリーズ Pythonで学ぶ強化学習 入門から実践まで (KS情報科学専門書)

機械学習スタートアップシリーズ Pythonで学ぶ強化学習 入門から実践まで (KS情報科学専門書)

コメント

タイトルとURLをコピーしました