Большинство генераторов псевдослучайных чисел (PRNG) построены на алгоритмах, использующих какой-то рекурсивный метод, начиная с базового значения, которое определяется входом, называемым «начальным числом». PRNG по умолчанию в большинстве статистических программ (R, Python, Stata и т. Д.) Представляет собой алгоритм Мерсенна Твистера MT19937, изложенный в Matsumoto и Nishimura (1998) . Это сложный алгоритм, поэтому лучше прочитать статью, если вы хотите узнать, как он работает в деталях. В этом конкретном алгоритме существует рекуррентное отношение степени , а входное семя - это начальный набор векторов . Алгоритм использует линейное рекуррентное отношение, которое генерирует:х 0 , х 1 , . , , , х н - 1nx0,x1,...,xn−1
xn+k=f(xk,xk+1,xk+m,r,A),
где и и являются объектами, которые могут быть указаны в качестве параметров в алгоритме. Поскольку начальное число дает начальный набор векторов (и другие фиксированные параметры для алгоритма), последовательность псевдослучайных чисел, генерируемых алгоритмом, является фиксированной. Если вы измените начальное число, то вы измените начальные векторы, которые изменят псевдослучайные числа, сгенерированные алгоритмом. Это, конечно, функция семени.r A1⩽m⩽nrA
Теперь важно отметить, что это только один пример, использующий алгоритм MT19937. Есть много PRNG, которые можно использовать в статистическом программном обеспечении, и каждый из них включает в себя разные рекурсивные методы, и поэтому начальное значение означает разные вещи (в техническом плане) в каждом из них. Вы можете найти библиотеку PRNGs для R
в этой документации , в котором перечислены доступные алгоритмы и документы , которые описывают эти алгоритмы.
Цель начального числа состоит в том, чтобы позволить пользователю «заблокировать» генератор псевдослучайных чисел, чтобы позволить воспроизводимый анализ. Некоторым аналитикам нравится устанавливать начальное число с использованием генератора истинных случайных чисел (TRNG), который использует аппаратные входы для генерации начального начального числа, а затем сообщать об этом как заблокированное число. Если начальное значение задано и передано исходным пользователем, то одитор может повторить анализ и получить ту же последовательность псевдослучайных чисел, что и исходный пользователь. Если начальное число не установлено, тогда алгоритм обычно будет использовать какой-либо начальный уровень по умолчанию (например, из системных часов), и, как правило, будет невозможно воспроизвести рандомизацию.
2^19937 − 1
. Семя - это точка этой чрезвычайно длинной последовательности, где запускается генератор. Так что да, это детерминистично.