トップへ
田村研究室

コンピュータリテラシー2

Computer Literacy 2

2010
10/19

第5回

目標

  • 乱数とはなにか理解する
  • 待ち行列の考察

乱数

乱数とは

乱数とはサイコロをふった目を順番に記録した数列のように,完全にでたらめな「ランダムな」順番で発生する数値の列のことをいう.理想の乱数は完全にでたらめな順番であるため,確率的にしか扱うことができない.多くの自然現象や社会現象はこの乱数のように確率的な要素を含む.例えば,先週の課題のように待ち行列において到着する客の時間間隔などは,現実世界では毎日毎日,場所場所によって異なり,たまたまそうなったとしか表現できない.

これに対してコンピュータでの計算は,プログラムによって計算順序や処理が完全に決定されており,入力する値が同じなら必ず同じ計算結果となる.そのコンピュータで,確率的な自然現象や社会現象を取り扱おうとする場合に,乱数を使用することになる.ただし,コンピュータでの計算は先に述べたように完全に決定的に行われるため,真の意味での乱数はプログラムによって発生させることはできない.プログラムによって生成される数列は,すべて再現可能である.(真の乱数は同じ数列を再現することがない)

コンピュータで真の乱数を発生させるには,別途ハードウェア装置として乱数発生器を接続する必要がある.乱数発生器には,宇宙線をカウントする装置や熱雑音(電器抵抗内の電子の不規則な熱振動によって生じる雑音)の音の大きさを数値として読み取る装置など,物理的な乱数を使用することが必要である.

コンピュータではそうした特別なハードウェアを使用せずに,乱数を真似た「疑似乱数」をプログラム的に生成して使用することが一般的である.シミュレーションに使用する場合には疑似乱数の方が同じ数列を使って別の条件でシミュレーションしなおすことができる点などを考えれば,同じ数列を再現できる疑似乱数の方に利点があるとも考えられる.

疑似乱数を生成するプログラムのアルゴリズムとしては,線形合同法やメルセンヌ・ツイスタなどと呼ばれる方法など様々なものが提案されて実際に利用されている.

Excelの乱数

Excelでは「=rand()」で疑似乱数を生成させることができる.Microsoft社のサポート情報によればExcel2003以降のバージョンでは新しい疑似乱数発生アルゴリズムが用いており,100万個以上の多量の乱数列を生成しても問題ないレベルの疑似乱数を発生させることができるとのこと.

rand()で発生される疑似乱数は,0から1の一様乱数である.一様乱数とは,サイコロを振ったときに1から6の目がそれぞれの出る確率のように,すべての事象の起こる確率が等しい分布となるような乱数である.excelでは一様乱数以外の発生させることができるような分析ツールないの乱数発生ツールがある.またrand()を用いていくつか別の分布にしたがう乱数を発生させることもできる.

  • 指数乱数: -n * ln(1-rand()) (nが平均値)
  • 正規乱数: rand()+rand()+rand()+rand()+rand()+rand()+rand()+rand()+rand()+rand()+rand()+rand()-6
一様乱数の確認

乱数が一様であるかどうか,もっとも簡単な確認方法は,乱数からヒストグラムを作成してみることである.一様ならば,どの階級も似たような度数を示すはずである.

OpenOfficeでは,ヒストグラムを自動作成するツールが存在しないが,FREQUENCY関数を使用して作成することができる.

  • まず,シートの中に階級の上限値を設定する.例: 1.5 3.0 4.5という列を用意,すると0-1.5, 1.5-3.0, 3.0-4,5という区間が設定
  • 階級の列の隣に=FREQUENCY(データ範囲,階級)としてSHIFT+ENTERを押して計算させる