汎用行動選択モデルの3vs3対応 part03 バトルログ可視化ツールの作成【PokéAI】
従来、AIによるバトル中の行動を定性的に確認するには、シミュレータの出力する機械向けのログを目視で必死に解読していました。例えば1ターンの進行を表すログはこんな感じです。
| |split|p2 |switch|p2a: Azumarill|Azumarill, L50, M|206/206 |switch|p2a: Azumarill|Azumarill, L50, M|206/206 |move|p1a: Corsola|Earthquake|p2a: Azumarill |split|p2 |-damage|p2a: Azumarill|169/206 |-damage|p2a: Azumarill|169/206 | |upkeep |turn|2
ツールの概要
毎回解読するのは手間なので、可視化ツールを作成することにしました。 バトル1回の各ターンの行動選択およびターンの経過を1つのJSONにまとめて保存し、それをWebブラウザ上で表示する簡単なものです。 JSONの生成まではpythonで行い、表示部分はTypeScript+Reactで実装しました。
対戦ごとに、まず対戦パーティの情報を表示し、次に各ターンの行動選択と出来事を表示します。下図に例を示し、赤い文字で説明を加えています。
レイアウトは美しいとは言えないですが、文字列のログをそのまま読むよりはかなり改善しました。
可視化結果
実際の行動例を示します。前回最善だった64チャンネル3層のモデル(id: 6ee)を使い、レーティングバトルで最も強かったパーティについて観察しました。
レート: 1925, ID:5f8ac014906132f1650ad6ee+5f633609975eefc2110a5a0d ラプラス,55,,すてみタックル,れいとうビーム,なみのり,ずつき エレブー,50,,かみなりパンチ,はかいこうせん,れいとうパンチ,かみなり キングドラ,50,,どくどく,すてみタックル,なみのり,とっしん
次の例では、エレブーの相手がサンダースの時はどの技でもQ値は似ていますが、相手がマリルリになると効果が抜群な電気タイプの技のQ値が高くなっています。タイプ相性を把握していると考えられます。
次の例では、ラプラスの相手がサンダースで、相性が悪いです。しかし最初のターンでは交代せず、ダメージを受けた次のターンで交代しています。交代をうまく使えているとは言いにくいです。
次の例では、ラプラスの相手がレアコイルで、相性が悪いので交代しようとしています。キングドラに交代し1ターン攻撃した後さらにエレブーに交代するという挙動をしており、戦略が迷走しています。
このパーティが強いのは、ラプラスのれいとうビームの通りが良いからというのが主な理由だと思われます。3vs3バトルでは交代という行動が増えた点がポイントですが、それを有効に活用できているとはいえない結果でした。
次回、学習方法の改善を試みます。
P.S. Photoshopの勉強を始めたので、スクリーンショットに文字を書き込むのに使い始めました。この程度だとまだペイントと変わらないですが。