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