gymのregisterを変更する。


目的

Cartpoleタスクの最大ステップ数を増加しよう!

はじめに

OpenAIGymから提供されている強化学習のMNIST的存在のCartpole
ノーマルのGymからは、v0v1が提供されている。
この2つの違いは、タスククリアとなるmax_episode_steps
報酬閾値のmax_episode_stepsの違いだけである。

今回はタスククリアのmax_episode_stepsをプログラム内部から書き換え
られないか調べて出来たので記録として残します。

この方法ならばenv.step(action)での返り値のdoneがTrueになるタイミングを
600stepや111stepのように任意に指定することができるようになります。

また他のタスクにおいても
https://github.com/openai/gym にある
openai/gym/blob/master/gym/envs/__init__.py
の中にあるregisterの値を変更することができると思います。

やり方

env._max_episode_steps = 600
とするだけ
これでタスクは600step立ち続けないとクリアできないタスクになりました!

サンプルプログラム

import gym
import numpy as np

#CLI上に変なメッセージが出ないようにする
gym.logger.set_level(40)

#gymとnp乱数の固定 
SEED = 0
np.random.seed(SEED)
env.seed(SEED)
env.action_space.np_random.seed(SEED)#タスクで取り得る行動の中からランダムに選ばれる行動も固定するならここも指定

#ゲーム名で定義
env = gym.make('CartPole-v0')

#!!!!CartPoleの最大ステップ数を変更する!!!!
env._max_episode_steps = 600

observation = env.reset() #環境のリセット

while True:
    #ゲームの中で取りうることのできる行動をランダムに出力する
    action = env.action_space.sample()
    observation, reward, done, info = env.step(action)#行動を入れることで変化が起こる
    print(observation, done, action)#状態とゲーム状態と選択された行動を出力する

    if done:       
        break

最後に

max_episode_stepsを変更することはできたものの実際にプログラムの中で
この変更された値を確認する手法を見つけることができませんでした。
確認としてはCartpole-v1で学習させたエージェントの実行時に600step倒立できる確認した所
600step倒立できていたので問題はないと思っています。

参考ページ