13. 乱数

はじめに

ランダムな値をとる数列を乱数といい, 例えば, 無作為にサンプルを選ぶような場合に使われる. 数値計算の分野で乱数が必要になる例としては, モンテカルロ法, 確率的現象のシミュレーションなどがあげられる.

乱数を生成する方法としては, ランダムな値をとる物理現象の観測値を利用したり, そのような値をあらかじめ記録 (乱数表という) しておいて使ったりする方法が考えられるが, ここではコンピュータで乱数を生成する方法について説明する.

コンピュータで生成するとは, あるアルゴリズムに基づいたプログラムを使って乱数を得るということなので, 完全にはランダムではなく何らかの規則性を持つ. そのため, (本物の) 乱数と区別したい場合にはこれを疑似乱数と呼ぶ. 以下, 文脈から明らかな場合には単に乱数と記すことにする.

コンピュータで生成する乱数の利点は, 必要なときにいつでも生成することができ, 結果を検証したいときに完全に再現することができることである.

乱数を生成するといっても, どのようなものを生成するかであるが, 無作為な決定を行うためという意味ではある区間上で一様分布に従う乱数が基本と考えられる.

一様分布以外の分布に従う乱数が必要な場合, まず一様乱数を生成し, それを必要な分布の乱数に変換するのが一般的である.

目次

13.1 一様乱数
13.2 種々の分布に従う乱数 (未完)


注 – 本章で説明する疑似乱数は暗号用の乱数としては不向きであり, それについては別の視点からの検討が必要である.


本章の参考文献

[1] D. E. Knuth, “The Art of Computer Programming Third Edition, Vol. 2 / Seminumerical Algorithms”, Addison Wesley Longman (1998)
邦訳: D. E. Knuth 「The Art of Computer Programming Volume 2 Seminumerical Algorithms Third Edition 日本語版」アスキードワンゴ (2015)
[2] M. Matsumoto and T. Nishimura, “Mersenne twister: A 623-dimensionally equidistributed uniform pseudorandom number generator”, ACM Trans. on Modeling and Computer Simulations (1998)
[4] Mersenne Twister Home Page: http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/mt.html