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

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

Примечание

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

Похожие темы