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

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

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

Похожие темы