Я мог бы скопировать случайный объект в каждый эксперимент и сделать больше, чем прыгун в 50.000 * expid.
Примерно правильно. Каждый поток получает свой собственный экземпляр Random
.
Посеять их все на одно и то же значение. Используйте константу для тестирования, используйте / dev / random, когда вы «запустите запись».
Редактировать . Вне Python и в более старых реализациях используйте jumpahead( 50000 * expid )
, чтобы избежать ситуации, когда два генератора сталкиваются с параллельными последовательностями значений. В любом достаточно текущем (после 2.3) Python jumpahead
больше не является линейным, и для шифрования состояния достаточно использовать expid
.
Вы не можете просто сделать jumpahead(1)
в каждом потоке, так как это обеспечит их синхронизацию. Используйте jumpahead( expid )
, чтобы убедиться, что каждая нить явно зашифрована.
Документация предполагает, что jumpahead (1) уже шифрует состояние, но так ли это на самом деле?
Да, прыгун действительно "вскарабкается" на государство. Напомним, что для данного семени вы получаете одну - длинную - но фиксированную последовательность псевдослучайных чисел. Вы прыгаете вперед в этой последовательности. Чтобы пройти тесты случайности, вы должны получить все свои значения из этой последовательности one .
Редактировать . Когда-то прыжок (1) был ограничен. Теперь jumpahead (1) действительно делает большее шифрование. Скремблирование, однако, является детерминированным. Вы не можете просто сделать jumpahead(1)
в каждой теме.
Если у вас есть несколько генераторов с разными семенами, вы нарушаете предположение «одна последовательность из одного семени», и ваши числа не будут такими случайными, как если бы вы получали их из одной последовательности.
Если у вас только парашютист 1, вы можете получить параллельные последовательности, которые могут быть похожими. [Это сходство не может быть обнаружено; теоретически , есть сходство.]
Когда вы прыгаете вперед 50 000, вы гарантируете, что вы следуете посылке 1-sequence-1-seed. Вы также гарантируете, что в двух экспериментах у вас не будет смежных последовательностей чисел.
Наконец, у вас также есть повторяемость. Для данного семени вы получаете последовательные результаты.
Тот же прыгун: Не хорошо.
>>> y=random.Random( 1 )
>>> z=random.Random( 1 )
>>> y.jumpahead(1)
>>> z.jumpahead(1)
>>> [ y.random() for i in range(5) ]
[0.99510321786951772, 0.92436920169905545, 0.21932404923057958, 0.20867489035315723, 0.91525579001682567]
>>> [ z.random() for i in range(5) ]
[0.99510321786951772, 0.92436920169905545, 0.21932404923057958, 0.20867489035315723, 0.91525579001682567]