テストU01

TestU01はANSI C言語で実装されたソフトウェアライブラリであり、乱数発生器(RNG)の実験的ランダム性テストのためのユーティリティのコレクションを提供しています。 [ 1 ]このライブラリは2007年にモントリオール大学 のピエール・ルキュイエとリチャード・シマールによって初めて導入されました。[ 2 ]

このライブラリは、文献で提案されているものや広く使用されているソフトウェアで使用されているものなど、様々な種類の乱数生成器を実装しています。乱数生成器に対する古典的な統計的検定の一般的な実装に加え、文献で提案されているものや独自の検定もいくつか提供しています。これらの検定は、ライブラリで定義済みの生成器、ユーザー定義の生成器、そしてファイルに保存された乱数ストリームに適用できます。 [0,1]の一様乱数列またはビット列を対象とした特定の検定スイートも利用可能です。生成器によって生成された点のベクトルをプロットするための基本的なツールも提供されています。

歴史

RNGのための初期のランダム性テスト群は、ドナルド・クヌース著『The Art of Computer Programming』の1969年初版で提案されました。クヌースのテストはその後、15種類の異なるテストからなるジョージ・マルサリアDiehardテスト(1996年)に取って代わられました。テストパラメータを変更したり新しいテストを追加したりできないという問題から、TestU01ライブラリが開発されました。

特徴

TestU01 は、RNG を分析するための 4 つのモジュール グループを提供します。

  1. (事前にプログラムされた)RNG を実装する。
  2. 特定の統計テストを実装する。
  3. 一連の統計的テストの実施。
  4. RNG ファミリ全体にテストを適用します。

RNGによって生成されたサイズnのサンプルに特定のテストを適用すると、サンプルサイズが増加しても、例えばn 0に達するまでは、テストのp値は通常、妥当な値を維持します。その後、p値は指数関数的に0または1に発散します。モジュール4では、研究者は特定のテストと、特定のRNGファミリーによって生成された点集合の構造との相互作用を研究できます。この手法は、ジェネレータの周期長の関数として、ジェネレータがテストに体系的に失敗するようになる前に、どの程度のサンプルサイズが必要かを決定するために使用できます。

TESTU01は、「Small Crush」(10個のテスト)、「Crush」(96個のテスト)、「Big Crush」(106個のテスト)など、複数のテストバッテリーを提供しています。各バッテリーで適用される具体的なテストについては、ユーザーガイドに記載されています。[ 3 ] 1.7GHz Pentium 4でRed Hat Linux 9.0を実行する場合、単純なRNGの場合、Small Crushは約2分、Crushは約1.7時間、Big Crushは約4時間かかります。より複雑なRNGの場合、これらの時間はすべて2倍以上に長くなります。比較のために、Diehardテストの実行時間は約15秒です。

制限事項

TestU01は32ビットの入力のみを受け付け、それらを[0, 1]の範囲の値として解釈します。そのため、最上位ビットの欠陥に対しては最下位ビットよりも敏感です。汎用ジェネレータは、下位ビットを使用するアプリケーションへの適合性を検証するために、ビット反転形式でテストすることが重要です。[ 4 ] : 4

64ビットの出力を生成するジェネレータでは、さらに上位半分と下位半分を個別にテストする必要があります。[ 5 ]:51

参照

参考文献