2015-04-20 2 views
0

Я знаю, что псевдослучайные генераторы должны быть детерминированными, т. Е. Когда используется одно и то же семя, они производят одну и ту же последовательность выходов. На практике это все верно только тогда, когда вы находитесь на одной платформе, то есть на том же оборудовании, ОС и т. Д.Псевдослучайные генераторы и зависимость от платформы

Я знаю, что в некоторых случаях, когда вы запускаете тот же код на разных платформах, вы могут получить разные ответы (как кратко указано здесь: How to generate a repeatable random number sequence?).

В качестве другого примера, эта статья изучает некоторые причины таких различий в контексте некоторых приложений нейро-визуализации: http://journal.frontiersin.org/article/10.3389/fninf.2015.00012/abstract

Мой вопрос заключается в том, есть ли вообще хорошо документированный объяснение этого явления. Любые другие указатели оцениваются.

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

+0

«На практике это все верно только тогда, когда вы находитесь на одной платформе, то есть на том же оборудовании, ОС и т. Д.» - Не уверен, что это полностью правильная догадка. Это будет зависеть от вашей общей среды - например, Java предоставит четко определенный PRNG (через spi-интерфейс поставщика), который будет правильно воспроизводиться на разных платформах и т. Д. – BadZen

+0

Итак, я предполагаю, что частичный ответ на вопрос «как эти ситуации могут быть avoided "- это выбор среды dev с четко определенной семантикой PRNG! – BadZen

+0

Спасибо, BadZen. Знаете ли вы, что ваше требование (о семантике Java PRNG четко определено) где-то документировано? – Mahdi

ответ

0

Вы в замешательстве. ППНГ являются, по определению, полностью детерминированными. Они не могут быть иначе, потому что они работают на детерминированном оборудовании. Тот же алгоритм, который работает на разных машинах, даст одинаковые результаты.

Машины и ОС отличаются главным образом тем, что используют разные алгоритмы или разные методы посева. Если вы хотите, чтобы PRNG был идентичен между машинами, просто напишите его сами, чтобы вы знали, что это одно и то же.

Существует также множество не-Pseudo RNG, которые используют или аппаратные устройства и другие источники энтропии, которые не являются детерминированными: к ним относятся такие вещи, как/dev/random, random.org и другие. Не используйте их, если хотите воспроизводимость. Используйте их, если хотите криптографическую безопасность.

+2

Как утверждает OP, он полностью знает, как PRNG работает по посеву. Если вы прочтете опубликованную им статью, вы увидите, что проблема связана с интерпретацией псевдослучайных потоков битов как чисел с плавающей запятой. Поскольку реализации с плавающей точкой сильно различаются на платформу, эти пакеты могут создавать невоспроизводимые результаты на разных платформах. – BadZen

+0

Как упоминалось в BadZen, я знаю идею PRNG. Дело в тех случаях, о которых я упоминал, даже одно и то же семя дает разные результаты на разных платформах. – Mahdi

+0

Это платформа или алгоритм? Я не знаю двух платформ, которые даже утверждают, что имеют один и тот же PRNG, за исключением тех случаев, когда он указан языком (например, Python или Java). –

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