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

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

Примечание

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

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

Похожие темы