Сгенерируйте случайные числа, которые отличаются

В этом примере показано, как постараться не повторять те же массивы случайных чисел когда 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 или прежде чем вы выполните большое вычисление, включающее случайные числа. Однако пересев генератора слишком часто в сеансе не является хорошей идеей, потому что на статистические свойства ваших случайных чисел можно оказать негативное влияние.

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

rng(1);
A = rand(2,2);

Используйте различные seed, чтобы сгенерировать случайные числа в другом сеансе работы с MATLAB.

rng(2);
B = rand(2,2);

Массивы A и B отличаются, потому что генератор инициализируется различным seed перед каждым вызовом rand функция.

Чтобы сгенерировать несколько независимых потоков, которые, как гарантируют, не перекроются, и для которого были выполнены тесты, которые демонстрируют независимость значений между потоками, можно использовать RandStream.create. Для получения дополнительной информации о генерации нескольких потоков, смотрите Несколько Потоков.

Смотрите также

Похожие темы