1996年に国際会議で発表されたもので(1998年1月に論文掲載)松本眞と西村拓士による。ある多くの欠点が無く、高品質の疑似乱数列を高速に生成できる。考案者らによる実装が修正BSDライセンスで公開されている。外部リンク特徴[編集]「メルセンヌ・ツイスタ」は厳密にはある手法に基づいた乱数列生成式(あるいは生成法)の族を指し、内部状態の大きさや周期は設定可能である。以下の長所と短所では、メルセンヌ・ツイスタ自体、よく使われている生成法のMT19937、さらにその実装について、区別することなく述べている。いう長い周期が証明されている。メルセンヌ素数であり、保証されているいくつかの特徴はメルセンヌ素数を内部的に使用していることによって達成されている。実際上、これ以上の長い周期の擬似乱数を使用する理由はない。高次元(623次元)に均等分布する(線形合同法#短所参照)。このことは出力中の連続する値間の相関性が無視できる程度しかないということを意味する。32bit版のメルセンヌ・ツイスタを複数回呼び出して64bit、128bitなどの疑似乱数として利用しても統計的に安全である。統計的に不適当な疑似乱数しか生成しない擬似乱数生成器を除けば、あらゆる擬似乱数生成法の中でもっとも速い(当時)。近年、統計的な問題が少なく、メルセンヌ・ツイスタよりも高速な疑似乱数生成器がいくつか考案されている。疑似乱数の生成速度を優先する場合は、これらの生成器が役に立つ可能性がある。メルセンヌ・ツイスタの利点は、長周期性と均等性、および既に広範に使われテストされていることである(ただしCPUごとに最適化されたコードであれば、現時点でもメルセンヌ・ツイスタは十分に速い[要出典])。出力の中のすべてのビットが統計的に十分ランダムである。メルセンヌ・ツイスタの前身GFSRはそうではなかった。Register)をひねって(Twisted)調律した(Tempered)もの(略してTTGFSR)となる(実際に、元はそのように呼んでいた)。GFSRではワード中の各ビットは独立していたが、「ひねる」ことによって各ビットの周期が合わさって長い周期を実現できるようになっている。「調律」は生成された疑似乱数のワードのうち数ビットだけを取り出したときの高次元超立方体への均等分布を改良して理論値に近づけるための工夫である(メルセンヌ・ツイスタは「調律」がなくても623次元超立方体に均等分布する)。ここまでは先行するTT800と同様であるが、メルセンヌ・ツイスタでは、状態空間が長方形から1ビットだけ突き出した(あるいは31ビット欠けた)形をしている点に特徴がある。これは19937÷32が623余り1であることによる。このような状態空間をとることによって219937-1という周期を実現している。短所[編集]多くのアプリケーションにとって、メルセンヌ・ツイスタは優れた疑似乱数生成法である。メルセンヌ・ツイスタは線形漸化式によって生成されるため、他の一般の疑似乱数生成法と同様に予測可能である。従って暗号用途で利用するには同様に、暗号学的ハッシュ関数のような非可逆な操作を通さなければならない。CryptMTやFubukiはメルセンヌ・ツイスタをベースとしているが、単純にその出力を鍵ストリームとして平文と合成しているわけではない。内部ベクトルが大きいメルセンヌ・ツイスタは内部に623個の32ビット長の状態ベクトルを持つ。一般的な疑似乱数生成器と比較して動作に必要なメモリ量(ワーキングメモリ)が大きい。開発者による実装では32bit版で624ワード=2496バイトのワーキングメモリを要する。第三者による高速化を狙った実装(並列計算を行うなど)は、より多くのワーキングメモリを要する(例えば倍の4992バイトなど)。内部ベクトルを初期化するシード(乱数種)として19936ビットという長い乱数が必要となるため、シードや物理乱数を擬似乱数や暗号学的ハッシュ関数で伸長し、場合によってはさらにシードや物理乱数でベクトルを撹拌することでこの問題と後述する0の量を解決する必要がある。(当然であるが)メルセンヌ・ツイスタを初期化する擬似乱数にメルセンヌ・ツイスタを用いることはできない。初期化に使用するメルセンヌ・ツイスタを初期化する長いベクトルが用意できないからである。開発者が公開しているコードでは、単一の32ビット値からなるシードを用いた別の擬似乱数による初期化処理と、固定値で初期化したベクトルを任意個数の32ビット値からなる初期化鍵で撹拌する初期化処理が実装されている。短い乱数や時刻情報を元に初期化したメルセンヌ・ツイスタはその出力を調べる事でシードを推測できる可能性が指摘されている[1]など、初期化に使用する情報量が少ない場合、問題が生じる場合がある。メルセンヌ・ツイスタ以前の「良い」疑似乱数生成器はさらに大きなワーキングメモリを必要とするものがあるため、メルセンヌ・ツイスタは比較的効率が高いと言える。初期状態空間に0が多いと、しばらくの間出力にも0が多くなる。これは線形フィードバックシフトレジスタに共通する問題点である。この原因は、大きな配列の数箇所を参照して1箇所を書き換えるため、全体を書き換えるのに時間がかかることと、状態遷移関数が線形であるために、参照した数箇所が全て0の場合、出力も0になるためである。初期化処理で、状態空間に0が多くならないようにすればよい。考案者らが提供している実装では、初期化に内部状態空間の小さな擬似乱数生成系を利用しているので(その小ささゆえに、全て0といったような列は生成し得ないので)これは問題とならない。独自の初期化処理を使用する場合には問題が発生する可能性がある。この問題に関する改善をした疑似乱数生成器にWELLなどがある。各種プログラミング言語におけるライブラリ[編集]一部のプログラミング言語では、デフォルトの疑似乱数生成器としてメルセンヌ・ツイスタが標準ライブラリに取り入れられている。いう名前であったが、ドナルド・クヌースに「名前が長すぎる」と言われたため、現在の名前に変更した。開発者の名前「まこと」と「たくじ」のイニシャルという意味もこめられている。動画の質疑応答部分を参照。2008年10月19日時点のオリジナルよりアーカイブ。2008年10月17日閲覧。2012年5月29日閲覧。2012年5月29日閲覧。2012年5月29日閲覧。2012年5月29日閲覧。2012年5月29日閲覧。2012年9月25日閲覧。メルセンヌ・ツイスタの実装を含んでいる。フリーの統計解析向けプログラミング言語。デフォルトの疑似乱数生成器がメルセンヌ・ツイスタである。その他の多様な疑似乱数生成器も標準で備える。ライブラリリポジトリの「CRAN」から、さらに多くの疑似乱数生成器をダウンロードすることもできる。マルチプラットフォームに対応している。C++標準ライブラリの<random>では、MT19937が擬似乱数生成器として実装される。上位ビットの高次元均等分布性が完全に最適化された64ビットメルセンヌ・ツイスタ型擬似乱数発生器が開発されている。(日時は個人設定で未設定ならばUTC)。表示-継承ライセンスの下で利用可能です。追加の条件が適用される場合があります。詳細は利用規約を参照してください。Cookieに関する声明モバイルビュ。