a) この場合、乱数発生器は実行ごとにシステムのクロックを使用しますか (シードを変更しますか?)
b) expovariate(ラムダ)の疑似ランダム値を生成するためにシードが使用されていますか?
「ソースを使って、ルーク!」...;-)。https://svn.python.org/projects/python/trunk/Lib/random.pyを勉強すると、すぐに安心できます;-)。
シードが設定されていない場合はどうなりますか(「iはなし」の場合):
if a is None:
try:
a = long(_hexlify(_urandom(16)), 16)
except NotImplementedError:
import time
a = long(time.time() * 256) # use fractional seconds
およびexpovariate:
random = self.random
u = random()
while u <= 1e-7:
u = random()
return -_log(u)/lambd
明らかに、他のすべての方法と同じ基本的なランダムジェネレーターを使用しているため、シードまたはその欠如によって同じように影響を受けます(実際、他にどのように行われたでしょうか?-)
a)通常はシステムクロックを使用します。一部のシステムのクロックの精度はmsしかないため、シードを2回非常に速くすると、同じ値になる可能性があります。
seed(self、a = None)ハッシュ可能なオブジェクトから内部状態を初期化します。
None or no argument seeds from current time or from an operating system specific randomness source if available.
b)expovariateはそうだと思いますが、証拠が見つかりません。そうでなければばかげているでしょう。
現在のシステム時刻が使用されます。現在のシステム時刻は、モジュールが最初にインポートされたときにジェネレータを初期化するためにも使用されます。ランダム性ソースがオペレーティングシステムによって提供される場合、システム時間の代わりにそれらが使用されます(可用性の詳細については、os.urandom()関数を参照してください)。