このダイス、出目が偏ってませんか?
私のダイスボットで採用しているメルセンヌ・ツイスターは、非常に高度に分散した品質の高い素晴らしい疑似乱数を作ります。
一方で私の公開しているダイスボットは、しばしば目が偏ります。
これが矛盾しない理由をちょっと説明しようと思います。
***
コンピュータは決まったことをきちんと繰り返すのが得意で、デタラメな事をやるのが苦手な堅物です。
乱数とはデタラメな数値を作ることですから、正確な乱数を作り出すのはとても苦手なのです。
その苦手な乱数をなんとか作り出すために、様々な人がコンピュータが得意な理路整然とした手順で乱数っぽい数値を上手く作り出す方法をひねり出しました。
ダイスを振ったような本物の乱数じゃないので、疑似乱数といいます。
主流のやり方は、ある数値を元にややっこしい計算をしてまるでデタラメとしか思えない数値を見つけます。次にさっき計算した数値を使って、またデタラメっぽい数値をみつけます。
これを繰り返すことで、順番に規則正しくデタラメっぽい数値が作れます。
規則的に作っているので、条件が同じなら同じパターンで数値が現れます。
紙テープにあらかじめずらっとデタラメな数を書いておいて、くるりと輪に繋げて順番に使うと同じような事が出来ます。
さて、この仕組みで肝心なのはデタラメな数字を書いた紙テープの品質です。
仮に紙テープが10センチの長さしかなくて、1センチに一つの数値が書いてあるとします。
1~10までの数が書いてあれば1d10の代わりに使えるのですが、この乱数発生器には重大な問題があります。
例えば、5のあとに何の数字が入ってるかが1パターンしかありませんから、5がでたら次に何がでるかがすぐ判ってしまいます。
もう一つの問題は、一度5が出たら次に5が出るのは常に10回後です。
もちろん本物の乱数では、1d10を振って5が出ても次に何が出るか判りませんし、5が2回連続で出ることもあります。
結局、この乱数発生器では今出た数値から次の数値が簡単に予測できてしまいます。
これは極めて品質の悪い乱数と言えます。
一方で、この簡単な乱数発生器は出目が偏りません。10回使ったらどの数字も必ず1回ずつ出ます。20回使ったら常に2回ずつ出ます。
品質を上げるには紙テープの長さを十分長くして、同じ数字がパターン違いで何回も出るようにして次の数字を判りにくくしたり、同じ数が続くパターンも混ぜるのが有効でしょう。
***
では肝心のメルセンヌ・ツイスターの話に戻りましょう。
メルセンヌ・ツイスターの紙テープ(乱数周期)は(2^19937)-1というとんでもない長さです。
6000ケタくらいの数なので、どんな長さか想像するのが難しいですね。
地球の赤道が約4万kmでcmで表してもわずか10ケタ。天文単位でも14ケタ、1光年で17ケタですから、まさに天文学的です。
この気が遠くなるような長周期が支えているのは、乱数が623次元に均等分布するという膨大な乱数パターンです。
早い話が過去623個分の乱数を全てチェックしないと次の数値が何か判らないということになります。
今出た乱数だけをみて、次の乱数を当てるのはほぼ不可能と考えていいと思います。
また、これだけパターンが多いということは、同じ数が100回やそこら連続しても、もう一回振ったらまだ出る可能性があります。
本物の乱数は何百回同じ数が出ようが次に出ない保証はありませんから、かなり本物の乱数に近い訳ですね。
これで、メルセンヌ・ツイスターがとても良くできた疑似乱数発生器だというのは判ると思います。
***
さて、これをTRPGに応用したときに奇妙なことが起こります。
数字が極めてバラバラ(分散性が高い)でいかにもデタラメ(乱数間の関連が薄い)な乱数をつくるはずのメルセンヌ・ツイスターですが、出目が偏る事がしばしばあります。
3~4回ロールしてみて「あれ?大きい出目ばっかりだなぁ、偏ってるぞ」なんて言っている人、ときどき居ませんか?
ここまで読んできたみなさんにはおわかりでしょう。
メルセンヌ・ツイスターは非常に大きな周期で高度に分散した乱数なので、短い期間で区切ると出目が偏ってみえることがあるんです。(なにしろ数百回同じ出目が出るパターンまで網羅されていますもんね)
なんの仕掛けもないダイスを実際に振っても、しばしば出目が偏るのと全く同じ事が起きるという訳ですね。
つまり、メルセンヌ・ツイスターはダイスの女神のきまぐれも再現できてしまう凄い疑似乱数というわけです。
« 「ボーンズ&カーズ」Ver1.2.9公開 | トップページ | ActivePerlのインストールが判りません! »
「IRC用ダイス&カードボット「ボーンズ&カーズ」(Perl)」カテゴリの記事
- cre系のIRCサーバがUTF-8に移行したようですね(2012.05.27)
- らぁさんの特殊ダイスサンプルコード(2012.05.26)
- 「ボーンズ&カーズ」Ver1.2.45公開(2011.09.11)
- 「ボーンズ&カーズ」Ver1.2.44公開(2011.09.05)
- 「ボーンズ&カーズ」Ver1.2.43公開(2011.08.27)
「困ったときには(FAQ)」カテゴリの記事
- どどんとふの接続ユーザが増えると重くなる訳は?(2015.04.17)
- B&C用に表のテキストを起こそうと思うのですが、どんな書式が良いですか?(2011.06.04)
- PPMにNET-IRCモジュールがない?!(2010.12.11)
- ActivePerlのインストールが判りません!(2010.01.10)
- このダイス、出目が偏ってませんか?(2010.01.06)
この記事へのコメントは終了しました。
« 「ボーンズ&カーズ」Ver1.2.9公開 | トップページ | ActivePerlのインストールが判りません! »
コメント