Подтвердить что ты не робот

Как настроить пользовательское семя для генератора псевдослучайных чисел

Мне нужно выполнить несколько тестов, в которых я использую генератор псевдослучайных чисел randn. Как я могу установить семя самостоятельно, поэтому каждый раз, когда я запускаю этот тест, я получаю те же результаты? (да, я знаю это немного странно, но эта проблема).

Я нашел объект RANDSTREAM, который имеет свойство seed, но только для чтения. Есть ли способ использовать его для посева генератора?

4b9b3361

Ответ 1

Старый способ сделать это:

randn('seed',0)

Новый способ:

s = RandStream('mcg16807','Seed',0)
RandStream.setDefaultStream(s)

Обратите внимание, что если вы используете новый способ, rand и randn используют один и тот же поток, поэтому, если вы вызываете оба, вы можете найти разные числа, которые генерируются по сравнению со старым методом (который имеет отдельные генераторы). По этой причине по-прежнему поддерживается старый метод (и устаревший код).

Подробнее см. http://www.mathworks.com/help/techdoc/math/bsn94u0-1.html.

Ответ 2

Вы можете просто вызвать rng(mySeed), чтобы установить семя для глобального потока (проверено в Matlab R2011b). Это влияет на функции rand, randn и randi.

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

Вот пример кода:

format long;             % Display numbers with full precision
format compact;          % Get rid of blank lines between output
mySeed = 10;
rng(mySeed);             % Set the seed
disp(rand([1,3]));
disp(randi(10,[1,10]));
disp(randn([1,3]));
disp(' ');
rng(mySeed);             % Set the seed again to duplicate the results
disp(rand([1,3]));
disp(randi(10,[1,10]));
disp(randn([1,3]));

Его вывод:

   0.771320643266746   0.020751949359402   0.633648234926275
     8     5     3     2     8     2     1     7    10     1
   0.060379730526407   0.622213879877005   0.109700311365407

   0.771320643266746   0.020751949359402   0.633648234926275
     8     5     3     2     8     2     1     7    10     1
   0.060379730526407   0.622213879877005   0.109700311365407

Ответ 3

mySeed=57; % an integer number
rng(mySeed,'twister') %You can replace 'twister' with other generators

Ответ 4

Когда вы просто хотите reset включить RNG в известное состояние, просто используйте:

 seed = 0;
 randn('state', seed);
 rand ('state', seed);
 A = round(10*(rand(1,5))); // always will be [10 2 6 5 9]