艦これの春イベントも終わり、ふとどうでもいいことを思い立つ。
乱数の偏りが実際どんなもんなのか、手軽に試せるJavascriptを書いたら楽しそうだな、と。
物凄く簡単な物として、「サイコロを振ったらどの目が何回出るか」のシミュレーターでも作ってみよう。ちょちょいとjQueryで。
乱数生成には、高品質な乱数として有名で採用例もめちゃくちゃ多いMersenne Twisterを使用した。これは数学的に非常に質が良いとかなんとか証明されてるらしいけど、信用しきれないなら実際サイコロを振ってみて数えるのもお勧め。
使い方は説明するまでも無いと思うので略。とりあえず「1回振る」辺りをカチカチしてみてください。
これだけでも面白いことが色々分かる。
例えば、「60回振る」→「リセット」、を繰り返してみることで分かるのは、「60回くらいだと猛烈に偏る」ということ。最大と最小で3倍以上違う、なんてのは頻発する。600回だと相当落ち着くけど、運が悪いと最大と最小で1.5倍くらい開いたりすることもある。6000回はさすがに信用出来る感じだけど。
これがどういうことかと言うと、「とあるゲームで攻撃の結果を60回集計してみましたが、三倍も結果に差があったので明らかに○○が有利です」みたいなのは割と怪しい、と。60回の集計は大変だけど、乱数相手では「たったの60回」にしかならない、という哀しみが味わえる。
また、逆正弦定理で勝ち負けが割れる現象も体験出来る。「乱数勝負で最初に偏って勝てた人はそのままリードを保ちやすい」という奴で、まー当たり前のことなんだけど。例えば、600回振って、激しく回数の多い出目があった時、そのままガンガン振り続けてみると、大抵はその出目がずっと多めのままになる。振ってりゃ分かるけど、ものすげー当たり前の理屈である。だって、後から追加でいくら大量に振ろうが、追加分は均等に近い訳で、最初の偏りを補正するような力は無いのだ。
まー、何か思ったより面白いスクリプトだったので、このまま公開してみる。
艦これ的には、バシーの羅針盤を体験してみるスクリプトなんかも面白そうだけど、めんどいので誰か作ってみませんか。とか。
今、アナログゲーム作ったりしているので、こういうのはすごく助かります。こういうのを自分で設定して、試してみるツールとかあるとイイですよねー!(チラッ!w
モンテカルロメーカーみたいなの欲しいなーと思ったりはしますね。
技術力の高い人なら結構ささっと作れそうな気もしますが、俺にはちょっときついです。ぐぬぬ。