Случайное число Matlab рнг: выбор семян - PullRequest
0 голосов
/ 07 января 2020

Хотелось бы узнать более точно, что происходит, когда вы выбираете пользовательское начальное число в Matlab, например:

rng(101)

Из моего (ограниченного, тем не менее, существующего) понимания того, как работают генераторы псевдослучайных чисел можно увидеть семя концептуально как , выбирая позицию в " очень длинном списке псевдослучайных чисел ".

Вопрос: скажем, (в моем Скрипт Matlab), я выбираю rng (100) для моего первого вычисления (последовательность инструкций) и затем rng (1e6) для моего второго. Пожалуйста, обратите внимание, что каждый раз, когда я делаю некоторые вычисления, это включает в себя генерирование до 300 000 случайных чисел (каждый раз).

-> Означает ли это, что я проверяю, нет ли совпадения между последовательностью в «списке», начинающейся с 100 и заканчивающейся около 300k, и последовательностью, начинающейся с 1e6 и заканчивающейся 1'300'000? (Идея «без перекрытия» вытекает из того факта, что rng ​​(100) и rng (1e6) разделены гораздо более чем на 300k)

, то есть, что это 2 «независимые» последовательности (насколько насколько я помню, этот «длинный список» был бы сгенерирован специальным алгоритмом PRNG, скорее всего с модульной арифметикой c ..?)

Ответы [ 2 ]

2 голосов
/ 07 января 2020

Не совсем. Семя, которое вы даете rng, является точкой инициации для алгоритма Мерсенна Твистера (по умолчанию), который используется для генерации псевдослучайных чисел. Если вы выберете два разных начальных числа (независимо от их относительных неотрицательных целочисленных значений, за исключением, может быть, особого случая или двух), у вас будут эффективно независимые потоки псевдослучайных чисел.

Для "99%" людей, основное использование заполнения rng - использование аргумента 'shuffle' (чтобы использовать начальное число не по умолчанию, основанное на времени, чтобы помочь обеспечить независимость чисел, сгенерированных за несколько сеансов), или дать ему одно конкретное начальное число (чтобы иметь возможность воспроизвести тот же псевдослучайный поток позднее). Если вы попытаетесь отточить семена дальше, не проявляя при этом особой осторожности, вы, скорее всего, вызовете проблемы, чем сделаете что-нибудь полезное.

RandStream можно использовать для разрыва отдельных потоков псевдослучайных чисел, если это действительно имеет значение для ваше приложение (скорее всего, нет).

2 голосов
/ 07 января 2020

Нет, это не так. Отображение между начальным числом и «положением» в нашем списке сгенерированных чисел не является линейным, вы можете фактически интерпретировать его как хеш / одностороннюю функцию. На самом деле может случиться, что мы получим ту же последовательность чисел, смещенную на одну позицию (но это очень маловероятно).

По умолчанию MATLAB использует Mersenne Twister (источник) .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...