buto > /dev/null

だいたい急に挑戦してゴールにたどり着かずに飽きる日々です

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

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

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

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

f:id:butorisa:20201020171924g:plain

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

こちらの記事を写経しました 【AI + pygame】pygameで作るインベーダー風ゲーム 1. ゲームコードを Open AI Gym が実行できるよう修正 1. 強化学習モデル+学習実行コードを記事からぱくる 1. 実行コードを動かすとエラーが出るので対応 - モデルへの入力データ次元が違うとか - 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で全然上がらない

f:id:butorisa:20201020172001g:plain

ゲーム開始時は右下にカップケーキがあって、開始直後に右下のケーキを取るようになった (ここは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回取った時は同じ報酬だから プレイヤーがたくさん動いてケーキを取りまくるスタイルにならなかった

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