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