自作ゲームで強化学習 #1

AIにもゲームをあそんでもらった

pygameで作ったゲームを強化学習して上達するのか試してみた!!

↓カップケーキ取ったらスコア+100、20秒後にスコアを表示

強化学習実行までの道のり

こちらの記事を写経しました
【AI + pygame】pygameで作るインベーダー風ゲーム

  1. ゲームコードを Open AI Gym が実行できるよう修正
  2. 強化学習モデル+学習実行コードを記事からぱくる
  3. 実行コードを動かすとエラーが出るので対応
    • モデルへの入力データ次元が違うとか
    • tensorflowはこのメソッドを実装してないとか(tensorflowのバージョン不適)
    • こんな変数はないとか(ただのコードミス)

強化学習スタート

  • 環境(Anaconda) AnacondaとPyPIがごちゃ混ぜになっております…
    • Python:3.7.6
    • pygame:1.9.6 ※pip
    • gym:0.17.1
    • keras:2.3.1 ※pip
    • keras-rl:0.4.2 ※pip
    • pillow:7.1.1
    • tensorflow:1.13.1 ※pip
  • ソースコード
  • パラメータ
    • 学習ステップ数:20,000 1エピソードで行ったキー操作の回数(多分)
    • テストエピソード数:10 ゲーム開始~終了で1エピソード
  • 報酬の設定 ゲーム終了時のスコアで報酬を決める
    •  0 ~ 100 : -10
    • 101 ~ 500 : +5
    • 501 ~ 1000: +10
    • 1001 ~   : +15

10,000ステップくらいから↓のような感じ スコアは100~300で全然上がらない

ゲーム開始時は右下にカップケーキがあって、開始直後に右下のケーキを取るようになった
(ここは400ステップくらいで学習してくれた)

報酬=スコアにすればよかった!

テスト結果 reward(報酬)はずっと5のまま

Testing for 10 episodes ...  

Episode 1: reward: 5.000, steps: 173  
Episode 2: reward: 5.000, steps: 173  
Episode 3: reward: 5.000, steps: 174  
Episode 4: reward: 5.000, steps: 173  
Episode 5: reward: 5.000, steps: 173  
Episode 6: reward: 5.000, steps: 173  
Episode 7: reward: 5.000, steps: 172  
Episode 8: reward: 5.000, steps: 172  
Episode 9: reward: 5.000, steps: 173  
Episode 10: reward: 5.000, steps: 173  

上記の報酬設定だと、ケーキを1~5回取った時は同じ報酬だから
プレイヤーがたくさん動いてケーキを取りまくるスタイルにならなかった

ケーキを取った回数に比例して報酬をプラスすればもっと動いてくれると期待