2500

トーナメントシミュレータ公開

by
猪瀬イノ(イノセンス)
猪瀬イノ(イノセンス)
昨日の投稿記事で使用したシミュレータをWeb上で公開した。

トーナメントシミュレータ
http://www.inosendo.com/puyo/tsim/

昨日の投稿記事というのはこれのこと。

トーナメント表の偏りによって勝率がどう変わるか
https://puyo-camp.jp/posts/63856

時間の都合でシミュレート条件について記載していなかったため、適切にシミュレートできているか疑問に思った人もいると思う。今回は具体的なシミュレート内容について説明する。もはやぷよぷよチャンピオンシップとは関係なく完全に趣味の話である。

まず最初に、昨日の記事で説明不足だったことがある。記事での結論として「1戦多い4人の中から優勝者が出る確率」を提示したが、あの数字は想定する参加者の実力分布によって変わる値だということだ。記事の趣旨が「配置が勝率に影響することの説明」だったので、データを示して終わりにしていた。

仮に、極端な例として、全参加者の実力が等しく、どの2人が対戦しても勝率は50%ずつということであれば、配置の偏りの有無による有利不利は生じない。単純に優勝までに必要な試合数だけで優勝できる確率が決まる。その確率は1/2の[試合数]乗だ。18人トーナメントで「1戦多い4人の中から優勝者が出る確率」は、5試合なので 1/32×4人分=12.5% になる。

逆の極端な例として、誰にも絶対に負けることのない神プレイヤーが1人いたとする。このときも配置の偏りの有無は関係なくなる。18人トーナメントで「1戦多い4人の中から優勝者が出る確率」は神プレイヤーがその4人の中に入るかどうかで決まるので 4/18=22.2% だ。

現実には、プレイヤー間には実力差があり、絶対負けることがないプレイヤーなどはいないので、実力分布および実力と勝率の関係について独自に定義する必要がある。ここをどれくらい厳密にやるかだが、目的は「配置が勝率に影響すること」の説明なので、「そこそこ妥当」であれば十分である。それで、以下のように定義することにした。

トーナメント参加者一人ひとりの実力を10~100の整数で指定する。
実力70のプレイヤーAと実力30のプレイヤーBが対戦したとき、
 プレイヤーAが勝つ確率: 70/(70+30)=0.7
 プレイヤーBが勝つ確率: 30/(70+30)=0.3
とする。

プレイヤーの実力にどれくらい開きがあるのかは、ゲームの性質や実際のメンバーによって大きく変わる。そこで私は、これまでの結果と経験から、ぷよぷよチャンピオンシップのルール(2先×2)において最弱のプレイヤーが最強のプレイヤーに勝てる確率は3%~5%くらいであろうと予想した。念のためにツイッターでアンケートを取り、この推定がそこそこ妥当であることを確かめた。
 
1%かそれ以下だと考える人も4割いる。

シミュレーション上は極端に弱いプレイヤーを含める意味はあまりないので、最強のプレイヤーの実力を100、最弱のプレイヤーの実力を10とした。このとき、最弱のプレイヤーが最強のプレイヤーに勝てる確率は 10/110=9.1% である。

18人トーナメントのシミュレーションで使うプレイヤーの実力分布を以下のように決めた。

100 95 90 85 80 75 70 65 60 65 60 55 50 45 40 30 20 10

あとは、トーナメントの形を定義したうえで、
【トーナメントの組み合わせをランダムに決定し、誰が優勝するかシミュレートする】
のアクションを100万回くりかえした。ちなみに所要時間は5~10分程度である。

こうして得たのが昨日の記事の結果である。説明は以上。

トーナメントシミュレータのプログラムはJavaScriptで書いているので、内容が気になる人はページのソースを見てください。内容や使い方についてご意見・ご質問等あればコメント欄か私のツイッター(@inosendo)までどうぞ。間違いの指摘やもっといい方法の提案もいただけると嬉しいです。
 
DP(Dynamic Programming:動的計画法)は本で少し見たことがあるだけで身についてはないんですよね(chokudaiさんのチーター本は出てすぐ買ってます)。今回の場合、どういう感じで使うのでしょうか?
 
更新日時:2018/09/15 02:16
(作成日時:2018/09/15 02:16)
コメント( 3 )
muSHIMaru
muSHIMaru
2018年9月15日 3時2分

乱数で勝敗を決定してしまうのではなく、誰がどの確率で勝ち上がるかを計算するのがモンテカルロ法で、それを他の組み合わせの時もデータとして参照するのが動的計画法、だったかな。

muSHIMaru
muSHIMaru
2018年9月15日 3時8分

例えば動的計画法だと、決勝の組み合わせと勝率を全部テーブルで持っておいて、
それを準決勝以降の組み合わせによる勝率を計算するのに使う、
さらにそれを準々決勝以降の組み合わせで~と
ある程度まであらかじめやっていけば計算が早くなる、という話かと。

猪瀬イノ(イノセンス)
猪瀬イノ(イノセンス)
2018年9月16日 0時8分

トーナメントの組み合わせをランダムに決めたあと、このプログラムでは優勝者1人を決めているだけのところを、各プレイヤーの優勝確率を同時に求めるようにするという感じのようですね。
ちょっと応用例を考えてみます。

コメントするにはログインが必要です
シェア