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