Является ли перезапуск генератора случайных чисел эквивалентным перезапуску процесса Бернулли?

Я хочу смоделировать процесс Бернулли. Я бросаю монету N раз

initRand();
p = 0.5;
for ( int i=0; i<N; i++) {
  x = rand(); 
  if ( x < p ) success();
  else failure();
}

Теперь два сценария:

(i) В этот момент я продолжаю бросать монету до 2*N:

for (; i<2*N; i++) {
  x = rand(); 
  if ( x < p ) success();
  else failure();
}

(ii) здесь я перезапускаю случайную последовательность и продолжаю падать до 2*N:

initRand();
for (; i<2*N; i++) {
      x = rand(); 
      if ( x < p ) success();
      else failure();
}

В первом сценарии вероятность k успехов за 2 * N бросков рассчитывается как

P(success)=nchoosek(2*N,k)*p^k*(1-p)^(2*N-k)

Правильно ли это для второго сценария? Или из-за сброса генератора мы не можем думать о 2 * N циклах как об одном процессе?

2 ответа

В общем случае ответ зависит от используемого алгоритма генератора псевдослучайных чисел (PRNG) и от того, как initRand реализовано.

PRNG предназначены для получения последовательности значений, которые статистически имитируют независимость и одинаковое распределение. Насколько они успешны, сильно варьируется. Все PRNG поддерживают некоторое внутреннее состояние, которое алгоритмически обновляется для получения следующего значения. Посев генератора означает выбор исходного состояния. Генератором по умолчанию в Matlab является Mersenne Twister (mt19937), что довольно неплохо в таких ситуациях. Если вы начнете начислять без сброса, ваши испытания Бернулли будут независимыми.

Это подводит нас к вопросу о initRand, Поскольку это не встроенный Matlab, я понятия не имею, как реализован тот, который вы используете. Если он устанавливает PRNG в одно и то же состояние каждый раз, когда вы вызываете его, то ваши две последовательности в конечном итоге будут идеально соотнесены друг с другом. Если он выбирает произвольное начальное состояние, основанное на локальной энтропии, все еще возможно иметь некоторое наложение полученных последовательностей, и результаты будут частично коррелированы. Хорошая новость заключается в том, что с пространством состояний размера 219937-1 вероятность увидеть это в Мерсенн Твистер невероятно мала. Однако, если он выбирает начальное число на основе времени и ваша программа работает достаточно быстро, есть вероятность, что две последовательности могут быть засечены в один и тот же такт часов и в конечном итоге будут идентичны.

Когда все сказано и сделано, ваша самая безопасная ставка - не сбрасывать состояние с initRand в середине.

Все числа, сгенерированные алгоритмом, будут только псевдослучайными. Сброс алгоритма, таким образом, поставит вас в начало заранее определенной последовательности случайных чисел.

Это означает, что в случае (i) у вас будет последовательность 2*N числа, которые можно рассматривать как независимый случайный процесс.

Однако если вы сбросите алгоритм в (ii), вы получите то же самое N цифры вы нарисовали в первый раз. Числа все еще из того же случайного распределения, но первое N цифры соотносятся со вторым N номера. Поэтому вероятность успеха будет определяться первым N записи и не все 2*N,

Другие вопросы по тегам