乱数と確率


本サイトではコンピュータープログラムに於ける乱数の話が良く出てくると思う人が多いかも知れません。
当然ながらとても重要な物だからこそ、どうしても多く出てきてしまうわけなのですが。

もしVR仮説が正しいとしたら、この世界の確率の多くはマスタープログラムの中の乱数発生によって与えられていると考察出来ます。
つまり「この世界の真理」と「乱数」は密接に関わっているのですよ。(これについては今後詳しく述べていきますね)

実際に乱数というのはコンピューターシミュレーションに於いて非常に良く使用されます。
当然、ゲームのプログラムにだって使っているはずですよ。(きっとほぼ全てのゲームに)
今までは乱数についてはやや技術的な話になるので触れてきませんでしたが、それ程難しくない上に考え方として役に立つ場面もあると思うので、簡単に説明してみましょう。


では皆さんに学校の様に私から一つ、コンピュータープログラムの課題を出すので少し考えてみてください。

コンピューターの中でサイコロを振るプログラムを作り、そしてサイコロを振る回数と出た目を出力して下さい。
またその結果が、サイコロを振る回数が増える程どの目が出る確率も1/6に近づくことを示して下さい。
(サイコロを振る回数はそれぞれ10回、100回、1000回、1万回とします)

まあ今時は大学一年生でももう少し難しい問題を出すのかも知れませんが、私の時代はこのレベルでも出来る学生は少なかったものです。(調べようと思ってもネットがなかったので全て自分で考えるしかありません)

すぐにアルゴリズムが浮かんだ人はこの記事は飛ばして頂いて結構です。

時々、数学を使ってサイコロの目が出る確率はどの目も1/6である事を導き、プログラムにそのまま1/6と書く人がが居ますが、それはシミュレーションとは呼びません

これは解析的な手法で解いているだけですからね。これはプログラムを走らせる前に答えはわかっているので、走らせる意味がありません。
(と言いつつ、私が大学一年生の時にシミュレーションと謳っておいて解析的に解くプログラムを出題した教授が居たので、「これはシミュレーションではなく単なるグラフプロットプログラムではないか」突っ込みを入れたことがありました(笑))

結果がわからないのがシミュレーションであり、そのためにプログラムを走らせるのですからね。

さて、ここで出番となるのが乱数なのですよ。
ネットで調べれば詳細な説明が多く出てくると思いますが、乱数というのはランダムな順番の数値のことであり、ランダムな数字を一つずつ発生させる関数(機能)のことを乱数発生関数といいます。
例えばC言語系ならば関数名はrand()ですね。乱数発生関数はどの言語でも用意されているはずです。

この乱数を0から100までの間に指定して乱数発生関数を呼び出すと、
65,2,13,98,82,52,7,……といった具合に、呼び出すたびに何の秩序も法則もないランダムな順番で指定範囲内の数値が出力されます。
但し、どの数値も出る頻度は同じになっています。これは一様乱数って奴ですね。

さて、もう分かりましたか? これをサイコロに使ってやれば良いわけです。

サイコロなのでキリが良くなるように乱数の範囲は1から60までとしましょう。
そして乱数関数を呼び出してその値が1-10の間ならばサイコロの1の目が出たことにし、11-20の間ならば2の目が出たことにし、21-30の間ならば3の目が出たことにし……、といった具合に60までプログラムを作ってやれば良いのです。

乱数発生関数を10回呼べば10個の値が返ってきます。そして上記に照らし合わせてサイコロのそれぞれの目が何回ずつ出たかをヒストグラムに描いてやれば良いのです。
乱数を使えば次に何の目が出るのかは判りませんし、実行結果は毎回異なるでしょう。だからシミュレーション(模擬実験)なのです。

同様にして100回サイコロを振ったケース、1000回、1万回とプログラムを走らせて、それぞれの結果を出力すれば課題はクリアです。
きっと1万回サイコロを振ったケースが最も1/6に近くなることでしょう。これは現実世界と同じですね。

乱数発生関数については、ランダムに見えても実は数式から作っている擬似乱数(なんちゃって乱数)である件や、擬似乱数には周期が存在するなど難しい話がありますが、それらについては追々解説することにして第一回目はこの辺にしておきましょう。

一つだけ「なぜ乱数と真理が関係しているのか」について予告しておくと、もし星占いを始めとした何らかの占いが当たるとしたら、それは「乱数が関係しているから」だと思われます。


さて、少しはコンピューターシミュレーションのイメージが掴めましたか?
何となくでも良いのでイメージが掴めていれば本記事は成功ということです。

余談ですが私がはじめてこの手法を自分で考えて使ったのは、ミトコンドリアイブのシミュレーションでした。
産まれる子どもの数を確率的に与えるときに、何日も考えて最終的にこの手法に行き着きました。

そしてこのミトコンドリアイブのシミュレーションの結果が後の学生生活に大きな影響を与えることになったのは先述の通りです。
一言で言うなら、コンピューターシミュレーションの魅力に取り憑かれてしまったのですよ。

その時の心情を例えるなら、まるで神と対話をしているようであり、神の講義を受けているようでもありました。
少なくとも大学の講義よりも100倍ゾクゾクと来るようなものがあったことを良く覚えています。
(念のために言っておきますが、ミトコンドリアイブのシミュレーションは大学の課題ではありませんよ(笑)。これは純粋な知識欲から作ったプログラムでしたが、後から思えばこれがVR仮説に行き着くための第一歩になっていたような気がします)


戻る   トップページ