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

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

Можно воспроизвести запуск в приложении Оптимизации путем проверки поля Use random states from previous run в раздел Run solver and view results.

Примечание

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

Похожие темы