OpenAI Gymの自作環境を作って学習させた

お久しぶりです、今回はOpenAI Gymの自作の環境を作って強化学習を用いて学習させたのでまとめておきます

 

OpenAI Gymとは

強化学習アルゴリズムなどの開発と評価のためのツールキットで、人工知能を研究する非営利団体のOpenAIが提供しています。OpenAI Gymにおける環境はエージェントからの行動を受け取って変化して次の状態と報酬を返す共通のインターフェースを持っています。

作った環境

弾避けゲームの環境を作りました。

f:id:sh00t:20190526001521p:plainf:id:sh00t:20190526001532p:plain

描写とキー入力以外は冬に作った弾幕シューティングゲームのコードを多く流用できましたが描写とキー入力でゲーム画面のRGB値を状態とする都合上Pyxelを使わずにPygameを使用しました。

現時点で環境は(弾幕の違い2種類)*(アクションの違い2種類)の4種類があります。上図の左は直進する弾幕で、右は発射された後に軌道を変えます。アクションは左右にしか移動できない環境と8方向に移動できる環境の2種類を用意しました。

下は環境のリポジトリです。

github.com

学習結果

自作環境で強化学習を使って学習させた結果は下のレポジトリにあります(ここにgifファイル貼ろうとしたらアップロードに失敗するのでリポジトリ参照)。

github.com

直進する弾幕のタスクの8方向に動ける弾幕では、下で避けたほうがいいはずなのに毎回上で避けて結局3方向に動けるときよりも早く被弾しています。状態から自機の位置をみて下に行くほど報酬に補正を掛けるなどを行えば下で避けるように学習するかもしれません。

弾の軌道が変化する弾幕では直進弾幕より早く被弾しています。心なしか自分でプレイしてよく被弾する状況と同じような状況で被弾している気がします。

おわりに

自機の移動だけの弾避け環境を作りましたがショットを実装して敵を撃破する環境を作っみたくなってきました。

弾幕シューティングゲームはいいぞ。

ライフゲームの簡単なエディタを作成してみた

ライフゲームの初期配置をランダムに生成するのもいいですが色々な配置を作成してみたかったのでJavaScriptの練習も兼ねて簡単なエディタを作ってみました

続きを読む