Javaでメルセンヌ・ツイスタの擬似乱数を利用する

こんにちは。Javaプログラミングで乱数を制御する必要があったので、シンプルに導入できるメルセンヌ・ツイスタを探しました。



---

松本眞氏と西村拓士氏によるC言語版をDavid Beaumont氏がJavaに移植したものが都合よく、一つのソースコードをインポートするだけで実行できました。

コードはhttp://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/VERSIONS/JAVA/MTRandom.java で公開されています。

ライセンスはLGPLで、依存ライブラリは特にありません。

利用は簡単で、
net.goui.util.MTRandomをインポートして、インスタンス化(new MTRandom(seed))します。
あと、nextメソッドで乱数値を取り出すだけです。

---

1996年に国際会議で発表されたメルセンヌ・ツイスタ (Mersenne twister、通称MT) は、高速に高品質の擬似乱数列を生成するアルゴリズムです。

偏りが少ないので統計計算などのバックで動いています。

メルセンヌ・ツイスタの数列は、ビット演算と行列式の計算を利用した漸化式で作られます。

漸化式から求まるため、予測可能という欠点があるのですが、逆にいうとシード値と乱数呼び出しが同じ順なら、結果を再現できることになります。