大会を記述するフォーマット
トーナメントを抽象化して、様々な形式のトーナメントを記述できるフォーマットを作りたい。
動機
大会は競技において重要な要素である。
競技というのは現実の複雑な様々な要素を、プレイヤーの優劣という単純な比較に落としこむ。
その比較を競技の直接的な参加者の範囲から広げようと思うのは至ってシンプルな希望だ。
直接的に競技に参加出来る人数、例えば将棋なら 2 人、の範囲を広げ、もっと多くのプレイヤーで優劣を付けるために、大会という仕組みを利用する。競技という少人数用のルールを拡張し、大人数でも優劣を付けるためのルール、それが大会となる。
大会のルール、形式は多種多様である。
大会は競技のルールとは独立して決められる(競技はプレイヤーの優劣の比較という抽象化)ので、プレイヤーにとって競技そのもののルールさえ同じであれば大会のルールの変更を受け入れることは比較的容易だ。また、競技そのもののルールは直接的に競技に参加したプレイヤーの優劣を決定するが、それは抽象化であり比較にすぎないので、参加したプレイヤーの優劣を越えて与える情報はほぼ無い。
そのため、競技のルールを越えた大人数において、優劣の付け方をより正しく思えるように多くの工夫が試みられた。
同時に、大会の時間的なり金銭的なりなどのコストも制約となり、大会のルールに反映しなければならない。
大会のコストは出来る限り、抑えたい。
前述のとおり、大会のコストに制約があるなら、コストを抑えるほど、より正しく思えるようなルールの決定をできるかもしれないからだ。
大会の運営者にとっては言わずもがな、競技プレイヤーにとっても、競技の外という煩わしい物事はできるだけ少なくしたいだろう。
大会にコストの削減はルール、形式の工夫だけでなく、自動化によっても行える。
大人数の参加を想定している以上、その仕組みはシンプルなものになりやすい。また、ルールという論理的に成り立っている枠組みが存在するならそれは自動化の得意分野だ。
実際、多くの大会で自動化が取り入れられてきたし、ネット将棋などのランキングは大会の一種とみなせる。
(僕の周りの話では MasterHand がトーナメント進行に Tio を取り入れて上手くやっていた)
大会の形式、ルールが多種多様である一方、自動化は単純な形式、ルールにしか対応していないものがほとんどだ。
自動化できるツールを幾つか探したが、多種多様なものに対応できる仕組みは見つからなかった。
そこで大会の形式、ルールを上手く抽象化し、様々な大会を記述できるフォーマットを作りたい。
それは競技そのもののルールとは独立しているので、どんな競技にでも使えるだろう。
それが必要なだけの情報を持つなら、自動化できる。
大会形式
おおまかに分けてリーグ方式とトーナメント方式の二つがあると思っているが、その中でも色々な方法があるようだ。 もっとしっかり調べて別記事でまとめる。
トーナメント
トーナメントを表現できる JSON スキーマを試作した。
トーナメントは木構造であるため、アルゴリズムで扱うのが容易だ。応用が期待できる。
進行待ち(競技に参加するプレイヤーは決定しているが、結果が未決定)のリストを吐く関数も簡単に作れた。
今後
リーグ方式も含めた形式も記述できるように慣ればフォーマットとして十分だ。 大会形式をできるだけ多く集め、抽象化してフォーマットを作りたい。 フォーマットができれば、その有用性を訴えるために応用例を少し作って終わろうと思う。
以上です。