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