【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{aligned}
r = -(\theta ^2 + 0.1 \cdot \dot{\theta}+0.001 \cdot a)
\end{aligned}
$$

\(a\)は行動になります。
振り子が立っていて静止している時が最適な状態なので、
その時に\(r=0\) となります。
(\(\theta=0, \dot{\theta}=0, a=0\)

エピソードの終了判定

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

ちょっと動かしてみる

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

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

サンプルコード

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

実行結果

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

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

参考文献

openai/gym
A toolkit for developing and comparing reinforcement learning algorithms. - openai/gym

コメント

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