exponenta event banner

Воспроизвести результаты

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

Примечание

Если вам не нужно воспроизводить свои результаты, лучше не задавать состояние потока, чтобы вы получили пользу от случайности в генетическом алгоритме.

Связанные темы