私は、0から1までの乱数を生成することが想定されているプログラムであるmatlabで作成しました。これは、matlabのrunstestでのみテストした結果、シーケンスはランダムです。ヒストグラムも見ましたが、ベータ分布になっています。このrngを、diehard、ent、nistなどの他のテストでテストしたいのですが、方法がわかりません。誰かがそれらの使用方法を説明したり、他のランダム性検定を提案したりできますか。ありがとうございました
9 に答える
ほとんどのテストでは、乱数 (整数または浮動小数点) の大きなファイルを提供し、そのサンプル ファイルに対してさまざまなテストを実行できます。私の記憶が正しければ、DIEHARD はそのように機能しました。ジェネレーターの失敗を本当に見たい場合は、Pierre L'Ecuyer によるTestU01を使用してみてください。これには、ほぼすべてのジェネレーターが少なくとも 1 つのテストに失敗するのに十分なテストが含まれています :-)
それでも、ほとんどのテスト スイートには広範なドキュメントがあります。少なくとも、 NIST SP 800-22のテスト スイートであるDIEHARD と、DieHarderおよびTestU01についてはこれを知っています(リンクはドキュメントに移動します)。テストする乱数を提供する方法は通常異なりますが、それぞれのドキュメントに記載されています。
RNG を自分でテストしたい場合、テストすべきことがたくさんあります。あなたの数列が真にランダムではない、またはランダムと区別がつかないことを明らかにする可能性のあるいくつかの基本的な機能は次のとおりです?
を見てみましょう:
ディストリビューション- ディストリビューションについては、すでにいくつかの分析を行っています。可能な各数値が同じ確率で発生するようにします。
周期的な動作- 同じシーケンスが何度も繰り返されますか? 反復シーケンスは非常に長くなる場合があります。
重複の発生 (...CBBAF F...) 、トリプレット (...CBAAA F...) など。 統計的に、一連の乱数では、重複する可能性があります (同じ数字が連続して 2 回生成される)。 )、トリプレットなど。この確率を計算し、疑似乱数のシーケンスが重複する確率が同じかどうかを確認しますか?
これらのテストのほとんどでは、統計分析から適切で正確な結果を得るために、非常に長い乱数列が必要になることに注意してください。
[0, 1] の数値に適切な定数を掛けることで簡単に修正できる、整数の疑似乱数シーケンスを仮定しました。
私は実際に同様のテストを探しています。ここでそれを見つけることを望んでいましたが、見つかりませんでした。答えは統計的なものなので、おそらくmath.stackoverflow.comを試してみます。
私の統計知識は、正確な詳細を提供することができなくても、あなたが探しているものを知るのに十分適度です。
基本的に、数値が一様分布に準拠しているかどうかについて回帰テストを実行しています。したがって、カイ2乗モデルを作成できます(私は思います)。これにより、t統計量とp値が取得されます。より高いt統計量とより低いp値は、それが分布に適合しないことを意味します(したがって、帰無仮説を棄却します)。p値は0から1の間になります。0.06の場合、94%の信頼度で帰無仮説を棄却できます。
そして、「乱数を作成するべきではない」と言っている人に答えるために、実際の乱数ではないかもしれませんが、データを取得して、それが均一な分布に適合するかどうかをテストしたい場合があります。プログラマーの場合は、ハッシュかどうかをテストしたい場合があります。 -functionは、ハッシュしているオブジェクトの多数のランダムインスタンス全体に均一な分布を生成します。
NISTテスト用のコードについては、次のようなものがあります。
http://sourceforge.net/projects/randomanalysis/
それはあなたが望むものをあなたに与えるかもしれません。
私は昨年、この問題を検討してきましたが、現実の世界でランダム性をテストする標準的な方法はないという結論に達しました。それだけで快適に過ごせると思います。シーケンスがランダムであることを証明することはできず、シーケンスがランダムではないことを簡単に証明することはできません。
(0123456789 のように、本当にランダムではないランダムなシーケンスを除外しています...繰り返します。)
user3535668 には、いくつかの広く知られているテストと、それらの問題の完全なリストがリストされています。他にも追加できます。Diehard - 入力ファイルの大きさはどのくらいですか?また、32 ビット整数のみで構成する必要がありますか? 耳鼻咽喉科 - 全体的なエラーにのみ適しているように見えますが、カイ検定は便利です。NIST のユーザー マニュアルは 100 ページを超えています - 頑張ってください。TestU01 - 同じコンパイルの問題。そして、それをコンピュータに押し込んだら、正しく動作していますか? どうすれば出力を信頼できますか? また、テストが失敗したかどうかをどのように知ることができますか? 極端すぎると見なされる p または KS のレベルは?
さらに、現実の政治に照らして、ランダム性テスト スイートの開発を検討する必要があることを付け加えておきます。乱数発生器の信用を傷つけるテストを開発することは、学者の自己利益になります。結局のところ、「大丈夫だ、何も見つからない、それ以上の調査は必要ない」という結果を生み出す資金は得られません。
読者はこの前提に同意しないでしょうが、学者の本棚ではなく、私たちが住んでいる現実の世界で何が起こるかを考えてみることをお勧めします。標準テストはありません。検討:-
Random.org - 学部生を使用して、論文の自作テストを実施しました。そして基本的に1と0の数を数えます。耳鼻咽喉科も同様です。
Hotbits - 単純化された ENT と、ほとんどの人が実行するのが難しいハッキングされたバージョンの Dieharder を擁護します。
アカデミック ジェネレーターの論文 - クヌースの著書と手作りの技法に大いに頼っています。上記のツールの一部を使用する人もいます。その後、それらのスイート内で多くのテストの失敗を受け入れる人もいます。
私がこれまでにこの男の世界で見つけた唯一の例は、本当の重みを持っているようです (つまり、失敗した場合は刑務所タイプの体重になります) は、英国のギャンブル ソフトウェアのサプライヤーである Playtech PLC の認定です。彼らは、実際のお金が変わる最大のオンライン賭博会社のいくつかを提供しています. それでも、自作テストとダイハード テストを使用します。
私は個人的に好きです:-
- 対象ファイルをビットマップに変換して表示する
- Ultra設定で7zで圧縮して、それがさらに小さくなるかどうかを確認します
- ダイハードで実行して、愚かな ps と KS を探してください。
ファイルが私の個人的な 1 ~ 3 に合格した場合、そうでないことを証明するのは難しいと思います。私には、どの出発点よりも良いように思えます...
私がおそらく行くルートは、結果の視覚的分析を行うことでしょう。このためのコードは、この記事に基づく次の疑似コードに示すように、十分に単純です。
1.サイズxxyの画像を作成します 2. ndx=0からxの場合 3. ndy=0からyの場合 4.0と1の間の乱数をrandomとします。 5.ランダム=1の場合、画像ポイントをndx、ndyを黒に設定します 6.生成された画像を表示します
また、Random.orgにはアルゴリズムの統計分析に関する詳細情報がありますが、視覚分析の例として前述の記事も使用しています。
結果を特定の範囲に限定し(おそらくmod演算子を使用して)、コードを数百万回実行し、範囲内の各数値が表示される回数を数えます。カウントがほぼ同じであること、および特定の値に偏りがないことを確認してください。
@Anna私はあなたと同じ質問をしましたが、他のいくつかの回答のおかげでDiehardを発見しました。
私の RNG の状況は、1 と 0 を作成し、それらを ASCII ファイルに保存することです。このファイルをオンラインのランダム性テストにアップロードしようとしたところ、失敗しました。これはおそらく、データがバイナリ形式である必要があるためです。
そして、それは実際にダイハードの場合です。Diehard をインストールするとDIEHARD.DOC
、ASCII ファイルを必要なバイナリ ファイルに変換する手順を説明するファイルが見つかります (プログラムに必要なその他の変更もいくつかあります)。
とにかく、これらは私の最初のステップです。これが誰かに役立つことを願っています。