10

シミュレーションで乱数を生成するために、シーケンシャルシード(1、2、3、4、...)を使用しています。シードが互いに近くにあるという事実は、生成された疑似乱数も同様にしますか?

何も変わらないと思いますが、Pythonを使っています

編集:私はいくつかのテストを行いましたが、数字は似ていません。ただ、数字を見ただけでは類似性に気付かないのではないかと思います。異なるシードが完全に独立した疑似乱数を与えることを保証する乱数生成の理論的特徴はありますか?

4

6 に答える 6

3

定義上、シードと生成された乱数の間には間違いなく相関関係があります。問題は、ランダム化アルゴリズムが無相関に見える結果を生成するのに十分であるかどうかです。その質問に答えるには、ランダム性を評価する方法を検討する必要があります。

しかし、あなたは心配するのは正しいです。randシード値が0から9のMicrosoftのC++関数の結果は次のとおりです。

   38  7719 21238  2437  8855 11797  8365 32285 10450 30612
   41 18467  6334 26500 19169 15724 11478 29358 26962 24464
   45 29216 24198 17795 29484 19650 14590 26431 10705 18316
   48  7196  9294  9091  7031 23577 17702 23503 27217 12168
   51 17945 27159   386 17345 27504 20815 20576 10960  6020
   54 28693 12255 24449 27660 31430 23927 17649 27472 32640
   58  6673 30119 15745  5206  2589 27040 14722 11216 26492
   61 17422 15215  7040 15521  6516 30152 11794 27727 20344
   64 28170   311 31103 25835 10443   497  8867 11471 14195
   68  6151 18175 22398  3382 14369  3609  5940 27982  8047
于 2012-06-05T20:42:38.927 に答える
1

複数のシミュレーションにシーケンシャルシードを使用した場合に、メルセンヌツイスターから生成されたランダム数に測定可能な、しかし小さい相関関係があることがわかりました。その結果は平均化されて最終結果が得られます。Linux上のPythonでは、random.SystemRandom()を介してシステムランダム関数(非疑似乱数)によって生成されたシードを使用すると、相関関係がなくなります。SystemRandom番号をファイルに保存し、シミュレーションでシードが必要になったときにそれらを読み取ります。シードを生成するには:

import random
myrandom = random.SystemRandom
x = myrandom.random       # yields a number in [0,1)
dump x out to file...

その後、シードが必要な場合

import random
read x from file...
newseed = int(x*(2**31))  # produce a 32 bit integer
random.seed(newseed)
nextran = random.random()
nextran = random.random()...
于 2016-07-20T13:01:24.720 に答える
0

まず、類似性を定義します。次へ:類似性テストをコーディングします。次に、類似性を確認します。

類似性の漠然とした説明だけでは、それをチェックするのは難しいです。

于 2012-06-05T16:48:16.030 に答える
0

どんなシミュレーションをしていますか?

シミュレーションの目的では、引数は有効です(シミュレーションのタイプによって異なります)が、シミュレーション以外の環境で実装する場合、生成されたランダムな数値に基づいて環境のセキュリティ上の懸念がある必要がある場合は、簡単にハッキングされる可能性があります。

機械が社会に有害であるかどうかにかかわらず、機械の結果をシミュレートしている場合、その結果は受け入れられません。それは可能な限りあらゆる方法で最大のランダム性を必要とし、私はあなたの推論を決して信用しません。

于 2012-06-05T20:23:38.827 に答える
0

ランダムモジュールからドキュメントを引用するには:

基礎となるメルセンヌツイスターコアジェネレーターに関する一般的な注意事項:

  • 期間は2**19937-1です。
  • これは、現存する中で最も広範囲にテストされたジェネレーターの1つです。

RNGが十分にランダムでないよりも、コードが壊れていることを心配します。一般に、ランダム性についてのあなたの腸の感情は間違っているでしょう-人間の心は、パターンが存在しなくても、パターンを見つけるのが本当に得意です。

ランダムシードがないために結果が「安全」にならないことがわかっている限り、問題はありません。

于 2012-06-05T21:20:28.547 に答える
0

シーケンシャルシードが心配な場合は、シーケンシャルシードを使用しないでください。既知のシードを使用してマスターRNGをセットアップし、そのマスターRNGから連続して出力を取得して、必要に応じてさまざまな子RNGをシードします。

マスターRNGの初期シードがわかっているため、必要に応じて、シミュレーション全体を以前とまったく同じように再実行できます。

masterSeed <- 42
masterRNG <- new Random(masterSeed)

childRNGs[] <- array of child RNGs

foreach childRNG in childRNGs
   childRNG.setSeed(masterRNG.next())
endforeach
于 2012-06-06T11:45:26.153 に答える