18

a) この場合、乱数発生器は実行ごとにシステムのクロックを使用しますか (シードを変更しますか?)

b) expovariate(ラムダ)の疑似ランダム値を生成するためにシードが使用されていますか?

4

3 に答える 3

17

「ソースを使って、ルーク!」...;-)。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

明らかに、他のすべての方法と同じ基本的なランダムジェネレーターを使用しているため、シードまたはその欠如によって同じように影響を受けます(実際、他にどのように行われたでしょうか?-)

于 2009-05-03T19:04:15.867 に答える
6

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.

http://pydoc.org/2.5.1/random.html#Random-seed

b)expovariateはそうだと思いますが、証拠が見つかりません。そうでなければばかげているでしょう。

于 2009-05-03T18:51:43.870 に答える
2

現在のシステム時刻が使用されます。現在のシステム時刻は、モジュールが最初にインポートされたときにジェネレータを初期化するためにも使用されます。ランダム性ソースがオペレーティングシステムによって提供される場合、システム時間の代わりにそれらが使用されます(可用性の詳細については、os.urandom()関数を参照してください)。

ランダムドキュメント

于 2009-05-03T18:52:06.833 に答える