Martijn の答えは、Python がアクセスできる乱数ジェネレーターのかなり簡潔なレビューです。
生成された疑似乱数データの特性を調べたい場合は、http://www.fourmilab.ch/random/random.zip
からダウンロードして、乱数データの大きなサンプルで実行してください。特に χ² (カイ 2 乗) 検定はランダム性に非常に敏感です。シーケンスが本当にランダムであるためには、χ² 検定のパーセンテージが 10% から 90% の間でなければなりません。
ゲームの場合、Python が内部的に使用する Mersenne Twister は十分にランダムであるべきだと思います (オンライン カジノを構築している場合を除きます :-)。
純粋なランダム性が必要で、Linux を使用している場合は、/dev/random
. これは、カーネルのエントロピー プール (割り込みが到着する予測不可能な時間から収集される) からランダム データのみを生成するため、それを使い果たすとブロックされます。このエントロピーは、によって使用される PRNG を初期化 (シード) するために使用され/dev/urandom
ます。FreeBSD では、データを提供する PRNG/dev/random
は、一般に暗号学的に安全であると見なされている Yarrow アルゴリズムを使用します。
編集:からのバイトでいくつかのテストを実行しましたrandom.randint
。最初に 100 万バイトのランダムなバイトを作成します。
import random
ba = bytearray([random.randint(0,255) for n in xrange(1000000)])
with open('randint.dat', 'w+') as f:
f.write(ba)
次に、 Fourmilabent
のプログラムを実行しました。
Entropy = 7.999840 bits per byte.
Optimum compression would reduce the size
of this 1000000 byte file by 0 percent.
Chi square distribution for 1000000 samples is 221.87, and randomly
would exceed this value 93.40 percent of the times.
Arithmetic mean value of data bytes is 127.5136 (127.5 = random).
Monte Carlo value for Pi is 3.139644559 (error 0.06 percent).
Serial correlation coefficient is -0.000931 (totally uncorrelated = 0.0).
χ² 検定では、50% から離れるほど、データの疑わしさが増します。非常にうるさい場合、<10% または >90% の値は受け入れられないと見なされます。の著者であるジョン・ウォーカーは、ent
この値を「ほぼ疑わしい」と呼んでいます。
対照的に、以前に実行した FreeBSD の Yarrow prng からの 10 MiB の同じ分析を次に示します。
Entropy = 7.999982 bits per byte.
Optimum compression would reduce the size
of this 10485760 byte file by 0 percent.
Chi square distribution for 10485760 samples is 259.03, and randomly
would exceed this value 41.80 percent of the times.
Arithmetic mean value of data bytes is 127.5116 (127.5 = random).
Monte Carlo value for Pi is 3.139877754 (error 0.05 percent).
Serial correlation coefficient is -0.000296 (totally uncorrelated = 0.0).
他のデータにはあまり違いがないように見えますが、χ² の割合は50% にかなり近くなっています。