乱数生成機
乱数を生成するツール。Mersenne Twister、擬似乱数、真の乱数の違いと計算機科学における応用を解説します。
乱数生成機
Photo by Aidan Howe on Unsplash
乱数とは
先週、大学時代の友人で統計学者の佐藤が酒の席で言い放った。「世の中の『ランダム』の99%は、実はランダムじゃないんだぜ」
彼の言う通り——計算機科学、統計学、暗号学、シミュレーションなどで使われる「乱数」には深い世界がある。乱数とは予測不可能な数値系列のことだが、大きく分けて真の乱数と擬似乱数(疑似乱数)の2種類に分類される。この記事では、その基礎概念と生成アルゴリズム、実用的な応用を紐解いていく。
乱数の分類
真の乱数
放射性崩壊。大気ノイズ。量子もつれ。真の乱数は、そういう物理現象から生まれる。予測不可能、再現不能——まさに自然の気まぐれだ。計算機で真の乱数を得るには、専用のハードウェア(エントロピーソース)が必要になる。ソフトだけでは太刀打ちできない領域だ。
擬似乱数
一方、こちらは数学のおもちゃ箱。アルゴリズムを使って数値をでっち上げる。シード(初期値)が同じなら、同じ数列が繰り返される——だから再現可能だ。コンピュータの世界で「乱数」と言えば、99%はこちらの擬似乱数だ。
Mersenne Twister
概要
1997年、松本典彦と西村拓男という2人の日本人が革命を起こした。Mersenne Twister——この名を聞いたことがあるだろうか。高品質で超高速、まさに乱数界のドリームマシン。現在最も広く使われるアルゴリズムの一つだ。
特徴
数字を見れば、その凄みがわかる。
- 周期: $2^{19937} - 1$(メルセンヌ素数)——宇宙の年齢より長い
- 等価分布: 623次元まで一様に分布
- 計算速度: 超高速
- シード: 32ビット整数
基本原理
線形合同法を進化させた手法で、内部に623個の32ビット整数の「状態」を持つ。この塊を捏ね回すようにして乱数を生成する——まるで巨大なサイコロを振り続けるようなものだ。
乱数分布
一様分布
最もシンプルで基本的な形だ。指定範囲内の全数値が「公平」に生まれる。サイコロを振るようなもの——出目に好き嫌いはない。
$$P(x) = \frac{1}{b-a} \quad (a \leq x \leq b)$$
正規分布
ベルカーブ。釣鐘型。平均値の近くがダントツで出やすい。人間の身長やテストの点数——自然界の多くの現象はこの分布に従う。いわば「標準装備」の分布だ。
$$P(x) = \frac{1}{\sigma\sqrt{2\pi}} e^{-\frac{(x-\mu)^2}{2\sigma^2}}$$
指数分布
「次の地震はいつ?」「故障までの時間は?」——待ち時間を扱う分布だ。時間が経てば経つほど確率は指数的に減っていく。
$$P(x) = \lambda e^{-\lambda x} \quad (x \geq 0)$$
実用的アプリケーション
シミュレーション
モンテカルロ法では乱数で複雑な確率現象をモデル化する。金融市場の暴落、台風の進路、感染症の拡大——現実をコピーするための魔法の砂だ。
ゲーム開発
敵の出現パターン、宝箱の中身、ダンジョンの自動生成。乱数がなければ、ひとつとして同じゲーム体験は生まれない。良い乱数は良いゲームの隠れた主役だ。
暗号学
パスワードの生成。暗号鍵の作成。セッショントークン——これらに「弱い乱数」を使うのは、宝箱の鍵をガムテープで閉じるようなもの。暗号用途には真の乱数か、暗号学的に安全な擬似乱数が必須だ。
まとめ
乱数生成機は数学と計算機科学の要だ。Mersenne Twisterを筆頭とする擬似乱数アルゴリズムは、あらゆるアプリケーションで水面下で活躍している。「ランダム」の正体を知れば、世界の見え方が変わる——佐藤の言葉は真実だったのだ。