Поскольку моделируемый алгоритм отжига является стохастическим - то есть он делает случайный выбор - вы получаете немного другие результаты каждый раз, когда запускаете его. Алгоритм использует MATLAB по умолчанию® псевдослучайный числовой поток. Для получения дополнительной информации о потоках случайных чисел см. RandStream
. Каждый раз, когда алгоритм вызывает поток, его состояние меняется. Поэтому в следующий раз, когда алгоритм вызывает поток, он возвращает другое случайное число.
Если вам нужно точно воспроизвести свои результаты, позвоните simulannealbnd
с output
аргумент. The 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
, так что вы получаете преимущество случайности в этих алгоритмах.