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