stoicのポケモンGBAメモ帳(二)

ポケモン第二世代、第三世代について主に考察するブログ。

PJCS2023本戦の大会形式推測と参加者の公開した戦績データまとめ

注意!!!以下の記事は5/18までにツイッターに流れてきた情報をもとに書いたstoic個人の憶測です。

記事の要約

PJCS2023本戦(5/14開催)は、少人数の招待制オンライン大会であることを踏まえ、格差マッチを大幅に許容するレート対戦により進行されていた可能性が高い。この推定が正しかった場合、運営側は各プレイヤーの最終成績として「最終レート」と「対戦回数」だけしか保持していない可能性がある。この場合、切断や試合数等に関する裁定の検証は困難だが、「21試合以上対戦出来てしまった」人たちの状況を詳しく調べると手がかりを得られるかもしれない。参加者の自己申告による勝敗数と最終順位の集計結果からみて、切断などに伴う致命的な数の無効化や集計ミスがあった可能性は低そう。

この記事を書いた動機

色々と物議を醸しているPJCS2023本戦(5/14実施)はどんな大会
・過去3回の予選で優秀な成績だった450人が招待された、ポケモンSV対戦オンライン大会。
・対戦可能な期間は2023/5/14の9-15時の6時間。
ポケモンSVのダブルバトル一回戦(BO1)で各試合の勝敗が決まる。
・「試合回数」を最低10稼がないと順位がつかない。「試合回数」の上限は20。
・上位64名は幕張で行われる「PJCS2023ゲーム部門決勝」の出場権を獲得できる。*1
この記事ではこの大会、PJCS2023本戦について、上位64名をどうやって決定したか、その大会運営方式(詳細は現状、公開されていない)や、「正常な集計ができていないのではないか?」といった疑惑の真偽が気になったため、これまで参加者が開示してくれた情報をもとに考えてみた。

PJCS2023本戦大会形式の推測

大会サーバ(以下、鯖):大会の管理人。各選手の「対戦数」*2を書いたノートおよび「最新レート」*3を書いたノートを持っている。
選手:参加者=各プレイヤーが持っているROM。大会開始時点で「切符」を一枚持っている。
大会進行手順は下記のような感じかなと予想した。
手順1.選手が鯖に接続すると、鯖はその選手の「対戦数」を調べる。20だった場合「対戦数が上限に達しました」旨を伝え、接続を切る。19以下なら次に進む。
手順2.鯖は同時接続している選手について抽選をし、次の試合の組み合わせを決める。
手順2-1.最新レートが近い相手に当たりやすい重みづけをする。*4
手順2-2,レート格差マッチをかなり緩い条件で許容している。*5
手順3.鯖は対戦することが決まった二人から切符を受け取り、二人の最新レートに基づきそれぞれの「勝利時レート」「敗北時レート」を計算し、それぞれの切符にメモする。*6
手順4.(実際の対戦。ここで一旦選手と鯖は接続を切る。片方の降参or切断or全滅で終了する。)
手順5.対戦に勝利(相手の通信エラーor降参or全滅)した選手は、鯖に即座に再接続し、勝利したことを伝える。鯖はこの選手の切符に書いた「勝利時レート」をその選手の「最新レート」として自身のノートに上書きし、切符のメモを消してから切符を選手に返す。
手順6.対戦に敗北(自身の降参or全滅)した選手は、鯖に敗北したことを伝える。鯖はこの選手の切符に書いた「敗北時レート」をその選手の「最新レート」として自身のノートに上書きし、切符のメモを消してから切符を選手に返す。
手順7.(切断した側が再接続した際の処理)切符を持たない選手が鯖と接続した際、鯖は該当選手の切符に書いた「敗北時レート」をその選手の「最新レートとして自身のノートに上書きし、切符のメモを消してから切符を選手に返す。*7
手順8.切符を受け取った選手は鯖にその旨を通信で伝える。
手順9.通信を受けた鯖は該当選手の「対戦数」を+1する。*8
手順10.自動で手順1に戻る。
なお、手順10が自動なことにより、この大会は「どこかで鯖と通信切断しないと休憩を取ったり、10試合以上消化後などに途中離脱したりすることがない」という不便な仕様となっている(現実のPJCS2023本戦と同じ)。こうした目的の切断のうち、試合と試合の間のタイミングで行う通信切断を以後インターバル切断と呼ぶ。

結果集計方法(推測)

鯖は2023/5/14 15時を過ぎたら、自身の持つノートと切符をもとに、結果集計を行う。
集計作業1.「対戦数<10」の選手は「順位なし」とする。
集計作業2. 切符を鯖が持っている選手については、切符にメモ書きしてある「敗北時レート」をノートに「最新レート」として転記する。
集計作業3.「順位なし」以外の選手について、最新レートが高い順で順位をつける。

各種事象・疑問への説明

・10戦や、11戦で順位なし

インターバル切断が手順8と被ったと思われる*9。10戦で「順位なし」になったケースについては、10戦目終了後に必ずインターバル切断を一回行うので、これが手順8に被った、と解釈できる。11戦で「順位なし」になったケースは観測範囲で3名いるが、いずれも1~10戦目のどこかのタイミングで少なくとも一回、インターバル切断を行ったことをツイートで報告している。「10試合目終了までのインターバルが一回のみ」という選手が一名いるのだが、この方は「11試合目を試合中切断で終了した」と報告しており、手順8のさらに前のタイミングで鯖との接続が切れたと推測される。

・21戦できた

どこかのタイミングでインターバル切断が手順8と被ったと考えられる。ただし、「21戦できてしまった人の全員がインターバル切断を行った」かどうかの確認は取れていないため、憶測止まりである。
考え方を変えると、「21戦できてしまったがインターバル切断を一回も実施しなかった(が、対戦中切断は行った)」人が存在した場合、「切断した側が負ける仕様は実装できていなかった」可能性が高まる。*10

・22戦以上できない

今回推測したような大会形式だと、インターバル切断を何回も実施して手順8との被りが2回以上発生し、結果として22戦以上試合できてしまった、という人がいてもおかしくない。しかし現実には、22戦以上できてしまった人の存在は現状確認できていない。
有り得る線として、休憩を頻繁に取りたい人は、SVの通常レート戦の「切断はした側が負け」という法則を使うつもりで、試合中の切断によって大会から一次離脱し、休憩を取っていたのではないか、ということは考えられる。

・レート計算してなかったんじゃね?

計算してたと思う。この記事の末尾につけたグラフにあるような、「勝率と最終順位が逆転しているケースがたまにありつつも、全体としては勝率が高い方が最終順位が良い」という傾向は、レートシステムによって説明することが無理なく可能である。

・なんで最終レート出さないの?

わからない。鯖のノートには最低でも「最終レート」は残っていないと順位付けができないので、公式問い合わせ案件。

・切断の裁定についての疑問

切断の裁定に関して、5/17のメールでは公式は少々不可解な書き方をしている。
>対戦相手の通信切断や無効試合が、自分の対戦でカウントされていないのではないか。
>→調査を行った結果、対戦相手の通信切断や無効試合についてはご自身の対戦数として正常にカウントされています。
これだけでは、
「通信切断を行った側の選手の対戦数がどうなっているのか」
「自身や通信切断を行った側の選手のレートは「切断した側が負け、された側が勝ち」として正常に変動していたのか」
といった疑問には答えていない。
この記事で推定した大会形式だと、「切符」の存在によって「切断した側が再接続時に敗北した扱いのレート更新を受け、対戦回数を1加算する」という挙動を実現できているが、このような仕組みがPJCS2023本戦でも実装されていたかというと、正直なんとも言えない。
ただし、少し上の「22戦以上できない」で書いたように、対戦中切断を何度か実施して休憩を挟んだ選手は一定数存在すると考えられ、もし「切断した側の対戦回数は増加しない」仕様であった場合には彼らは余裕で22試合以上できてしまい、これはこれで騒ぎになっていると考えられる。現状そのような事態は発生していないので、公式が名言していないとはいえ、少なくとも「切断によって対戦回数をちょろまかすことはできない」という、今回の「切符」に相当するような何かは実装されていた可能性がある。切断のペナルティについては、もしかすると「初期レートの相手に負けたとする」のような形で設定されている可能性もありそうだ。
この点についても、現状は推測というか想像の割合がかなり大きい。
「対戦中切断を何度も行い、22戦以上できてしまった」という人が現れるかどうかで、ある程度の検証が可能なので、今後の情報に期待したい。

公式は「対戦成績」をどこまで保管しているのか?

最初に書いたように、「対戦成績」として鯖が保持しているべき情報は基本的に各選手の「最新レート」および「試合回数」のみである。*11
これはオンライン大会の実施コストという観点では大きな利点になる。大会の円滑な進行や運営コストの削減、最終結果集計における不正やミスを減らしたい場合、大会進行中に保持しておくべき情報量は少なければ少ないほど良い。情報が多ければ多いほど、途中計算や最終集計におけるミスの発生確率は上がってしまう。
このような簡略化が可能で、運営側が保持しておく必要のある情報が少ないというのは、他の形式に比べたレーティング形式の利点の一つである。別の例を書いておくと、
例1:スイスドロー形式の場合、大会終了後に最終順位を算出するまでの間、全ラウンドの結果(各プレイヤーの対戦相手とその勝敗)を保持しておく必要がある。
例2:ブロックごとの総当たり→同着は直接対決勝者が勝ち のようなオフ対戦会でよくある形式の場合→ブロック内の戦績(各プレイヤーの、全試合についての対戦相手とその勝敗)を、予選終了まで保持しておく必要がある。
もっと言うと、コストカットの観点でいえば、各プレイヤーの最新試合以前の対戦相手やその戦績、各時点でのレート、各時点での「対戦回数」、選出されたポケモンなどの情報は随時削除していたとしても、「最終順位を決める」という大会の進行目的に対して何ら影響が無いのである。

よくよく考えてみると、公式側は大会の結果集計について、
(5/15メール)
>なお、本大会で対戦された際の成績データにつきましては、正常に集計できております。本大会の成績は不当に無効とすることのないよう、今後の対応の検討を進めてまいります。
(5/17メール)
>・対戦相手の通信切断や無効試合が、自分の対戦でカウントされていないのではないか。
>→調査を行った結果、対戦相手の通信切断や無効試合についてはご自身の対戦数として正常にカウントされています。
と、2つの文章で「正常に」という言葉を使っているのだが、要するに、
「成績データと対戦数は「正常に」集計/カウントしてますよ」
以上のことは言っていないのである。
言い換えると、
「成績データと対戦数を数えるのに必要のない情報は、保持していないかもしれない」
ともとれるのだ。
成績データの定義は不明確なのだが、大会の成績、すなわち最終順位を決めるにあたり必要なのは繰り返しになるが「最新の試合結果に応じて順次更新していく最新レート」だけである。
高々4500試合(×3カテゴリー)のログくらい、もうちょい詳しい情報を保存してるんじゃないかな、とも思うがこれも公式に聞いてみないことにはなんとも言えない。*12
そういえば剣盾以降ってバトルビデオないんだっけ(あっ)

付録:PJCS2023本戦の戦績と順位の散布図

ほぼtwitterに貼った図と同じなのだが、せっかくなので再掲しておく。

図の見方

黒丸:PJCS2023本戦参加者(20-21試合消化)の勝率(自己集計)VS順位
白丸:同上(10-11試合消化)の同上
灰色点:同上(12-19試合消化)の同上*13

実線2本:「20ラウンドじゃんけん大会を450人で実施した場合のある勝率を取る人数の期待値」が持つ、各戦績(勝率)の順位範囲。
破線2本:10ラウンドじゃんけん大会同上。
じゃんけん大会は二項分布を使って計算した。

*14*15

図を眺めて(改めて)思ったこと

順位と勝率の関係は、じゃんけん大会から予想されるカーブと似た傾向が見える。
また、そこから外れる傾向は、だいたいが「PJCS2023本戦とじゃんけん大会の違い」で説明がつく。
いくつか例を紹介しておこう。
■PJCSを10-11試合で終えた人の勝率に対する順位がじゃんけん大会の期待値よりもかなり低い
これは、そもそもPJCSの場合はじゃんけん大会と違って途中ドロップが可能であることと、20試合近辺まで対戦を続けてレートを上げた人が後から割り込んでくるためである。本題とあまり関係ないのだが、高勝率かつ10-11戦で止めた人(白丸)の多くが上位100名(ほぼボーダー近辺)に収まっているというのは、このゲームの上位層プレイヤーの『ボーダー読み』の正確さ、シビアさを端的に示していて驚いた。
■「勝率はAさん>Bさんなのに、順位はBさんの方が良い」
これはレートシステムであること、なおかつマッチング運による。また先述した通りPJCS2023本戦は通常のレート戦や予選など不特定多数が参加する大会と比べて格差マッチを許容する仕様であると予想されるので、予選までの順位感覚が通用しない可能性もかなり高い、ということも念頭に入れておくとよい。とくに、勝率5-6割近辺のボリュームゾーンは非常に狭い勝率幅の中にかなりな人数(数十人とか)が団子で存在することになる。
■最下位近辺の人たちの順位がじゃんけん大会で期待される範囲よりも高い
これは「順位なし」の人々(今回勝敗および最終順位を集計できた101人のうち、6人が「順位なし」だった)が、おそらく30名程度いるであろう、というところが関与していると思われる。「最終順位集計の段階で順位なしの人々が少なからず発生する」ことの影響は、この図の中で他にも表れるはずだが、とりあえずすぐ気付けるのはこの点になる。

あとでやる(かもしれない)こと

・「思ったこと」について有意性検証(けっこうめんどい)
・もう少し試合消化数のパターン分けを細かくした方がいいかも(5段階など)

0520追記:別の書き方した図も置いておく。


丸:PJCS2023本戦参加者の勝率(自己集計)VS順位。
黒:20-21試合消化、濃い灰:16-19試合消化、薄い灰:13-15試合、白:10-12試合
透けてる緑線:「20ラウンドじゃんけん大会を450人で実施した場合のある勝率を取る人数の期待値」が持つ、各戦績(勝率)の順位範囲。
透けてる黒線:10ラウンドじゃんけん大会同上。

スペシャルサンクス

順位や勝敗記録、メール文面などをツイートしていた大会参加者の方々
 →マスターカテゴリの101名(うち7名が「順位なし」)を集計に使わせていただきました。
たまさん(@march_amea)
 →集計結果を一部参照させていただきました。
南ぷりずむさん(@prism4763)、かなたさん(@d123monoris)、しざよさん(@channelzayo)
 →順位や勝敗数に関する情報提供をリプライでしていただきました。
以上の皆さんに感謝します。

*1:PJCS2023ゲーム部門決勝に出場したもののうち64名は、横浜で行われるPWCS2023の出場権を獲得でき、決勝の成績に応じてday1出場権、day2出場権などが付与される。したがってプレイヤーの間では事実上「PWCS2023出場権を賭けた大会」として認知されていた。

*2:開始時点では全選手が「0」

*3:開始時点では全選手が「1500」などの初期レート

*4:この推測は5/17の公式メール中の「③一度対戦した相手とレートが近しい場合、連続でマッチングしてしまう。」という記述からの憶測になる(これを「不具合」と言うからには、「レートが近しい相手とマッチングしやすいような仕組みである」という前提が必要になる)が、正直、重みづけはあってもなくても今回の大勢に影響は薄い。

*5:この推測理由は、「この大会が数百人規模のオンライン大会だから」である。試合開始前の状態で同時接続する選手はせいぜい数十人、下手すると数人の可能性もあり、格差マッチを許容しないと「たいみつ」が頻発する可能性があるからだ。

*6:例えばイロレーティングシステムを採用していれば、二人の最新レートさえあれば、勝敗に応じたそれぞれのレートを事前に計算しておくことが可能である

*7:この機能があれば、切断した側が再接続してくる、という前提のもとで「切断した選手は負けとする」規定を運用することができる。

*8:手順1,8,9を周辺の手順と分離して書いてあるが、ここを分離すると手順1の定数設定次第で「別の対戦上限数を設けた大会」「対戦数に制限のない通常のレート戦」などを簡単に実施できるというメリットがある。と公開後に気付いた。

*9:5/17の公式のメールと同じ

*10:ただ、「20試合上限の大会で、20試合目の結果送信前に21試合目が始まってしまった」という事例が過去にあるらしい(?)ので、今回もそういう形式だった、という可能性はある。この場合、今回推測した形式でいうと手順8と1が同時に行われていた、ということになるかな

*11:切断した選手についてはその限りではないが、これは形式に依らないはずなので考慮しない

*12:ちなみに、公式が「不具合」として認めている >■発生していた不具合 >①通常のインターネット大会と同様の「続けて戦うかどうか」を選択できるメッセージが表示されず、対戦中断ができない。 >②上記の状態により、自分が対戦した回数やレートの確認を行える画面を見ることができない。 >③一度対戦した相手とレートが近しい場合、連続でマッチングしてしまう。 >④通常のインターネット大会と異なる表示や画面遷移が起きてしまう。 これら四項目については、対戦記録を保管していなくても、後から大会を仮想的に実施することで検証できてしまう。

*13:各点から出てる誤差棒は、「各選手の勝敗集計は、人によっては±1勝程度自信なさげであるので、平均して±0.5勝程度の誤差がありそう」と仮定してつけてみた。

*14:じゃんけん(コイントスでもいい、とにかく勝率5割のゲーム)をある回数やったとき、その戦績は二項分布を使って推定することができる。つまり、10ラウンドなり20ラウンドなりのじゃんけん大会をしたとき、戦績分布を推定できる。たとえばじゃんけんを10ラウンドやったとき、10-0の確率は0.097…% 、9-1の確率は0.97...%、8-2の確率は4.39…%、・・・(以下延々と続く)のように計算することができる。 この大会を450人でやった場合、各戦績の人が何人いそうか、という期待値はそれぞれの戦績を取る確率に450人をかけることで計算することができる。その結果、例えば10ラウンドのじゃんけん大会をやった場合の各戦績にいる人数の期待値は、10-0の人が0.439..人、9-1の人が4.39…人、8-2の人が19.77…人、、、と計算できる。このじゃんけん大会の順位が、「勝ち星が多い人は勝ち星が少ない人より必ず上位になる。あとはランダム」というような疑似的なスイスドロー形式で決まるとすると、期待値通りの戦績分布になったならば、上記の結果を使って、「8勝2敗の人の順位は5~25位あたり」「7-3の人の順位は25~77位あたり」と推測することができる。 PJCS2023の大会形式を「実力が拮抗した450人による、10~20ラウンドのじゃんけん大会」のように非常に雑に近似した場合を考える。 このとき、全員が10ラウンドで止めれば、各戦績の順位は破線2本の範囲に、全員が20ラウンドまで戦えば順位の分布は実線2本の範囲に分布することが期待される。これはあくまで期待値であり、実際に20ラウンドじゃんけん大会をやったとしても、実線2本の範囲を外れた順位分布を取り得る(たとえば、たまたま450人全員が10-10になると、勝率50%の線上に1~450位の全員が並ぶ)。 実際のPJCS2023は上で推定したようにレート形式であり、戦績分布も期待通りになるわけじゃないし、ラウンド数も人により不定だし、事前勝率が人やマッチング運によりバラバラだったりするので、実際じゃんけん大会とは全くの別物なのだが、 「ある勝率帯にどれくらいの人間がいるもんなのか?」を見るような参考としては有効だと思うので、同じ図の中にプロットしてみた。 とにかく、「この分布から外れる=集計がおかしい」というわけではないことには注意してほしい。

*15:公開後追記:なんとなく実践点線を曲線で書いてしまったが、じゃんけん大会の戦績ー順位分布は実際にはガタガタとした階段状で書くのが正しい。たとえば、10ラウンドじゃんけん大会の戦績は100%、90%、80%、・・・と10%刻みの値を取るし、20ラウンドじゃんけん大会の戦績は100%、95%、90%、85%・・・と5%刻みの値を取る。