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

汎用行動選択モデルの3vs3対応 part09 Q関数を用いたパーティ生成【PokéAI】

1vs1バトルの時と同様に、強化学習の結果得られる、行動ごとの価値の期待値を表すQ関数を用いて強力なパーティを生成することを試みます。

手法

手法は1vs1バトルの時のものを応用し、3vs3対応のための変更を行います。

select766.hatenablog.com

3vs3対応の変更点は、(1)隣接パーティの生成部分と、(2)類似したパーティの生成を避けるためのペナルティ部分です。(1)については、10%の確率で、パーティ内のポケモン1匹を別のポケモンに変更し、そのポケモンの技はランダムに初期化します。なお、レベル配分はLV55,50,50となっており、変更前のレベルを維持します。最初のパーティ生成時に、どのポケモンがLV55になるかはランダムです。残りの90%は、ポケモン1匹を選択してその技1つをランダムに変更します。 (2)については、パーティ間の類似度測定の関数において、1vs1のときはパーティを表す特徴量=P,M,PM,MMを用いていました。3vs3ではポケモンのペアの類似度が加わり、P,M,PM,MM,PPの5種類の特徴量を用いた内積になります。パーティが完全一致したときの類似度は、3+12+12+18+3=48となり、1vs1の時の最大値15より大きくなります。そのため、ペナルティの強さ \lambdaを再度調整し、 \lambda=0.1を用いることとしました。

この手法を用いる場合、バトル開始時の時点で自分のパーティの強さがQ関数に現れる必要があります。以前提案した、強化学習中の対戦相手を同じぐらいの強さの相手から選ぶ手法を用いると、バトル開始時点では勝つか負けるか五分五分という状況ばかりを学習するため、パーティ自体の強さがQ関数に反映されません。実際には、最強クラスのパーティは自分より弱い相手との対戦のほうが多くなるため若干は強さがQ関数に現れますが、実際のデータで確認したところ対戦相手をランダムに選択する場合と比べ、パーティ間でのQ関数の値の分散は小さめでした。その問題もあり、対戦相手の選択手法は用いていません。

実験

過去の強化学習で得られたモデル(id: 78e)で生成されたパーティをランダムに10個抽出して示します。

ゲンガー,LV50,ギガドレイン,ばくれつパンチ,かみなり,ほのおのパンチ
デンリュウ,LV55,かいりき,ばくれつパンチ,ほのおのパンチ,かみなり
ラッタ,LV50,かみなり,バブルこうせん,かいりき,ふぶき
---
リングマ,LV50,おんがえし,どろかけ,スピードスター,どくどく
カモネギ,LV55,スピードスター,おんがえし,どろかけ,どくどく
スイクン,LV50,どくどく,おんがえし,スピードスター,どろかけ
---
リングマ,LV50,ずつき,れいとうパンチ,おんがえし,ほのおのパンチ
ゴルダック,LV50,おんがえし,ずつき,ハイドロポンプ,ロケットずつき
キングドラ,LV55,ずつき,ハイドロポンプ,おんがえし,ロケットずつき
---
リングマ,LV50,おんがえし,かみなりパンチ,ちきゅうなげ,ずつき
ハピナス,LV50,ずつき,おんがえし,ソーラービーム,ちきゅうなげ
スリーパー,LV55,かみなりパンチ,ちきゅうなげ,おんがえし,ずつき
---
ルージュラ,LV55,どくどく,サイコキネシス,れいとうビーム,おんがえし
ナッシー,LV50,サイコキネシス,やどりぎのタネ,どくどく,おんがえし
ムウマ,LV50,おんがえし,サイケこうせん,サイコキネシス,どくどく
---
ルージュラ,LV50,サイコキネシス,とっしん,れいとうビーム,どろかけ
エアームド,LV50,いあいぎり,スピードスター,おんがえし,ドリルくちばし
カブトプス,LV55,ちきゅうなげ,とっしん,れいとうビーム,いあいぎり
---
ルージュラ,LV55,れいとうビーム,ロケットずつき,ずつき,サイコキネシス
ハピナス,LV50,ふぶき,ロケットずつき,れいとうビーム,ずつき
ニドクイン,LV50,ずつき,ロケットずつき,ふぶき,れいとうビーム
---
リングマ,LV55,スピードスター,おんがえし,いあいぎり,ころがる
フォレトス,LV50,ころがる,おんがえし,ギガドレイン,スピードスター
エアームド,LV50,スピードスター,いあいぎり,おんがえし,ゴッドバード
---
エンテイ,LV50,かげぶんしん,かえんほうしゃ,どくどく,はかいこうせん
マルマイン,LV55,10まんボルト,かげぶんしん,はかいこうせん,どくどく
パルシェン,LV50,はかいこうせん,どくどく,かげぶんしん,ふぶき
---
リングマ,LV50,ころがる,おんがえし,ちきゅうなげ,ずつき
ベロリンガ,LV50,れいとうビーム,ちきゅうなげ,ころがる,ずつき
サイドン,LV55,ころがる,ちきゅうなげ,ずつき,れいとうビーム

ある程度強いパーティが生成できていると考えられます。カビゴンやサンダーが出ていないのは、ランダムに生成したパーティ1000個で学習しているため、それらのポケモンの強さを認識できていないものと考えられます。

次回は、パーティ生成と強化学習を交互に行い、強いパーティと強い戦略の組み合わせを学習することを目指します。