Поскольку генетический алгоритм является стохастическим - то есть он делает случайный выбор - вы получаете немного другие результаты каждый раз, когда вы запускаете генетический алгоритм. Алгоритм использует MATLAB по умолчанию® псевдослучайный числовой поток. Для получения дополнительной информации о потоках случайных чисел см. RandStream
. Каждый раз ga
вызывает поток, его состояние меняется. Чтобы в следующий раз ga
вызывает поток, он возвращает другое случайное число. Вот почему выход ga
отличается каждый раз, когда вы запускаете его.
Если вам нужно точно воспроизвести свои результаты, можно позвонить ga
с выходным аргументом, который содержит текущее состояние потока по умолчанию, а затем сбросить состояние до этого значения перед запуском ga
снова. Например, чтобы воспроизвести выход ga
применяется к функции Растригина, вызов ga
с синтаксисом
rng(1,'twister') % for reproducibility [x,fval,exitflag,output] = ga(@rastriginsfcn, 2);
Предположим, что результаты
x,fval,exitflag
x = -1.0421 -1.0018 fval = 2.4385 exitflag = 1
Состояние потока сохранено в output.rngstate
. Чтобы сбросить состояние, введите
stream = RandStream.getGlobalStream; stream.State = output.rngstate.State;
Если вы сейчас запускаете ga
во второй раз вы получаете те же результаты, что и прежде:
[x,fval,exitflag] = ga(@rastriginsfcn, 2)
Optimization terminated: average change in the fitness value less than options.FunctionTolerance. x = -1.0421 -1.0018 fval = 2.4385 exitflag = 1
Примечание
Если вам не нужно воспроизводить свои результаты, лучше не устанавливать состояние потока, чтобы вы получили пользу случайности в генетическом алгоритме.