Эффекты опций генетического алгоритма

Этот пример показывает эффекты некоторых опций для функции генетического алгоритма ga. Вы создаете и изменяете опции при помощи optimoptions функция.

Настройте проблему для ga

ga поиски минимума функции с помощью генетического алгоритма. В данном примере используйте ga чтобы минимизировать фитнес функционируют shufcn, действительная функция двух переменных.

Постройте shufcn в области значений = [-2 2;-2 2] путем вызова plotobjective.

plotobjective(@shufcn,[-2 2; -2 2]);

Figure contains an axes object. The axes object contains 2 objects of type surface, contour.

Использовать ga решатель, обеспечьте по крайней мере два входных параметра: функция фитнеса и количество переменных в проблеме. Первые два выходных аргумента возвращены ga x, лучшая точка, найденная, и Fval, значение функции в лучшей точке. Третий выходной аргумент, exitFlag, указывает почему ga остановленный. ga может также возвратить четвертый аргумент, Output, который содержит информацию об эффективности решателя.

FitnessFunction = @shufcn;
numberOfVariables = 2;

Запустите ga решатель.

rng default % For reproducibility
[x,Fval,exitFlag,Output] = ga(FitnessFunction,numberOfVariables);
Optimization terminated: average change in the fitness value less than options.FunctionTolerance.
fprintf('The number of generations is: %d\n', Output.generations);
The number of generations is: 124
fprintf('The number of function evaluations is: %d\n', Output.funccount);
The number of function evaluations is: 5881
fprintf('The best function value found is: %g\n', Fval);
The best function value found is: -186.199

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

Как работает генетический алгоритм

Генетический алгоритм работает над населением, использующим набор операторов, которые применяются к населению. Население является набором точек на пробеле проекта. Начальная генеральная совокупность сгенерирована случайным образом по умолчанию. Алгоритм вычисляет следующее поколение населения, использующего физическую форму индивидуумов в текущем поколении. Для получения дополнительной информации смотрите Как работы Генетического алгоритма.

Добавьте визуализацию

Чтобы визуализировать эффективность решателя, в то время как это запускается, устанавливает 'PlotFcn' опция с помощью optimoptions. В этом случае выберите две функции построения графика в массиве ячеек. Установите gaplotbestf, который строит лучший и средний счет населения при каждой генерации. Также установите gaplotstopping, который строит процент критерия остановки, которому удовлетворяют.

opts = optimoptions(@ga,'PlotFcn',{@gaplotbestf,@gaplotstopping});

Запустите ga решатель, включая opts аргумент.

[x,Fval,exitFlag,Output] = ...
    ga(FitnessFunction,numberOfVariables,[],[],[],[],[],[],[],opts);
Optimization terminated: average change in the fitness value less than options.FunctionTolerance.

Figure Genetic Algorithm contains 2 axes objects. Axes object 1 with title Best: -186.71 Mean: -123.753 contains 2 objects of type line. These objects represent Best fitness, Mean fitness. Axes object 2 with title Stopping Criteria contains an object of type bar.

Задайте опции населения

Опции населения могут оказать большое влияние на эффективность решателя. Скорость каждой итерации зависит от численности населения: более многочисленное население приводит к более медленным итерациям. С другой стороны более многочисленное население приводит к ga исследование более тщательно, так может привести к лучшему решению. Точно так же более широкая начальная область значений может привести к более полному исследованию, но может потребовать, чтобы более многочисленное население исследовало более широкую область значений с подобной тщательностью.

Задайте численность населения

ga создает начальную генеральную совокупность по умолчанию при помощи равномерного генератора случайных чисел. Численность населения по умолчанию используется ga 50, когда количество переменных решения меньше 5, и 200 в противном случае. Размер по умолчанию не может работать хорошо на некоторые проблемы; например, меньшая численность населения может быть достаточной для меньших проблем. Поскольку текущая проблема имеет только две переменные, задайте численность населения 10. Установите значение опции PopulationSize к 10 в существующих опциях, opts.

opts.PopulationSize = 10;

Укажите диапазон начальной генеральной совокупности

Метод по умолчанию для генерации начальной генеральной совокупности использует равномерный генератор случайных чисел. Для проблем без целочисленных ограничений, ga создает начальную генеральную совокупность, где все точки находятся в области значений –10 к 10. Например, можно сгенерировать население размера три в области значений по умолчанию с помощью этой команды:

Population = [-10,-10] + 20*rand(3,2);

Можно установить начальную область значений путем изменения InitialPopulationRange опция. Область значений должна быть матрицей с двумя строками. Если область значений имеет только один столбец, то есть, это 2 1, то область значений каждой переменной является данной областью значений. Например, если вы устанавливаете область значений на [-1; 1], затем начальная область значений для обеих переменных –1 к 1. Чтобы указать различный начальный диапазон для каждой переменной, необходимо указать диапазон как матрицу с двумя строками и numberOfVariables столбцы. Например, если вы устанавливаете область значений на [-1 0; 1 2], затем первая переменная имеет область значений –1 к 1, и вторая переменная имеет область значений от 0 до 2 (каждый столбец соответствует переменной).

Измените значение опции InitialPopulationRange в существующих опциях, opts.

opts.InitialPopulationRange = [-1 0; 1 2];

Запустите ga решатель.

[x,Fval,exitFlag,Output] = ga(FitnessFunction,numberOfVariables,[],[],[], ...
    [],[],[],[],opts);
Optimization terminated: average change in the fitness value less than options.FunctionTolerance.

Figure Genetic Algorithm contains 2 axes objects. Axes object 1 with title Best: -179.987 Mean: -78.6061 contains 2 objects of type line. These objects represent Best fitness, Mean fitness. Axes object 2 with title Stopping Criteria contains an object of type bar.

fprintf('The number of generations is: %d\n', Output.generations);
The number of generations is: 67
fprintf('The number of function evaluations is: %d\n', Output.funccount);
The number of function evaluations is: 614
fprintf('The best function value found is: %g\n', Fval);
The best function value found is: -179.987

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

По умолчанию, ga запускается со случайной начальной генеральной совокупности, созданной с помощью генераторов случайных чисел MATLAB®. Решатель производит следующее поколение с помощью ga операторы, которые также используют эти те же генераторы случайных чисел. Каждый раз случайное число сгенерировано, состояние изменений генераторов случайных чисел. Так, даже если вы не изменяете опций, можно получить различные результаты, когда вы запускаете решатель снова.

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

Запустите ga решатель.

[x,Fval,exitFlag,Output] = ga(FitnessFunction,numberOfVariables);
Optimization terminated: average change in the fitness value less than options.FunctionTolerance.
fprintf('The best function value found is: %g\n', Fval);
The best function value found is: -186.484

Запустите ga снова.

[x,Fval,exitFlag,Output] = ga(FitnessFunction,numberOfVariables);
Optimization terminated: average change in the fitness value less than options.FunctionTolerance.
fprintf('The best function value found is: %g\n', Fval);
The best function value found is: -185.867

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

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

thestate = rng;

Запустите ga.

[x,Fval,exitFlag,Output] = ga(FitnessFunction,numberOfVariables);
Optimization terminated: average change in the fitness value less than options.FunctionTolerance.
fprintf('The best function value found is: %g\n', Fval);
The best function value found is: -186.467

Сбросьте поток и повторно выполните ga. Результаты идентичны предыдущему запуску.

rng(thestate);
[x,Fval,exitFlag,Output] = ga(FitnessFunction,numberOfVariables);
Optimization terminated: average change in the fitness value less than options.FunctionTolerance.
fprintf('The best function value found is: %g\n', Fval);
The best function value found is: -186.467

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

strm = RandStream.getGlobalStream;
strm.State = Output.rngstate.State;

Повторно выполните ga. Снова, результаты идентичны.

[x,Fval,exitFlag,Output] = ga(FitnessFunction,numberOfVariables);
Optimization terminated: average change in the fitness value less than options.FunctionTolerance.
fprintf('The best function value found is: %g\n', Fval);
The best function value found is: -186.467

Измените критерий остановки

ga использование четыре различных критерия, чтобы определить, когда остановить решатель. ga остановки, когда это достигает максимального количества поколений; по умолчанию этот номер является 100 раз количеством переменных. ga также обнаруживает, если лучшее значение фитнеса не изменяется в течение некоторого времени даваемый в секундах (остановите ограничение по времени), или для некоторого количества поколений (максимальные поколения останова). Другой критерии является максимальным ограничением по времени в секундах. Измените критерий остановки, чтобы увеличить максимальное число поколений к 300 и максимальных поколений останова к 100.

opts = optimoptions(opts,'MaxGenerations',300,'MaxStallGenerations', 100);

Повторно выполните ga решатель.

[x,Fval,exitFlag,Output] = ga(FitnessFunction,numberOfVariables,[],[],[], ...
    [],[],[],[],opts);
Optimization terminated: average change in the fitness value less than options.FunctionTolerance.

Figure Genetic Algorithm contains 2 axes objects. Axes object 1 with title Best: -186.729 Mean: -186.202 contains 2 objects of type line. These objects represent Best fitness, Mean fitness. Axes object 2 with title Stopping Criteria contains an object of type bar.

fprintf('The number of generations is: %d\n', Output.generations);
The number of generations is: 299
fprintf('The number of function evaluations is: %d\n', Output.funccount);
The number of function evaluations is: 2702
fprintf('The best function value found is: %g\n', Fval);
The best function value found is: -186.729

Задайте ga Операторы

ga запускается со случайного набора точек в населении и использует операторы, чтобы произвести следующее поколение населения. Различные операторы масштабируются, выбор, перекрестное соединение и мутация. Тулбокс обеспечивает несколько функций, чтобы задать для каждого оператора. Задайте fitscalingprop для FitnessScalingFcn и selectiontournament для SelectionFcn.

opts = optimoptions(@ga,'SelectionFcn',@selectiontournament, ...
                        'FitnessScalingFcn',@fitscalingprop);

Повторно выполните ga.

[x,Fval,exitFlag,Output] = ga(FitnessFunction,numberOfVariables,[],[],[], ...
    [],[],[],[],opts);
Optimization terminated: average change in the fitness value less than options.FunctionTolerance.
fprintf('The number of generations is: %d\n', Output.generations);
The number of generations is: 52
fprintf('The number of function evaluations is: %d\n', Output.funccount);
The number of function evaluations is: 2497
fprintf('The best function value found is: %g\n', Fval);
The best function value found is: -186.417

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

Смотрите также

Похожие темы