よく均等に分布した長周期線形
WELL (Well Equidistributed Long-period Linear)は、 2006年にフランソワ・パネトン、ピエール・ルキュイエ、松本眞(Makoto Matsumoto )によって開発された擬似乱数生成器のファミリーです。[ 1 ]これは、 32ビットマシンでのソフトウェア実装に最適化された 線形フィードバックシフトレジスタの一種です。
運用設計
この構造はメルセンヌ・ツイスターに類似しており、これは以前の出力ワード(各32ビット)からなる大きな状態であり、そこから有限二進体上の2を法とする線形回帰を用いて新たな出力ワードを生成する。しかし、より複雑な回帰はより密な生成多項式を生成し、より優れた統計特性をもたらす。
ジェネレーターの各ステップでは、最も古い 32 ビット (状態サイズが 32 の倍数でない場合はワード境界にまたがる場合があります)、最新の 32 ビット、およびその間の 3 つのワードの合計 5 ワードの状態を読み取ります。
次に、一連の 8 つの単一ワード変換 (ほとんどが の形式)と 6 つの排他的論理和演算により、これらが 2 つのワードに結合され、最新の 2 つのワードの状態になり、そのうちの 1 つが出力になります。
変種
次のジェネレータには特定のパラメータが提供されています。
- ウェル512a
- ウェル521a、ウェル521b
- ウェル607a、ウェル607b
- WELL800a、WELL800b
- ウェル1024a、ウェル1024b
- WELL19937a、WELL19937b、WELL19937c
- ウェル21701a
- ウェル23209a、ウェル23209b
- WELL44497a、WELL44497b。
数字は状態のサイズをビット単位で示し、文字のサフィックスは同じサイズのバリエーションを示します。
実装
- WELL512a、WELL1024a、WELL19937a、WELL19937c、WELL44497a、WELL44497b の C 実装(非商用利用は無料)
- Scalaでの同じアルゴリズムの実装
- C++での実装
- WELL512、WELL1024、WELL607のJava実装
- BBC BASICにおけるWELL512、WELL1024の実装
- C言語でWELL19937、WELL44497の「最大均等分散」実装を修正(非商用利用は無料)
- WELL512 の C 実装(パブリック ドメイン)
参考文献
- ^ Panneton, François O.; l'Ecuyer, Pierre; Matsumoto, Makoto (2006年3月). 「2を法とする線形回帰に基づく改良型長周期ジェネレータ」(PDF) . ACM Transactions on Mathematical Software . 32 (1): 1– 16. CiteSeerX 10.1.1.73.5499 . doi : 10.1145/1132973.1132974 . S2CID 7368302 .