機械学習周りのプログラミング中心。 イベント情報
ポケモンバトルAI本電子書籍通販中

汎用行動選択モデルの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で実装しました。

対戦ごとに、まず対戦パーティの情報を表示し、次に各ターンの行動選択と出来事を表示します。下図に例を示し、赤い文字で説明を加えています。

f:id:select766:20210204203853p:plain
可視化ツールの見方(対戦パーティ情報)

f:id:select766:20210204203914p:plain
可視化ツールの見方(ターンの行動選択と出来事)

レイアウトは美しいとは言えないですが、文字列のログをそのまま読むよりはかなり改善しました。

可視化結果

実際の行動例を示します。前回最善だった64チャンネル3層のモデル(id: 6ee)を使い、レーティングバトルで最も強かったパーティについて観察しました。

レート: 1925, ID:5f8ac014906132f1650ad6ee+5f633609975eefc2110a5a0d
ラプラス,55,,すてみタックル,れいとうビーム,なみのり,ずつき
エレブー,50,,かみなりパンチ,はかいこうせん,れいとうパンチ,かみなり
キングドラ,50,,どくどく,すてみタックル,なみのり,とっしん

次の例では、エレブーの相手がサンダースの時はどの技でもQ値は似ていますが、相手がマリルリになると効果が抜群な電気タイプの技のQ値が高くなっています。タイプ相性を把握していると考えられます。

f:id:select766:20210204205029p:plain
行動例

次の例では、ラプラスの相手がサンダースで、相性が悪いです。しかし最初のターンでは交代せず、ダメージを受けた次のターンで交代しています。交代をうまく使えているとは言いにくいです。

f:id:select766:20210204205303p:plain
行動例

次の例では、ラプラスの相手がレアコイルで、相性が悪いので交代しようとしています。キングドラに交代し1ターン攻撃した後さらにエレブーに交代するという挙動をしており、戦略が迷走しています。

f:id:select766:20210204205621p:plain
行動例

このパーティが強いのは、ラプラスれいとうビームの通りが良いからというのが主な理由だと思われます。3vs3バトルでは交代という行動が増えた点がポイントですが、それを有効に活用できているとはいえない結果でした。

次回、学習方法の改善を試みます。

P.S. Photoshopの勉強を始めたので、スクリーンショットに文字を書き込むのに使い始めました。この程度だとまだペイントと変わらないですが。