はじめに
シュミレーションとか、くじ引きでよく使われる乱数、特にプログラムを用いての疑似乱数について感じたことを取り上げてみようかと思う。あくまでも自分個人での視点なので読み流してもらえると助かる。あまりレベルはいつも通り高くない(笑)
定義とか
乱数。特にプログラムで使用される疑似乱数について。
乱数本来は、一度生成すると再現できない乱数列を指していたりするのだがプログラムを使用して生成する疑似乱数は規則性があったりして再現できたりする。
有名な乱数生成について
有名な乱数生成について調べてみた。線形合同法、M系列などなど。
乱数は数列という世界観が大事。
まずは線形合同法。生成の公式を以下に記載する。
X_{n+1}=(A×X_{n}+B)\quad Mod\quad M
漸化式が使用されているのがわかるかと思う。
この使用されている漸化式って英訳するとrecurrence relation、再帰関係式を指しており自身を呼び出すための再帰性が定義づけられていることがわかる。漸化式って再帰性の世界ももつということ。つまりは、1つの数をスタートとするとその数を使用してゴールとなる数値が生成される。これらを並べたものを疑似乱数として扱う。要するに乱数は、ある種の規則性を持った数列の視点を持つのがわかるかと思う。
じゃあ、なぜ、漸化式の他にMod 、余りを使うのか。これは、乱数生成において重要となる周期性に関連する事項となるため、制限をかけるため、用いられている。割り算のあまりを使用することで、割る数であるM以下に算出することができる。周期性が長いほど質の高い乱数生成と考えられるためだ。
つづけてM系列について、こちらも公式を以下に記載してみる。
a_{n}=a_{n-q}+a_{n-p}\quad (Mod\quad2 , q<p)
こちらも漸化式を使用しており同じく再帰的な視点を持つのが確認できる。