blog

DeNAのエンジニアが考えていることや、担当しているサービスについて情報発信しています

2020.10.22 インターンレポート

対戦ゲームにおけるキャラクターの「強さ」を定義する

by Ryogo Yokoyama

#game #othellonia #AI

はじめまして!

9月上旬の2週間、データサイエンティストコースのインターンに参加した横山です。普段は大学で圧電材料を使用したデバイス作製に関する研究を行う傍ら、アルバイトやコンペティションでデータ分析を楽しんでいます。

この記事では、私がインターン中に取り組んだ内容について記述しています。

概要

本記事では、対戦ゲームに登場する各キャラクターの「強さ」を表す指標について記述しています。「強さ」はいろいろな見方ができるので、何が正しいかを断言するのはなかなか難しいですが、一意見として読んでいただければ幸いです。

取り組んだテーマ

逆転オセロニア

今回のインターンでは「逆転オセロニア(以下オセロニア)」のデータを用いました。このゲームは、オセロがモチーフになっていますが、トレーディングカードゲームのように、プレイヤーは自分の所持しているキャラクター駒の中から16枚を選択し、デッキを構築して対戦します。各キャラクター駒は盤面に置いたときに発動するスキルと、すでに置かれたキャラクター駒とつなぐことで発動するコンボスキルを所持しており、発動条件や効果は多種多様で、各スキルのシナジーを考えたデッキ構築もこのゲームの楽しみのひとつだと言えます。

デッキ構築に関連したタスクは、一緒にインターンに参加した方が別の記事をまとめているので、気になる方はこちらもご覧ください。

【組合せ最適化はいいぞ】デッキ編成を最適化問題として解く【逆転オセロニア】

課題と背景

オセロニアでは、毎月新しいキャラクター駒がリリースされています。このとき、ゲームプランナーは、新規キャラクター駒がゲームバランスを崩さないように攻撃力などのパラメータを設計し、テストプレイを行い、微調整を重ねています。しかし、時間的制約からテストプレイの回数は限られてしまうため、想定外の問題が発生するリスクを抱えています。

これらの課題を解決するため、DeNAでは強化学習などを用いた環境バランス設計支援する試みが行われています。詳細は末尾にリンクを記載しますので、そちらをご覧ください。

インターンでは、これらの課題への別のアプローチとして、キャラクター駒の各パラメータを元に、そのキャラクター駒の強さを推定する課題に挑戦しました。

この課題は大きく分けて2つのタスクがありました。

  1. シーズンマッチの環境下におけるキャラクター駒の「強さ」を定量化できる指標を定義する。
  2. キャラクター駒のパラメータを特徴量にして、1で定義した強さの指標を予測するモデルを作成する。

本記事では「1. シーズンマッチの環境下におけるキャラクター駒の「強さ」を定量化できる指標を定義する。」の部分に焦点を当てて記述しています。

強さの指標を定義する

結論

結論から言えば、今回は次のようにキャラクター駒の強さを定義しました。

これは、「勝つために組んだデッキに入れるキャラクター駒は、各プレイヤーがその環境下で強いと考えているキャラである」という仮定と、実際の戦績を考慮して定義しました。これから何故この指標にしたのか、順を追って説明していきます。

使用したデータ

今回は、オセロニアのシーズンマッチにおいてトップ層であるダイヤモンドクラスのプレイヤーの対戦データ、使用デッキデータ、所持キャラクター駒のデータなどを用いました。

評価方法

評価方法として、算出した指標で作成したランキングと、Game8さんが作成していた各レア度ごとの最強キャラランキング (https://game8.jp/othellonia/148305 など) との比較を行いました。

評価指標にはジャッカード係数 (JI : Jaccard index)を用いました。この指標は2つの集合に含まれている要素のうち共通要素が占める割合を表しているため、1に近づくほど共通部分が多いということになります。 $$ J(A,B) = \frac{|A \cap B|}{|A \cup B|} $$

(❇︎ 今回比較に使用したGame8さんのランキングには、一部の評価が難しいキャラクター駒は含まれていません。また、アップデートの関係上、今回扱っているデータとランキングとでは少しだけタイムラグがあります。)

共通の仮定

指標を定義していく上で、前提となる下記の2つの仮定を立てました。

  • 最上位クラスのシーズンマッチの対戦データであるため、遊んでいるプレイヤーのプレイスキルは同じレベルである。
  • 使用されるタイミングで盤面への影響力が変わるキャラクター駒が一定数存在するが、手元に来るタイミングのランダム性が大きく、今回は集計対象としたデータが十分多いため、無視できるものとする。

勝率

はじめに、直感的にもわかりやすい勝率に注目しました。キャラクター駒の属性によって勝率に偏りがあったため、属性ごとの平均で割り、補正をかけるなども試しましたが、以下に記載した結果と大きな差異はありませんでした。

仮定

  • 強いキャラクター駒ほど、シーズンマッチの勝率が高くなる。

結果

評価指標

Sレアのキャラクター駒のJI : 0.23

Aレアのキャラクター駒のJI : 0.16

  • 当時の環境では、竜属性のキャラクター駒を含んだテーマのデッキが、勝率上位を占めていたことを考えると納得のいく結果となった。
  • 試合数が極端に少ないキャラクター駒は適切に評価することができなかった。 (0や1など極端な数字が算出されるため、評価指標を計算する際は一部を除外した)

懸念事項

  • 全体的にデッキ自体の強さに引っ張られているため、単体での強さを過大評価、過小評価されてしまうキャラクター駒が多いと考えられる。
  • 各キャラクター駒で試合数が異なるので、勝率だけで見ると過大評価、過小評価してしまう場合があると考えられる。
  • 多くのデッキテーマに入るキャラクター駒は、それらすべての勝敗を合わせた結果になるため、過小評価されてしまうと考えられる。
勝率_集計結果

勝率_集計結果

使用率

次に、勝率とは異なる視点から強さを表す指標として、使用率に注目しました。

仮定

  • フリー対戦ではなく、シーズンマッチであるため、プレイヤーは勝てると思うデッキで対戦している。
  • トップ層のプレイヤーが勝つために組んだデッキに入れるキャラクター駒は、それぞれがその環境下で強いと考えているキャラである。

結果

Sレアのキャラクター駒のJI : 0.49

Aレアのキャラクター駒のJI : 0.24

  • デッキ自体の評価に引っ張られることなく、比較に使用したランキングと似通ったものになった。

懸念事項

  • 入手難易度が考慮されていないため、期間限定キャラクター駒など、一部のキャラクター駒を過小評価してしまう場合があると考えられる。
使用率_集計結果

使用率_集計結果

勝率 × 使用率

次に、勝率と使用率の双方を考慮するため、変数の積を取りました。

仮定

  • 強いキャラクター駒ほど、シーズンマッチの勝率が高くなる。
  • フリー対戦ではなく、シーズンマッチであるため、プレイヤーは勝てると思うデッキで対戦している。
  • トップ層のプレイヤーが勝つために組んだデッキに入れるキャラクター駒は、それぞれがその環境下で強いと考えているキャラである。

結果

Sレアのキャラクター駒のJI : 0.49

Aレアのキャラクター駒のJI : 0.28

  • Aランクのキャラクター駒のJIが多少向上したものの、使用率とあまり変わらない結果になった。

懸念事項

  • 入手難易度が考慮されていないため、期間限定キャラクター駒など、一部のキャラクター駒を過小評価してしまう場合があると考えられる。
勝率 × 使用率_集計結果

勝率 × 使用率_集計結果

勝率 × 使用率 / 所持率

各キャラクター駒ごとに所持率を算出し、使用率を割ることで、懸念点になっていた入手難易度を考慮できるようにしました。 この指標が今回、私が強さの指標として最も適切だと思った指標です。

仮定

  • 強いキャラクター駒ほど、シーズンマッチの勝率が高くなる。
  • フリー対戦ではなく、シーズンマッチであるため、プレイヤーは勝てると思うデッキで対戦している。
  • トップ層のプレイヤーが勝つために組んだデッキに入れるキャラクター駒は、それぞれがその環境下で強いと考えているキャラである。

結果

Sレアのキャラクター駒のJI : 0.49

Aレアのキャラクター駒のJI : 0.34

  • 基本は使用率ベースだが、勝率も高くないと評価されない状態になった。
  • 使用率だけでは見落としてしまう、現環境下で強いキャラクター駒をしっかり評価できている。

懸念事項

  • 現状考えられる大きな懸念点はなし。より細かな調整には各キャラクター駒が所属するデッキタイプの影響の考慮などが考えられる。
勝率 × 使用率 / 所持率_集計結果

勝率 × 使用率 / 所持率_集計結果

まとめ

本記事では、対戦ゲームに登場する各キャラクターの「強さ」を表す指標として検討したものについて、結果や懸念点、考察などを記載しました。今回の結論として「勝つために組んだデッキに入れるキャラクター駒は、各プレイヤーがその環境下で強いと考えているキャラである」という仮定の上で、実際の戦績を考慮した「勝率 × 使用率 / 所持率」が各キャラクター駒の強さを表す指標と定義しました。冒頭でも記載したように、「強さ」はいろいろな側面から評価できると思います。自分はこのように考える、実はこんなアルゴリズムがあるなど、ご意見いただけると嬉しいです。最後まで読んでいただき、ありがとうございました。

関連リンク

強化学習等による『逆転オセロニア』対戦環境バランス設計支援

余談

機械学習での予測結果について

前述のとおり、インターンでは「勝率 × 使用率 / 所持率」を目的変数とし、モデルを作成して、予測を行い、評価するところまで取り組みました。結果として、強いキャラクター駒の特徴を正確に捉えきれず、実際に利用できるような精度には至りませんでした。今回上手く予測できなかった原因として、複雑で多種多様なスキルを十分に特徴量に落とし込めなかったことなどが考えられます。(今回はスキルの種類をone-hot-encodingで表し、スキルのパラメータはそれぞれのカラムを作成し、特徴量として加えました)

インターンの感想

今回、フルリモートのインターンということで、実際に参加するまでとても不安でした。ですが、社員の方々に手厚くフォローしていただいたことで、最後まで楽しんで課題に取り組むことができました。特にメンターの社員の方々には、急な相談やお願いにも真摯に対応していただき、感謝の念が尽きません。丁寧かつ的確なアドバイスによって、方向性や考えがまとまり、結果に結びつける上で非常に参考になりました。 また、拝聴させていただいた輪講や、社員の方々との交流を通じて、社内の雰囲気を知る良い機会となりました。 此度のインターンで、参加者の方々の技術力の高さを目の当たりにし、強く感銘を受け、自身の未熟さを思い知りました。そのため、今後もさらなる精進を心がけていきたいと思います。

オセロ・Othelloは登録商標です。TM&© Othello,Co. and MegaHouse / © 2016 DeNA Co.,Ltd.

最後まで読んでいただき、ありがとうございます!
この記事をシェアしていただける方はこちらからお願いします。

recruit

DeNAでは、失敗を恐れず常に挑戦し続けるエンジニアを募集しています。