OpenAI Gymの自作環境を作って学習させた
お久しぶりです、今回はOpenAI Gymの自作の環境を作って強化学習を用いて学習させたのでまとめておきます
OpenAI Gymとは
強化学習アルゴリズムなどの開発と評価のためのツールキットで、人工知能を研究する非営利団体のOpenAIが提供しています。OpenAI Gymにおける環境はエージェントからの行動を受け取って変化して次の状態と報酬を返す共通のインターフェースを持っています。
作った環境
弾避けゲームの環境を作りました。
描写とキー入力以外は冬に作った弾幕シューティングゲームのコードを多く流用できましたが描写とキー入力でゲーム画面のRGB値を状態とする都合上Pyxelを使わずにPygameを使用しました。
現時点で環境は(弾幕の違い2種類)*(アクションの違い2種類)の4種類があります。上図の左は直進する弾幕で、右は発射された後に軌道を変えます。アクションは左右にしか移動できない環境と8方向に移動できる環境の2種類を用意しました。
下は環境のリポジトリです。
学習結果
自作環境で強化学習を使って学習させた結果は下のレポジトリにあります(ここにgifファイル貼ろうとしたらアップロードに失敗するのでリポジトリ参照)。
直進する弾幕のタスクの8方向に動ける弾幕では、下で避けたほうがいいはずなのに毎回上で避けて結局3方向に動けるときよりも早く被弾しています。状態から自機の位置をみて下に行くほど報酬に補正を掛けるなどを行えば下で避けるように学習するかもしれません。
弾の軌道が変化する弾幕では直進弾幕より早く被弾しています。心なしか自分でプレイしてよく被弾する状況と同じような状況で被弾している気がします。
おわりに
自機の移動だけの弾避け環境を作りましたがショットを実装して敵を撃破する環境を作っみたくなってきました。
弾幕シューティングゲームはいいぞ。
Pyxelでシューティングゲームを作った話
タイトルの通りPythonでPyxelを使って弾幕シューティングゲームを作りました
続きを読む12月25日はニュートンの誕生日なのでニュートン法のプログラムを書いた
12月25日はアイザック・ニュートンの誕生日🎉なのでニュートン法で3次方程式の解を求めるプログラムをC++で書きました
続きを読む統計検定を受験した話
少し前に統計検定(CBT)を受験したのでその時の準備とか出来事を書きます
続きを読むライフゲームの簡単なエディタを作成してみた
ライフゲームの初期配置をランダムに生成するのもいいですが色々な配置を作成してみたかったのでJavaScriptの練習も兼ねて簡単なエディタを作ってみました
続きを読む