(ブログ名 '未定)

プログラミングとかのメモ帳

コインを集めるゲームを学習させてみた

強化学習についての実験をするために、コインを集めるゲームを一つ作ってみて、ニューラルネットワークによる学習をさせてみた

f:id:ikemaki:20170721170247p:plain

ソースコードはこちら

github.com

ゲームのインストール方法

python3 と pygame に依存
gitでcloneなどをしてきた後に、

$ python game.py

を実行して、以下のような画面が出てきて、エラーが出なければ成功

f:id:ikemaki:20170721164044p:plain


ちなみに、最初の写真のステージでゲームをしたい場合には、 maps.py から以下の様なところを探してきて

map_str = map2_str
map_coins = map2_coins

以下のように変更する
# コメント ↑マップ2 ↓マップ1

map_str = map1_str
map_coins = map1_coins

このゲームは何?

スーパーマリオブラザーズのような、よくある横スクロールのアクションゲーム。 

  1. 青色の点(プレーヤー)を操作して、黒色の点(コイン)に触れる。そうすると黒い点がピンクに変色し、更に触れ続けていると、次の点にコインが移動する。 
  2. そして1.を繰り返す
  3. 緑の点に触れると、プレーヤーが最初に居た位置にワープする

これだけの簡単なゲーム

操作法 1

矢印キーで移動
zキーで次のコインに変更

本題 ニューラルネットワークによる学習

ゲームを作ったからには、AIを作りたくなるというのは人工知能を学ぶ者の本能。
いや、AIを作りたかったからゲームを作ったのか、、、。
とにかく、ニューラルネットワークを用いた人工知能を作ってみた。

実行

chainer をインストールした後に

$ python neuralnet_ai.py

をしてやる。

ペットを育てる

青色の点(ペット)は、実行してからは動いていないと思う。
そこで、xキーと矢印キーを同時に押し続けてやると、しばらくした後に矢印キーの方向にペットが移動し始める。
xキーを押すというのは、ペットにどっちに行くべきかを教えることに相当し、
xキーを押していないというのは、ペットに何も教えていない ということに相当する。

そこで、ペットにコインを取るように教育してやる。
ペットに行って欲しいと欲しい方向の方向キーと、xキーを同時に押すだけだが。
3分ぐらい教え続けていると、ペットはコインの方向に移動しようとしていると思う。

ちなみに、単純なステージ(マップ2)を選ばないとペットは上手く育ってくれない

r キーでペットの頭脳のセーブ、f キーでペットの頭脳のロードが出来る。

他のステージで学習させた頭脳をロードすると、学習させた時と似たような結果が得られる。


その他・感想

ゲームからAIまで一人で実装をしてみたが、このことによって、環境・報酬・モデルなどと言った言葉がよく理解できるようになっていると思う。
今度は、強化学習を勉強してから、色々なアルゴリズムを試してみたいと思っている。
また、AIを学習させる育成ゲームがあったら楽しそうだと思った

需要があるようなら、理解していない人なりに需要のある部分の説明をしようと思います。