見出し画像

ブロスタのAIを強化学習で作る②

こんにちは。しげまつです。
ブロスタ強化学習の続きで、いきなり強化学習は行えないので今回は試合を終了したときとスタートの処理をどのようにしたらいいか考え実装しました。

考えた流れ

プレイボタン(初回手動(2回目以降は自動で押してくれる))

試合開始
↓(強化学習するところ)
試合終了

リザルト画面

終了ボタン(リザルト画面と認識したらボタンを押す)

最初に戻る(終了してから1秒後にプレイボタンを押す)

今回は太文字のところを実装。

やったこと

リザルト画面で1位か2位かの画像分類モデルを作成。
trainとtestが同じ画像なので1位2位それぞれの画像を8枚くらいで150epochくらい学習させてモデル作成しました。
このモデル作成にも成功と失敗がありました。

失敗例(画像)


1位リザルト画面
2位リザルト画面

上の二つの画像を分類するモデルを作ったのですが、左上が違うだけでほとんど同じという感じで2位なのに1位って出力されたりして精度がひどかったので、次の成功例のやつにしました。

成功例

1位リザルト画面
2位リザルト画面

画面全体を使うのではなく、左上の変わっているところだけにして画像分類モデルを作成すると、1位・2位の時どちらもほぼ100%だったのでこっちのモデルを採用しました。

一応成功例のloss

学習のloss

実際のコード

while True:
    screen_shot = pyautogui.screenshot(region=(0, 34, 960, 540))
    screen_shot_rank = pyautogui.screenshot(region=(0, 34, 291, 100))
    x = reshape_img(screen_shot_rank)
    pred = model.predict(x)[0]
    print(pred)
    #リザルト画面判定
    if pred[0] > 0.997 or pred[1] > 0.997:
        time.sleep(2)
        pyautogui.rightClick(x=840, y=528) #試合から出る
        pyautogui.doubleClick(x=840, y=528)
        time.sleep(1)
        pyautogui.doubleClick(x=840, y=528) #試合に入る
        time.sleep(12)

ローカルでGPU使ってモデル作成しようとしたのですが、謎エラーが起きたのでgoogle colab使ってモデル作成しました。(モデル作成のコード載せるのめんどくさいのでなしです。ごめんなさい。)
reshape_imgは入力層に合うように画像をreshapeしてるだけです。
reshapeしてリザルト画面になるとpred[0],pred[1]のどちらかが99.7%以上になるのでそれを使ってif文で判別してリザルト画面から再スタートまでの処理を書いてます。同じところクリックさせてるだけだけど。笑

これを実行したらしっかりとリザルト画面を認識してスタートまでしっかりやってくれました!

終わりに

結構めんどくさそうと思ってたところだったのですが、思った以上にささっと終わってしまいました。
前回強化学習の勉強をしてからかなり時間が空いてしまったのでDQNの勉強を少しして思い出しながら学習できるか試してみたいと思います~~。

この記事が気に入ったらサポートをしてみませんか?