「乱数についてのよくある誤解を解く」といった趣旨の記事がなぜか量産され、そのどれもが新たな誤解を生んでいると感じたので、自分も自分なりに乱数についての解釈を記します。小難しい言葉が出てきますが、解説しないものについては「こんな言葉で表すんだな」くらいに思っていただいて結構です。
保険をかけるようで本当に心苦しいのですが、この記事ですら誤解を生んでいる可能性は否定できません。
そもそも乱数とは
「これは乱数ですか」と聞かれると、答えようがない
乱数とは、「任意の範囲の数が不規則かつ等確率で現れるように配列されたもの」。この状態を一様分布という言葉で表現される。また目が出る確率がすべて等しいことを「出目は同様に確からしい」とも言う。中学数学だか算数だかで一度は聞いたことがあるのではないだろうか。分布にもいくつか種類があるが、全て説明するとなると読むのも疲れるくらいの文量になってしまうので、今回は一番身近な、一様分布の乱数について扱うこととする。わかりやすいのがサイコロだが、厳密にはあの出目は乱数とは言えない。上記の文言がいかに確かめようがないか、はなんとなくわかるだろうか。サイコロの出目を並べてみて、1から6までの数が、どうして不規則かつ等確率で出ていると確かめられよう?何度も投げていれば、いわゆるピンゾロ(1が3回揃うこと)がさらに連続して出るなんてこともあるが、もちろん組み合わせとして十分にあり得るので、イカサマによって等確率でなくなっているとも判断しづらい。乱数とはイデアである。
が、確率については確かめる方法がないわけではない。サイコロを1度振って出目が2つも出ることはない(排反事象という)から、目の出る確率はすべて足すと1になる。サイコロは1/6の確率で出る目が6つあるので、(1/6)*6=1。
たくさんの試行で得られた結果を確率にして全部足す。試行回数が多いほど1に近づいてくる。どれくらいたくさんの試行でどれくらい1に近づくかも、大数の法則というもので求めることができる。この定理通りの結果が得られれば、理論通りに事象が起こったといえる。
「ランダムである」というのはどういうことか、説明の仕方を自分は知らなかったが、「圧縮できない」とも言い換えられると、何かで読んだ。なるほど。つまり「規則性がない」「不規則」。ただ乱数によって抽出されたサンプル、例えばサイコロで1が連続して出ることも大いにあるわけで。乱数を語るときこの言葉は適さないと判断した。
結局、出目が不規則かつ等確率であるかどうかは、試行結果を整理して感覚で決めるしかない。不規則かつ等確率の出目をだすのは不可能、というか確かめようがないから、とりあえず真乱数という形でサイコロや六角形の鉛筆、トランプ、熱運動、疑似乱数としてメルセンヌ・ツイスタやXorshiftなどが活用されている。
疑似乱数のアルゴリズムもこの記事には収まらないくらいに面白いので、いつか自分が概要だけでも理解できたらお伝えしようと思う。
ギャンブラーの誤謬(ごびゅう)
ギャンブラーの誤謬とは、「今度こそ1が出るだろう」という考え方だ。今サイコロを振っているとして、どの目が出る確率も(重さによるほんの少しの誤差はあれど)1/6(同様に確からしい!)なのだが、2,3,3,6,6,4,5,6,2,…..と続いていると、どうしても出ていない1が出ることを期待してしまう。これをそう呼ぶのだ。確かにこう考えたほうが賭け事は楽しいと思う。
疑似乱数には再現できるものとできないものがあり、この誤謬へのアプローチが変わってくる
狙った値を出すことができるかどうかを、再現可能性という。乱数なのに値を狙ってしまえるのかというと、狙える。サイコロで言えば「転がし方を工夫する」、疑似乱数で言えば「Seed値(シードち)」を設定する、ということで再現可能となる。Seed値とは、疑似乱数という関数の、入力に相当する部分だ。例えば乱数を関数f(Seed値,試行回数)として、
f(2020,1)=0, f(2020,2)=0, f(2020,3)=1, f(2020,4)=0
噛み砕いていうと、Seed値2020で疑似乱数を4回振ってみたら0,0,1,0という順で目がでたよ、ということだ。
f(2021,1)=0, f(2021,2)=1, f(2021,3)=0, f(2021,4)=1
今度はSeed値を2021にして4回振ってみたら0,1,0,1という順で目が出た。
狙った目が出るSeed値を探して活用するというよりは、計算結果を後でも再現できるようにする目的で活用される。たとえばドラクエのモンスターの行動パターンは疑似乱数で決められていて、このSeed値を保存しておけば戦闘のリプレイなんかができる。
で、ギャンブラーの誤謬とどう関係があるのか。言ってしまえば、疑似乱数というのはあらかじめ出目が決まっているようなものだ。とすると、「今度こそ1が出るはずだ」「いやわからない。なぜならいつだって出目の確率は1/6だからね」などと考えることも完全に無駄になってしまう。何せ出目はもう決まっているのだから。いやゲームとして楽しむ分には、そこで動いているのが真乱数なのか疑似乱数なのかなど考えることはないかもしれないが。
つまり、疑似乱数では誤謬など考える余地もないのだ。
ひとまずここで区切るが、また何かあれば追加する。
- 乱数はイデアである
- 「ランダムさ」は確かめようがない
- ギャンブラーの誤謬については乱数の種類によって考え方が大きく変わる