擬似乱数列



Random Number Generator(RNG)はシミュレーション作業で頻用する。Rでは、Mersenne-Twisterによる擬似乱数列発生をデフォルトに、その他いくつかのRNGからの擬似乱数発生が可能となっている。ここでは、擬似乱数列発生にまつわる、ごくごく基礎的なことをメモ書きする。

  • RNGは、予測可能な数列を発生させる場合と、予測不能な数列を発生させる場合とがある。
  • もちろん、どちらの場合もみかけは「予測不能(=ランダム)である。
  • 予測可能な数列の発生は、シミュレーションに用いる。これは、なぜかと言うと、シミュレーションでは、乱数列がほしいけれども、シミュレーションの試行の再現性を確認する必要があるため、いつでも同じ乱数列を発生しなおすことができなければいけないからである。
  • 他方、暗号化作業などに用いる乱数列については、『解読されないこと』が至上命題であるから、容易に再現できてしまったのでは意味がない。
  • 前者、「再現性を確保した擬似乱数列」の発生方法として、linear RNGs と呼ばれる擬似乱数列発生方法のグループがある。Mersenne-Twister,乗算合同法,Knuth-TAOCP,Kunuth-TACOP-2002はいずれもこちらの群に属する。この群は、非常に長い擬似乱数列を高速に発生することができるのが現状である。
  • 後者、「再現性を持たないような乱数列」の発生方法としては、non-linear RNGsと分類される方法があるが、こちらは、linear RNGsに比べ、その乱数列の発生速度において、大いに見劣りするのが現状である。参考->Random Number Generators - the pLab project - Generators
  • ちなみに、再現性のある擬似乱数列、とはどういうことか、というのをRでMersenne-Twisterを用いて0-1の一様乱数を発生させた結果を以下で例示する。