まーぼうの書きたいことをたらたらと

研究したりゲームしたり作ったりの日記

機械学習を用いてレーティングバトルの選出予想をしてみたい(構想段階)

2週間分記事を書くのを飛ばしてしまいました。週1でブログ書くハードルを下げたつもりなのにどうしてこうなるのやら……来週もちゃんと書けるように頑張りたいですね。

前置きはここまでにして、今回はゲーム、というかポケモンレーティングバトル(シングルバトル)について書いていきたいと思います。

分からない人用に……レーティングバトルとは

ポケモンゲームボーイで発売されてから今でも続いているゲーム。初代の赤緑が出たのが1996年なのでもう21年も続いている有名な作品ですね。「ポケモン」と呼ばれるモンスターを集めたり戦わせたりして各地を冒険していく、というRPGです。

f:id:mabo168general:20170604155523j:plain (初代のプレイ画面)

先述した通り、このゲームにはポケモン同士を戦わせるバトル要素が初代からあり、プレイヤー同士でバトルする通信対戦が初代からありました。そして第5世代(ブラック・ホワイト:2010年発売)でインターネット上で知らない人とバトルができるようになり、勝つとポイント(レート)が増え、負けるとポイントが減り、そのポイントを競うというレーティングバトルが始まりました。最新作のサンムーンでもレーティングバトルは続いており、多くのプレイヤーが参加しています。

レーティングバトルに参加するプレイヤーはストーリーの時と同じように6体のポケモンを選んで手持ちに入れておき、レーティングバトルに臨みます(この6体の事を「パーティ」と呼ぶことが多いので以下そのように呼びます)。そしてインターネットに繋げている対戦相手とマッチングしたら、90秒で6体のうちバトルで使う3体をパーティの中から選び、バトルになります。その後は細かいルールはありますが、ストーリー上でトレーナーと行うのと同じようなバトルをしていきます。この時、対戦相手もリアルタイムで操作をするので、行う手の読み合いなどが発生し面白い、という仕組みになっています。

f:id:mabo168general:20170606000001p:plain (選出画面)

詳しいルールを知りたい方は、wiki等にまとめられているのでこちらをどうぞ。

pokemon-wiki.net

なぜ選出予想したいのか?

バトルが始まる前にパーティの中から3体を選ぶ(以降、選出と呼びます)場面がありますが、相手もこちらのパーティを見てバトルに出す3体を決めます。どの3体を出すかによってバトルの有利不利が分かれるので、選出はしっかりと考えて行わなければいけません。ここで相手の選出が分かっていると、自分がどのポケモンを選出するかを決めやすくなります。……が制限時間は90秒。自分は頭の回転が速い方ではないので90秒じゃ考える時間が足りないのです。制限時間で終わらず、ランダムに選出するポケモンを決定される事も時々あるので、考えるための支援ツールが欲しいわけです。

自分のパーティに選出されやすいポケモンというものは結構あります。例えば先ほどの選出画面のパーティは、自分でレーティングバトルをする際に使っているパーティなのですが、

  • カプ・コケコ、霊獣ボルトロスが先発で出てくるのをよく見る。
  • ポリゴン2はほぼ100%出てくる。

とよく感じています(ちなみに、ポリゴン2は対策が皆無なので選出されれば怯み・急所狙いの運ゲーでしか突破できません)。

ということで、自分のパーティに対する選出を機械学習すれば面白そうじゃない?ということで作ってみようと思いました。

事前準備

機械学習をするには何をすればいいか。まず知識がないので勉強しないといけませんが、それと並行してやらなければならない作業があります。「データ収集」です。どのようなデータを集めるかを決めるために、選出画面で相手について分かる情報は何かを考えてみました。次のとおりです。

  • 相手プレイヤーの名前
  • 相手のパーティ
  • 持ち物の有無(しかし持ち物なしなのは稀)
  • 相手のレート
  • 相手の選出決めが終わったかどうか

得られるデータは思った以上に少ないです。機械学習に使えそうなのは「パーティ」「レート」の2つぐらいなのでこれらの収集を行います。また、結果、すなわち「相手の実際の選出」も同時に収集します。実際には、初手選出は試合中の立ち回りに影響を与えますが、特別な場合を除いて2・3体目の順番は立ち回りに影響を与えないので、厳密には「相手の実際の選出の1体目」と「相手の実際の選出の2・3体目」です。

余談ですが、前作ORASまでは相手のパーティが選出場面が終了すると見れなくなってしまうのですが、今作からは相手のパーティが試合中でも確認できるのでデータを取るのに急ぐ必要が薄くなりました。データ収集には嬉しい仕様変更ですね。また、相手の選出した3体が全て判明せずに試合が終わってしまう場合がありますが(例えば初手ポケモンに3タテされた場合など)、この場合はバトルビデオを保存すれば選出した3体が何かを見ることができるので問題はありません。

実際にデータ収集を現在行っていて、その様子の写真です。被選出データ収集ついでに、グローバルリンクと経験則に基づく環境に居そうなポケモンの様子や自分の選出についてもデータを取っています。

f:id:mabo168general:20170604170436p:plain

スマホ片手にexcelに入力してますが、iphoneexcelの使用感の悪さは半端ないですね……。環境はサンムーンレーティングバトルシングルシーズン4です。

終わりに

このような感じで、選出予想ソフトを作ってみようと考えています。ただデータをもっと取る必要があったり、院試周りで忙しいので開発は先延ばしになりそう……10月の学園祭で展示できればいいなと思ってます。

このあとにパーティの構築解説をおまけで書こうと思ったのですけど、思ったより記事が長くなったのでこれで切り上げようと思います。