2009-07-20 5 views
4

В django я использую random.random(). Как часто мне приходится звонить random.seed()? Один раз для каждого запроса? Один раз на каждый сезон? Один раз во время работы веб-сервера?Посевной случайный случай django

+0

Связано с http://stackoverflow.com/questions/203382/do-stateless-random-number-generators-exist, http://stackoverflow.com/questions/1108780/why-do-i-always-get -последовательно-случайные числа-с-rand, http://stackoverflow.com/questions/976993/issues-with-seeding-a-pseudo-random-number-generator-more-than-once –

ответ

3

Звоните random.seed() редко если вообще.

Чтобы быть случайным, вы должны разрешить запуск генератора случайных чисел, не касаясь семени. Последовательность чисел является случайной. Если вы измените семя, вы начнете новую последовательность. Значения семян могут быть не очень случайными, что приводит к проблемам.

В зависимости от того, сколько цифр вам нужно, вы можете периодически переустанавливать семя от /dev/random.

Вы должны попытаться сбросить семена непосредственно перед тем, как вы использовали предыдущее семя. Вы не получаете полные 32 бит случайности, поэтому вы можете сбросить семя после генерации 2 ** 28 чисел.

0

Это действительно зависит от того, для чего вам нужно случайное число. Используйте некоторые эксперименты, чтобы узнать, не имеет значения. Вы также должны учитывать, что на самом деле существует шаблон для псевдослучайных чисел. Имеет ли это значение для вас, если кто-то может догадаться о следующем случайном числе? Если нет, запустите его один раз в начале сеанса или при первом запуске сервера.

Посев один раз в начале сессии, вероятно, имеет наибольший смысл, ИМО. Таким образом, пользователь получит набор псевдослучайных чисел на протяжении всего сеанса. Если вы посеяли каждый раз, когда страница обслуживалась, это не гарантируется.

+1

Не тратьте много времени на экспериментирование. Изменение семени приводит к смещению. Если вам действительно повезло, ваши семена кажутся случайными для нескольких десятков тестов, которые вы хотите запустить. Если у вас нет чего-то волшебного, установка семян беспорядочно не будет ужасно случайной. –

3

Не устанавливайте семена.

Единственный раз, когда вы хотите установить семена, - это если вы хотите убедиться, что одни и те же события продолжаются. Например, если вы не хотите, чтобы игроки обманывали вашу игру, вы можете сохранить семя, а затем установить его, когда они загружают свою игру. Затем, независимо от того, сколько раз они сохраняют + перезагрузку, он все равно дает те же результаты.

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