OpenAI GymのCopy-v0を解く


課題

  • コピーしたい文字列がテープに書かれているので,移動と書き込みを使ってコピーする.
  • 成功するたびにコピーする文字列は長くなる.

クリア条件

  • 直近100回の試行で25以上の報酬を得ること.

報酬

  • 正しくコピーできたら1.0, 間違えたら-0.5

データ構成

コードを読んでみると,

行動空間は

Tuple(Discrete(2), Discrete(2), Discrete(5))
  • タプル1つめ: テープの右に行きたいなら1, 左なら0
  • タプル2つめ: 書き込みなら1
  • タプル3つめ: 書き込む文字を数値に変換した値(1〜5の数字で表現されている)

状態空間

  • A〜Eの5文字(1〜5の数字で表現されている)
Discrete(6)

解法

  • そのまま前の状態を次の行動に突っ込んであげたら良いが,強化学習使ってないので多分違う.

コード

import numpy as np
import gym
from gym import wrappers

def run():
    env = gym.make('Copy-v0')
    env = wrappers.Monitor(env, '/tmp/copy-v0', force=True)
    Gs = []
    for episode in range(1000):
        x = env.reset()
        G = 0
        for t in range(100):
            a = (1,1, x)
            x, r, done, _ = env.step(a)
            G += r
            if done:
                Gs.append(G)
                break
        score = np.mean(Gs[-100:])
        print("Episode: %3d, Score: %.3f" % (episode, score))
        if score > 25:
            break


if __name__ == "__main__":
    run()

References

  1. LEARNING SIMPLE ALGORITHMS FROM EXAMPLES, Zaremba et al., 2016.
  2. OpenAI Gym, Brockman et al., 2016.