2009-05-03 5 views
17

a) В этом случае генератор случайных чисел использует часы системы (делая изменение семян) при каждом запуске?Случайное Python: Что произойдет, если я не использую семя (someValue)?

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

ответ

17

"Использование источника, Люк!" ... ;-). Изучение http://svn.python.org/view/python/trunk/Lib/random.py?revision=68378&view=markup быстро успокоит вас ;-).

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

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 

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

+0

ссылка мертва :( –

6

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

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

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

2

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

Random Docs

Смежные вопросы