В этом примере показано, как избежать повторения тех же массивов случайных чисел, когда MATLAB® перезапускается. Этот метод полезен, когда вы хотите объединить результаты из тех же команд случайных чисел, выполненных в различных сеансах работы с MATLAB.
Все функции случайных чисел, rand
, randn
, randi
, и randperm
, нарисуйте значения от генератора общих случайных чисел. Каждый раз, когда вы запускаете MATLAB, генератор сбрасывается в то же состояние. Поэтому команда, такая как rand(2,2)
возвращает тот же результат в любое время, когда вы выполняете его сразу после запуска. Кроме того, любой скрипт или функция, которая вызывает функции случайных чисел, возвращает тот же результат при каждом перезапуске.
Один из способов получить различные случайные числа - каждый раз инициализировать генератор, используя другой seed. Это гарантирует, что вы не будете повторять результаты предыдущего сеанса.
Выполните rng('shuffle')
команда один раз в вашем Сеансе работы с MATLAB перед вызовом любой из функций случайных чисел.
rng('shuffle')
Можно выполнить эту команду в Командном Окне MATLAB, или можно добавить ее в свой файл запуска, который является специальным скриптом, который MATLAB выполняет каждый раз, когда вы перезапускаете.
Теперь выполните команду случайное число.
A = rand(2,2);
Каждый раз, когда вы звоните rng('shuffle')
, он перезапускает генератор, используя другой seed на основе текущего времени.
Примечание
Частая повторная подача генератора не улучшает статистические свойства результата и не делает выход более случайным в каком-либо реальном смысле. Переподготовка может быть полезной при перезапуске MATLAB или перед запуском большого вычисления со случайными числами. Однако повторная подача генератора слишком часто в сеансе не является хорошей идеей, потому что статистические свойства ваших случайных чисел могут быть отрицательно затронуты.
Также явно задайте различные начальные значения в различных сеансах работы с MATLAB. Для примера сгенерируйте случайные числа за один Сеанс работы с MATLAB.
rng(1); A = rand(2,2);
Используйте различные начальные значения для генерации случайных чисел в другом сеансе работы с MATLAB.
rng(2); B = rand(2,2);
Массивы направленности A
и B
различаются, потому что генератор инициализируется с другим seed перед каждым вызовом rand
функция.
Чтобы сгенерировать несколько независимых потоков, которые гарантированно не перекрываются и для которых были проведены тесты, демонстрирующие независимость значений между потоками, можно использовать RandStream.create
. Дополнительные сведения о генерации нескольких потоков см. в разделе «Несколько потоков».