Пуленепробиваемое заполнение случайных генераторов для обеспечения воспроизводимости вычислений в Python
Мое намерение состоит в том, чтобы создать руководство о том, как выполнять воспроизводимые вычисления в Python (если это возможно, независимо от среды, операционной системы и т. Д.). Однако проблема генерации случайных чисел продолжает вспоминаться. Я изо всех сил пытаюсь найти пуленепробиваемый способ (если есть один).
Стандартный способ сделать вывод случайных генераторов воспроизводимым - это использовать
import random
random.seed()
Насколько я знаю, автоматический выбор семян зависит от системы. (См. Документацию random.seed в Python.)
Поэтому лучше использовать конкретное число для заполнения генератора.
import random
random.seed(0)
Тем не менее, есть библиотеки, которые не используют встроенные случайные, а используют numpy.random
, Поэтому вам также нужно посеять numpy
Генератор.
import numpy
numpy.random.seed(0)
Встроенный random
работает как синглтон, и я полагаю, numpy.random
работает так же. Это означает, что вы устанавливаете семя один раз, а затем оно используется везде.
Я хотел бы создать фрагмент кода, который вы могли бы использовать в начале своего кода и который обеспечил бы вычислительную воспроизводимость в терминах случайных генераторов.
Есть ли лучший способ объединить оба генератора и установить оба начальных числа и, возможно, даже сохранить воспроизводимость в разных операционных системах? А вы знакомы с какими-либо широко используемыми генераторами псевдослучайных чисел, которые должны быть добавлены к встроенным генераторам случайных чисел и к множеству случайных генераторов, чтобы сделать фрагмент как можно более общим?