Воспроизведите свои результаты

Поскольку моделируемый алгоритм отжига является стохастическим — то есть, он делает случайный выбор — вы получаете немного отличающиеся результаты каждый раз, когда вы запускаете его. Алгоритм использует поток псевдослучайного числа MATLAB® по умолчанию. Для получения дополнительной информации о потоках случайных чисел, смотрите RandStream. Каждый раз алгоритм вызывает поток, его изменения состояния. Так в следующий раз, когда алгоритм вызывает поток, он возвращает различное случайное число.

Если необходимо воспроизвести результаты точно, вызовите simulannealbnd с аргументом output. Структура output содержит текущее состояние генератора случайных чисел в поле output.rngstate. Сбросьте состояние прежде, чем запустить функцию снова.

Например, воспроизвести вывод simulannealbnd применилось к пятой функции Де Йонга, вызовите simulannealbnd с синтаксисом

rng(10,'twister') % for reproducibility
[x,fval,exitflag,output] = simulannealbnd(@dejong5fcn,[0 0]);

Предположим, что результаты

x,fval

x =
  -16.1292  -15.8214

fval =
    6.9034

Состояние генератора случайных чисел, rngstate, хранится в output.rngstate. Сбросьте поток путем ввода

stream = RandStream.getGlobalStream;
stream.State = output.rngstate.State;

Если вы теперь запускаете simulannealbnd во второй раз, когда вы получаете те же результаты.

Можно воспроизвести выполнение в приложении Оптимизации путем проверки поля Use random states from previous run в раздел Run solver and view results.

Примечание

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

Похожие темы