リゼット(14新)推奨日記

旧はてなダイアリー(http://d.hatena.ne.jp/risette14/ )から移行しました。

イロレーティングを用いた拡張的な対戦形式の表現方法について

概要

イロレーティングというシステムにおいては、一般に「1対1の対戦」および「2値(勝敗)の結果」を前提としている(当然様々な改良が存在するが)。
当ブログではイロレーティングを用いてMCバトルのレーティングを行っているが、可能な限り単純化するため内部では以下のような記述フォーマットを入力にレーティングを算出している。

ID(主キー) 集合ID 対戦ID 勝者 敗者 勝重み 敗重み
s250301 s25 03 A B 1 1

この例は1レコードの対戦1件を示し、以下を意味している。

  • この対戦にはs250301というIDが割り当てられている。
  • この対戦は他の集合IDs25の対戦と同日に行われ、他の集合IDs25かつ対戦ID03の対戦と同時に行わた。
  • AはBと1回(勝重み)対戦し、1回(勝重み)勝利した。
  • BはAと1回(敗重み)対戦し、1回(敗重み)敗北した。
  • AはAとBのレーティング差を入力としたロジスティック関数に1(勝重み)を乗じた結果をAのレーティングに加算する。
  • BはAとBのレーティング差を入力としたロジスティック関数に1(敗重み)を乗じた結果をBのレーティングに減算する。

しかし、現実には様々な対戦形式が考えられる。対戦形式ごとに記述フォーマットを作っていくと複雑となることから、便宜的に、上記のような「1対1の対戦」および「2値(勝敗)の結果」のレコードを複数組み合わせることによって様々な対戦形式を表現したい。
本記事では、他分野でも一定程度応用できるだろうことから、これまで検討してきたMCバトルにおける表現方法の案を紹介する。

引き分け

MCバトルにおいては通常勝敗が必ず定まるが、引き分けが発生した場合については以下のように処理する。

ID(主キー) 集合ID 対戦ID 勝者 敗者 勝重み 敗重み
s250401 s25 04 A B 1/2 1/2
s250402 s25 04 B A 1/2 1/2

AがBに対して1/2勝したというレコードと、BがAに対して1/2勝したというレコードを同時に与える。
2レコードを別々に与えた場合、後に処理された方が結果に強く影響するため、必ず同時に与える必要がある。以下についても同様。
この2レコードにより、A・Bの間で1戦が行われたこととなり、対戦数・勝敗数は整合的である。
対戦をそもそも行わなかったことにする、という方法もあるが、行われたはずの対戦と対戦数が一致しなくなること、イロレーティングは対戦勝率比を対数化した結果を理想的なレーティング差とみなすシステムであり、レーティング差があるプレイヤー同士で引き分けが生じたならばレーティング差を減少させることが望ましいと考えられることから、上記手法を取る。

チーム戦(N vs N)

MCバトルにおいてはしばしばチーム戦が行われる。チーム戦にも、各チームメンバーが同時参加する形式と、星取り戦のように各チームの先鋒・中堅・大将がそれぞれ戦う形式が存在するが、後者については独立した1対1の対戦の集合とみなせることから、前者のみを考える。
例として、2 vs 2の場合は以下のように処理する。(A1,A2)のチームが(B1,B2)のチームに勝利した場合、

ID(主キー) 集合ID 対戦ID 勝者 敗者 勝重み 敗重み
s250501 s25 05 A1 B1 1/2 1/2
s250502 s25 05 A1 B2 1/2 1/2
s250503 s25 05 A2 B1 1/2 1/2
s250504 s25 05 A2 B2 1/2 1/2

このようにn^2=4件のレコードで表現する。これにより、各プレイヤーは1回対戦し、1/2勝(1/2敗)を対戦相手2人から得て1勝(1敗)したこととなる。全体を見ればN^2/2=2件の対戦が発生した計算となるが、プレイヤー単位でレーティングを行っていることから、各人について「チーム戦に出て勝利した」という結果を1戦1勝として表すことを優先するのがMCバトルにおいては妥当であろうと考えた。
なお、重みを1/nでなく1とすれば、チーム戦においては対戦相手チームの人数分だけ勝利した計算となるし、重みを1/n^2とすれば、全体で見て対戦1件が発生した計算とすることもできるだろう。

チーム戦(N vs M)

より複雑な問題として、MCバトルにおいては人数差のあるチーム戦が時折行われる。結局は何人いようと8小節(あるいは16小節など)という限られた枠の中でチームがラップすることとなるため、人数が多くなっても特段有利ではない、むしろチーム内の協調が難しくなるため不利な場合もあると考えられているためである。
例として、2 vs 3の場合は以下のように処理する。(A1,A2)のチームが(B1,B2,B3)のチームに勝利した場合、

ID(主キー) 集合ID 対戦ID 勝者 敗者 勝重み 敗重み
s250601 s25 06 A1 B1 1/3 1/2
s250602 s25 06 A1 B2 1/3 1/2
s250603 s25 06 A1 B3 1/3 1/2
s250604 s25 06 A2 B1 1/3 1/2
s250605 s25 06 A2 B2 1/3 1/2
s250606 s25 06 A2 B3 1/3 1/2

このようにnm=6件のレコードで表現する。この場合、各プレイヤーは1回対戦し、勝チームは1/3勝を対戦相手3人から得て、敗チームは1/2敗を対戦相手2人から得る。全体で見ればNM/2=2.5件の対戦が発生した計算となり、N vs Nチーム戦と齟齬のない拡張が行えている。
この方式では1レコード内で勝重みと敗重みに異なる値を用いることで、1対1の対戦の組み合わせであるにもかかわらず人数差のある対戦を表現できているが、一方でイロレーティングのゼロサム原則を崩すこととなる。イロレーティングでは原則として、勝者が得る値と敗者が失う値は一致しており、環境全体の平均レーティングは常に原点となる。しかし、この方式の場合は重みと敗重みの値が異なることから増減が一致しなくなり、レコードの組み合わせでも解消されない。レーティングに大きな差がない場合、少ない人数のチームが勝利すれば環境全体の平均レーティングは減少し、多い人数のチームが勝利すれば環境全体の平均レーティングは増加する。
ただし、MCバトルの場合は全体に比して人数差のある組み合わせの対戦は微小*1であり、全体に影響するほどではないことから、N vs Nチーム戦と平仄を取って各プレイヤー単位の勝敗を1戦分として表現することを優先し、この方式を取る。

バトルロイヤル(1 vs 1 vs 1 vs…)

近年の戦極 MCBATTLEで試みられている形式として、3~4人が同時対戦し1人が勝ち上がるバトルロイヤルが存在する。
現状は単発イベント規模であることからレーティングの対象大会に組み入れる予定はないが、あらかじめこの形式についても表現方法を検討する。
例として、チーム数T=3で1 vs 1 vs 1の場合は以下のように処理する。AがB、Cに勝利した場合、

ID(主キー) 集合ID 対戦ID 勝者 敗者 勝重み 敗重み
s250701 s25 07 A B 1/2 1/2
s250702 s25 07 A C 1/2 1/2
s250703 s25 07 B C 1/4 1/4
s250704 s25 07 C B 1/4 1/4

このように(T-1)^2=4件のレコードで表現する。この場合、各プレイヤーは1回対戦し、勝プレイヤーは1/2勝を対戦相手2人から得る一方、敗プレイヤー2人は勝プレイヤーから1/2敗を得た上互いに引き分けに相当する1/4勝1/4敗を与え合う。全体で見ればT/2=1.5件の対戦が発生した計算となる。
1人だけが勝ち上がることから、負けた他プレイヤー同士の関係については無勝負と考えることもできるが、プレイヤー同士でdisが発生し競い合っている以上は、勝敗が発生した関係含め各対戦相手に対して等しい重みをつけるべきと考えた。
ただし、勝者に関する重みを1/2でなく1、敗者に関する重みを1/2(T-2)としても整合性に問題がなく、実際のイベントを考えた時に適切な変動量がどちらであるかは改めて検討したい*2

*1:2012年~2019年の主要大会での対戦2926件中AsONEを中心とした41件

*2:主観では、現状の重みづけでは通常のトーナメントに比して変動量が小さすぎ、勝者重みを1とした場合は変動量が大きすぎるように思える