開発者の洞察: 闘技場のバランスに関わる科学

開発者の洞察: 闘技場のバランスに関わる科学

ようこそ!「ハースストーン」チーム、シニア・データサイエンティストのTianです。今日は闘技場のバランスを支える数値についてお話しします。

闘技場では常に対戦が行われていて、大量のデータが絶え間なく生成されています。私たちはこのデータを活用して闘技場のバランス向上に役立てています。もし私がブーム研究所で働くことになったら、きっと数理科学部門に配属されることでしょう!

ゲームのバランス調整

ABunchOfKnobs_option02.jpg闘技場のバランス調整は2段階にわかれています。まず最初は、各カードがどのバケットに入るのかを決定します(バケットはパフォーマンスの良し悪しが同等なカードの小グループです)。通常、1つのカードは2つのバケットに入ります。加えてレジェンドとレジェンド以外のカードは系統が異なる2つのバケットに分けられています。各カードはゲーム中の勝率とピック率に応じてどのバケットに入るのかを決めています。つまり、ピック中に見る3枚のカードはパワーティアが同等ということになります。

その後、9クラス全体の勝率の調整を行います。できる限り勝率を50%に近づけることが理想です。このバランス調整は各カードに関連付けられた「ウェイト」を調整することで行われます。ウェイトはカードがドラフトに登場する相対的な比率を示す数値です。カードのウェイトが大きいほど、ドラフト中により高い確率で見かけることになります。カードのウェイトが変更されると、そのカードが入るバケット自体の登場確率も変化します。

このシステムを機能させるには大量のデータが必要ですが、毎日多数の闘技場の対戦が行われているため、十分な量のデータを利用できます。

ThreeSteps_EK_600x260.png

こうしたデータを、ゲームバランスの調整に役立てるためには次の3つのステップが必要になります。

  1. モデルの構築
  2. 制約のある最適化の問題の解決
  3. ウェイトの計算

3つ全て終えたらホットフィックスのスケジュールを組み、変更を適用します。

モデルの構築

よく闘技場でプレイしている人なら、勝率の計算方法を知っているかもしれませんね。カードによって勝率への影響の度合は異なっていて、大きく勝率を左右するカードもあればそうでないものあります。たとえば対戦中に「リッチキング」を引いた場合、「スノーフリッパー・ペンギン」を引くよりも勝率に遥かに大きな影響があります。

EN_SnowFlippaLichKing.png

ある対戦中に「リッチキング」を引いたと仮定しましょう。あなたはこんな疑問を持ちます。「『リッチキング』を引いたことで自分の勝率はどう変わっただろう?60%になった?50%になった?これを定量的に評価するにはどうすればいいんだろう?」そこからさらに、次のターンで「アイスバリア」を引いたら、もう一度勝率を評価し直したいと思うことでしょう。

私たちはこうした問いに答えることのできる機械学習モデルを構築しました。闘技場でプレイされた全ゲームの詳細を利用して、コンピューターに大量のデータを入力します。するとコンピューターはアクセス可能な全情報に基づいて、勝率を予測する方法を学習します。もう少し正式な用語で言うなら、データを使って構築したモデルを「鍛える」のです。そうすることで、たとえばX枚のカードが引かれるごとに、勝率についてモデルがその答えを提供できるようになります。

制約のある最適化の問題の解決

ABunchOfKnobs_option03.jpg一歩下がって、このモデルはたくさんの調整可能なつまみが付いた「箱」だと考えてみましょう。つまみはそれぞれ特定のカードに関連付けられています。あなたがつまみを回すと、関連付けられたカードの数値が調整されます。

つまみを回す前に、箱が現在の勝率は40%だと教えてくれたと仮定しましょう。ターンを終えたら、予測される勝率は46%になりました。ここに非常に興味深い疑問が提起されます――複数のつまみを回せば、勝率を望んだとおりの値に調整できるのではないか?

この疑問が最適化の問題を構築する必要があるという考えにつながります。数学的な言い方をすれば、すべての実現可能なソリューションからベストなソリューションを見つけるということになります。私たちは同時に「複数のつまみを回す」ことで、ターゲットを私たちが求めているものに限りなく近づけようとしているのです。正式な言い方をすれば、高次元ベクトル上のいくつかの目的関数を最小化しています。

闘技場のバランス調整に話を戻すと、クラスに関係なく、予測される勝率を限りなく50%に近づけることが理想です。それを達成するために、私たちは各カードに関連付けられた数値を変更しています。

ただし、つまみは自由に回せるわけではなく、一定の制約が科されています。そうした「箱」にプログラムしている制約の一部を紹介すると、たとえば以下のようなものです。

  • 新たな数値は複数存在する固定値の±30%の範囲以内に収める(劇的な変化はゲームプレイ体験を損なう可能性があるため)。
  • 闘技場で特定のクラスのパワーを低下させたい場合は、その中でもっとも強いカードの登場率を弱いカードよりも下げる必要がある(クラスを強くしたい場合はその逆)。
  • 問題の有効性を維持するための絶対的な制約もいくつか存在します。たとえば、登場率の増加累計は低下累計と一致させる必要があります(数学用語で言うとゼロ・サム、つまりプラスマイナスゼロにする)。

ウェイトの計算

HeavyLooking.png闘技場のデータを使ってバランスを変化させる最後のステップは、各カードに関連付けられたウェイトを、上記の2つのステップで得られたものに基づいて調整することです。基本的には、ウェイトが2.0のカードはウェイトが1.0のカードの2倍の確率で登場します。制約のある最適化は、どの「つまみ」をどれくらい回して調整すべきかを教えてくれます。その後各つまみを、各カードがドラフトで登場する確率にリンクさせます。これで、各カードのウェイトをどれくらい調整する必要があるのかがわかります(カードの特性によるその他のモディファイア――呪文か武器か?どの拡張版のものか?などは考慮されていません)。

競技条件の平等化に向けて

バランス調整がこの段階を過ぎると、全9クラスの総合勝率は±50%に非常に近くなっているはずです。ただし、まれにバランス調整後の勝率が理想的な状態にならない場合もあります。これはウェイトの調整前に特定のクラスの勝率が50%から大きく離れているときに起こります。そうした場合、理想的な数値に到達できないこともありますが、それでも以前よりましな状態にはなります。

このシステムは高度な計算数学と機械学習を使って闘技場のデータを活用することができます。そのおかげで、私たちは特定のクラスについて強化または弱体化が必要であるかどうかを判断することが可能になり、また、各クラスの各カードの最適なウェイトを選択できるのです。

ABunchOfKnobs_option05.jpg

闘技場のために活用している微調整のためのシステムのお話を、楽しんでいただけましたでしょうか。ご感想をお待ちしていますので、質問がありましたらコメント欄でお聞かせください。

コメントのロード中…

コメントのロード中にエラーが発生しました。