【Overwatch】プログラマ視点で見たAvoid as Teammateのアルゴリズム

オーバーウォッチの最新パッチでAvoid as Teammateという機能が追加された。これは1人あたり2人まで「こいつとは同じチームになりたくない」というプレイヤーを選択出来る機能だ。プレイヤーのみなさんの中には、「なぜ2人なんだ?少なすぎて意味ないだろ」と思った人も多いと思う。実際にOWではより多くの(意図的かどうかに関わらず)トロールプレイヤーとマッチしてしまい、毎試合「こいつとはもう二度とやりたくない」と思うプレイヤーがいるものだ。だから2人では明らかに足りない。ブリザードにしても当然同じことを考えているはずだ。

ではこの一見意味のない機能はただの気休めであり、またブリザードはプレイヤーをバカにしているのか?この記事ではおれがプログラマ視点で見た時に、たぶんこの機能のアルゴリズムと真の意図はこうだろうと思うことを述べる。

まず、オーバーウォッチのマッチングが目指すべきところは、一方的な試合を出来るだけ排除することだ。このためにはトロールプレイヤーを排除をして実質的な5対6の可能性を排除すること、ロールのバランスを強制することなどがアイデアとして考えられる。後者について、ロールキューのアイデアについてジェフはすでに考えているが、OWの目指すべきところではないとして「他の方法によって解決を目指したい」と今は述べている。今回の機能は、前者の「トロールプレイヤーの排除」を目的としているとおれは考えている。

仮に無限にAvoid出来るとする。するとAvoidしまくった結果、マッチングが却って機能しなくなる可能性がある。これがまず2人という少数に絞られなければいけない理由。Avoidというのは何らかの6人を選んだ時、その中の誰一人としてAvoidがあってはならないということだから。直感的には2でも高いくらいだ。

では2人ぽっちAvoidすることで何が達成出来るのか?この2人は投票券だと思ってもらっていい。あなたは全プレイヤーの中から「こいつはゴミだ」と思うプレイヤー2人に投票する。そしてその投票は毎週行われる。結果としてブリザードのデータベースにはゴミプレイヤーランキングが構築されることになる。

ここで何らかの数値を考えることにする。初期値は0。1票得ることに+1される。例えばあるゴミプレイヤーAは100、Bは80、Cは10、Dは5とする。この時、マッチングアルゴリズムは「出来るだけ近い値を持ったプレイヤーを選ぶ」ということを優先する。例えばAから見るとBは-20、Cは-90、Dは-95だ。だからまずBと一緒のチームになることが優先される。逆にCとDは一緒のチームになりやすい。こうすることで、ゴミプレイヤーはゴミプレイヤー同士。クリーンなプレイヤーはクリーンなプレイヤー同士チームメイトになりやすくなる。こうすることで、ゴミプレイヤーを次第に隔離していくことが自然と達成される。

では仮にDがCをAvoidしていた場合はどうなるか?当然DはCとチームメイトになってはならない。しかしここで明らかなことは「クリーンなプレイヤーがクリーンなプレイヤーをAvoidしてる可能性は低い」ということであり、可能性が低いのだからもう一回マッチングをやり直したとしても、再マッチングの平均時間には影響がない。逆にゴミプレイヤーだが、彼らは悲惨なことにゴミプレイヤーとマッチングされることが多く、その仮チームメイトの中に一つくらいはAvoidが存在する可能性はわりと高いから、永遠にマッチしなくなる。こうやってゴミプレイヤーはゴミプレイヤー同士でしかチームメイトにならないどころか、次第にマッチしなくなる。

ブリザードがこのアイデアを本当に実装してるかは知らない。しかしこのアイデアは非常に理に適っており、おれが1分で気づくことだからブリザードのエンジニアも1分で気づく。何らかの数値を与えるというアイデア自体汎用性のある基盤であり、他のBlockやReportなどとの組み合わせもしやすいだろうから、現実的なことを考えるとこのように実装されてる可能性はわりと高いと思う。というか実際にはすでにマッチングのためのヒント情報として何らかの数値を持っているというのが自然なので、それを利用した実装になってる可能性が高い。

逆にもしブリザードの意図が本当に「たった2人をAvoidするだけ」なのであればブリザードはまじでバカだし、オーバーウォッチはプレイする価値のないゴミクズだと思う。でも仮にこの記事で述べたアイデアが実装されているのであれば、おれはオーバーウォッチは次第に良くなっていくという希望が持てる。