Случайность Python: что произойдет, если я не буду использовать seed (someValue)? - PullRequest
17 голосов
/ 03 мая 2009

а) В этом случае генератор случайных чисел использует системные часы (производящие замену семян) при каждом запуске?

b) Используется ли начальное число для генерации псевдослучайных значений эксповариата (лямбда)?

Ответы [ 3 ]

17 голосов
/ 03 мая 2009

«Используй источник, Люк!» ... ;-). Обучение https://svn.python.org/projects/python/trunk/Lib/random.py быстро успокоит вас; -).

Что происходит, когда начальное число не задано (это случай «я есть None»):

if a is None:
    try:
        a = long(_hexlify(_urandom(16)), 16)
    except NotImplementedError:
        import time
        a = long(time.time() * 256) # use fractional seconds

и эксповариат:

random = self.random
u = random()
while u <= 1e-7:
    u = random()
return -_log(u)/lambd

, очевидно, использует тот же основной генератор случайных чисел, что и любой другой метод, и поэтому идентично зависит от заполнения или его отсутствия (действительно, как еще это было бы сделано?

6 голосов
/ 03 мая 2009

a) Как правило, он использует системные часы, часы в некоторых системах могут иметь только мс точность и поэтому очень быстрое начальное заполнение может привести к тому же значению.

семя (сам, а = нет) Инициализировать внутреннее состояние из объекта hashable.

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

б) Я бы предположил, что expovariate делает, но я не могу найти никаких доказательств. Было бы глупо, если бы этого не произошло.

2 голосов
/ 03 мая 2009

используется текущее системное время; текущее системное время также используется для инициализации генератора при первом импорте модуля. Если источники случайности предоставлены операционной системой, они используются вместо системного времени (подробности о доступности см. В функции os.urandom ()).

Случайные документы

...