ビー玉レースは公平か — 5000回まわして数えた
· 読了目安 7分
両端2レーンが1位の最大56%を取る。コースは公平でないのに名前ごとの勝率がそろう理由は、毎回引き直される出発スロットにある。
見ていられる抽選と、信じられる抽選は別もの
ビー玉レースの抽選ツールは、物語のついたくじ引きです。名前を入れるとビー玉がピンや回転バーだらけの盤を転がり落ち、最初にゴールした玉が当たり。数字だけがぽんと出る抽選には「操作したのでは」と言う余地が残りますが、十秒間みんなの前で転がった玉には誰も文句を言いません。
ただ、見ていられることは公平さの証明ではありません。そこでこのサイトのビー玉レースを、画面を切ったまま5,000回まわしました。マップ5種それぞれ1,000回、参加者は8人です。
結論から言うと、コースはまったく公平ではなく、それでも抽選は公平でした。この二文のあいだにあるものが本題で、これはビー玉レースに限らず、あらゆるランダム抽選ツールの見分け方になります。
画面なしで走らせるという方法
この結果はアニメーションではありません。開始時に32ビットのシードを引き、そのシードから疑似乱数を回し、物理計算そのものが抽選になっています。玉の初期配置も衝突も着順も、その一つの数字から決まります。同じシード・同じ名前・同じコースを別の端末に渡せば、着順まで同じものが再生されます。
だから測れます。キャンバスを外して物理だけを回すと、見るのに十五秒かかるレースが数ミリ秒で終わります。盤は500×1240、玉の半径は9、重力はサブステップあたり0.038でフレームあたり4サブステップ、反発係数はピンが0.5、壁が0.45、玉どうしが0.3。どのマップも同じ漏斗で終わり、幅68の出口を抜けた順番が着順です。
記録したのは一つだけ、勝った玉の出発レーンです。玉は盤の上端に横一列で置かれるので、8個を出発x座標で並べれば、左端がレーン1、右端がレーン8になります。
レーンは公平ではない。それも際どい差ではない
既定の嵐コースで1,000回。盤が公平なら各レーン125勝あたりに落ち着くはずです。実際はこうでした。
| レーン | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|---|---|---|---|---|---|---|---|---|
| 1位の回数 | 116 | 53 | 35 | 36 | 50 | 88 | 175 | 447 |
右端が44.7%、真ん中のレーン3が3.5%。12.8倍です。カイ二乗値は1,075.7で、自由度7の5%棄却点14.07とは桁が違うので、偶然の揺れという説明は成り立ちません。
五つのマップ全部が同じU字でした。外が勝ち、真ん中が負ける。両端の二レーンは盤の四分の一なのに、勝ちの42.6〜56.3%を持っていきます。
| マップ | 両端(1・8) | 中央4本(3〜6) | 最高レーン | 最低レーン |
|---|---|---|---|---|
| 🌪️ 嵐 | 56.3% | 20.9% | 44.7% | 3.5% |
| 🏭 工場 | 54.5% | 21.8% | 32.1% | 3.4% |
| 🌀 ワープ | 49.1% | 28.7% | 28.0% | 5.4% |
| 🧩 迷路 | 44.2% | 30.9% | 28.1% | 7.3% |
| 🎡 カーニバル | 42.6% | 30.1% | 25.4% | 5.7% |
原因は横風ではなく「壁ぞい」だった
嵐コースには逆向きの横風が二層あるので、まずそれを疑いました。違いました。風を丸ごと消して400回まわしても右端は170勝(風ありは172勝)。風の向きを反転させると偏りが反対側へ移るだけで、大きさは縮みません。
レーンごとに「漏斗の入口に着くまでの時間」を測ると、何が起きているかがわかります。
| 出発レーン | 1 | 3 | 4 | 7 | 8 |
|---|---|---|---|---|---|
| 漏斗到達(平均) | 13.3秒 | 15.1秒 | 15.7秒 | 11.4秒 | 8.0秒 |
| 平均着順 | 4.31 | 5.23 | 5.31 | 3.80 | 2.60 |
真ん中から出た玉は、下りきるのに倍近い時間を使います。ピンの原っぱを正面から抜けねばならず、当たるたびに接線方向の乱れが加わって次のピンへ送られる。端の玉は各段の端をかすめて通るだけです。壁の反発は0.45と低いので原っぱへ跳ね返らず、壁に押しつけられたまま滑り落ちます。盤の上でいちばん退屈な軌道が、いちばん速い軌道なのです。
これはこのコース固有の欠陥ではなく、幾何の性質です。長方形に障害物を撒けば、中央のほうが手の届く範囲に障害物が多く、端にはいつでも近道があります。レーンが固定されているビー玉抽選には、必ずどこかにこの偏りが入っています。
それでも名前ごとの勝率はそろう
このツールを救っているのは次の一点です。名前は入力した順にレーンへ入るのではありません。コードはまず等間隔のレーン位置を作り、その配列をシャッフルしてから名前を割り当てます。だから一行目に書いた名前は、毎回ちがう場所から出発します。
同じ5,000回を、レーンではなく入力順で数え直すと絵がまるごと変わります。8人×1,000回なので、こちらも期待値は125勝です。
| マップ | 入力順(1〜8行目)の1位回数 | カイ二乗 |
|---|---|---|
| 嵐 | 132 128 139 115 118 114 131 123 | 4.51 |
| カーニバル | 125 123 130 128 136 112 100 146 | 11.15 |
| 迷路 | 128 134 142 130 110 115 124 117 | 6.35 |
| 工場 | 148 124 123 121 148 121 110 105 | 13.76 |
| ワープ | 138 124 130 113 119 129 139 108 | 7.01 |
五つとも棄却点14.07の下です。レーンで数えれば1,075だった同じデータが、名前で数えると4.51〜13.76に収まる。コースの不公平は消えていません。ただ、それが毎回ちがう人に配られている。シャッフルの役目はまさにそれです。
つまりビー玉レースの公平さは玉の側にはなく、出発スロットを混ぜる一行のコードにあります。ここから一般則が出ます。ランダム抽選ツールを疑うときに見るべきなのは「仕組みが偏っていないか」ではなく「参加者と位置の対応が毎回引き直されているか」です。区画の順番が固定でポインタが特定の弧に寄る円盤にも、線を引く前に各自が自分の列を選ぶあみだくじにも、同じ問題があります。
1位を選ぶのと最下位を選ぶのは、かかる時間が違う
ルールは二つあります。1位当たりは最初の玉がゴールした瞬間に終わり、最下位当たりは最後の玉を待ちます。罰ゲームを決めるのはたいてい後者で、こちらは2〜3倍かかります。
| マップ | 1位確定(8人) | 全員完走(8人) | 全員完走(20人) |
|---|---|---|---|
| 🧩 迷路 | 7.5秒 | 17.3秒 | 23.5秒 |
| 🏭 工場 | 9.0秒 | 25.1秒 | 26.4秒 |
| 🌀 ワープ | 9.5秒 | 25.0秒 | 27.7秒 |
| 🌪️ 嵐 | 10.1秒 | 24.5秒 | 28.2秒 |
| 🎡 カーニバル | 14.7秒 | 42.6秒 | 54.2秒 |
いずれも通常速度での中央値です。人数を増やすと1位はむしろ早く出ます。迷路に20人なら6.5秒。玉が多いほど、そのうちの一つがきれいな筋を通る確率が上がるからです。全員完走は逆で、後ろで詰まる玉を待つ分だけ延びます。
マップ選びにはもう一つ実測値があります。漏斗にいちばん先に入った玉が1位を逃す割合、つまり逆転率です。迷路61.1%、ワープ47.8%、嵐39.6%、カーニバル20.3%、工場16.7%。カーニバルは1レースあたり衝突106回で迷路の3回とは比べものにならないほど賑やかなのに、いちばん順位が動きません。トランポリンとベルトは玉を揺らしても並びを入れ替えないのです。最後までわからない盤がほしければ、静かでワープ穴のあるマップを選んでください。
円盤のほうが向いている場面
ルーレット円盤とビー玉レースは、同じものの二つの版ではありません。円盤は乱数を一つ引いて区画を決め、そこへ矢印が止まるように回すだけなので数秒で終わり、区画に幅があるぶん重みも付けられます。ある項目の弧を二倍にすれば当選も二倍です。ビー玉レースにはそれができません。代わりに一回で着順が全部出ます。発表順や掃除当番に本当に必要なのは、そちらです。
お昼のメニューは円盤。八人が口を出す発表順はレース。名前と項目を一対一で結ぶならあみだくじ、組分けならチーム分けの仕事です。
先に言っておく限界
シードはブラウザのふつうの乱数から取っています。ほぼ一様ではありますが暗号学的な強度はありません。コーヒー代を決めるには十分で、結果を予想できると得をする場面には向きません。法的な責任が伴う景品抽選には、参加者が検証できる手続きが必要です。物理のおもちゃではだめです。
そして上で測ったコースの偏りは本物なので、参加者を固定席に座らせる抽選ツールは疑ってください。このツールは毎回スタート時にレーンを引き直します。レーンの偏りが名前に届かない理由はそれだけです。あとは作法の話で、回す前にルールを決める、一回だけ回す、全員が見える画面で回す、同じ名前が続くなら気に入る答えが出るまで回し直すのではなく当たった名前を消してから回す。ランダムは固まります。固まるのがランダムの見た目です。