В этом примере показано, как использовать гибридную схему для оптимизации функции с использованием генетического алгоритма и другого метода оптимизации. ga может быстро достичь окрестности локального минимума, но для достижения сходимости может потребоваться множество оценок функций. Для ускорения процесса решения сначала выполните команду ga для небольшого числа поколений, чтобы приблизиться к оптимальной точке. Затем используйте решение из ga в качестве начальной точки для другого решателя оптимизации для выполнения более быстрого и эффективного локального поиска.
В этом примере в качестве функции фитнеса используется функция Розенброка (также известная как вторая функция Дежонга):
+ (1-x (1)) 2.
Функция Розенброка печально известна в оптимизации из-за медленной сходимости большинство методов проявляют при попытке минимизировать эту функцию. Функция Розенброка имеет уникальный минимум в точке x * = (1,1), где она имеет значение функции *) = 0.
Код функции Розенброка находится в dejong2fcn файл.
type dejong2fcn.mfunction scores = dejong2fcn(pop)
%DEJONG2FCN Compute DeJongs second function.
%This function is also known as Rosenbrock's function
% Copyright 2003-2004 The MathWorks, Inc.
scores = zeros(size(pop,1),1);
for i = 1:size(pop,1)
p = pop(i,:);
scores(i) = 100 * (p(1)^2 - p(2)) ^2 + (1 - p(1))^2;
end
Постройте график функции Розенброка в диапазоне -2 < = x (1) < = 2; -2 < = x (2) < = 2.
plotobjective(@dejong2fcn,[-2 2;-2 2]);

Во-первых, использовать ga один, чтобы найти минимум функции Розенброка.
FitnessFcn = @dejong2fcn; numberOfVariables = 2;
Включите функции графика для мониторинга процесса оптимизации.
options = optimoptions(@ga,'PlotFcn',{@gaplotbestf,@gaplotstopping});Задайте поток случайных чисел для воспроизводимости и выполните команду ga с использованием опций.
rng default
[x,fval] = ga(FitnessFcn,numberOfVariables,[],[],[],[],[],[],[],options)Optimization terminated: average change in the fitness value less than options.FunctionTolerance.

x = 1×2
0.3454 0.1444
fval = 0.4913
Используя критерии остановки по умолчанию, ga не обеспечивает очень точного решения. Можно изменить критерии остановки, чтобы попытаться найти более точное решение, но ga требуется много оценок функций для приближения к глобальному оптимуму x * = (1,1).
Вместо этого выполните более эффективный локальный поиск, который начинается с ga останавливается с помощью опции гибридной функции в ga.
Гибридная функция начинается с точки, где ga останавливается. Варианты гибридных функций: fminsearch, patternsearch, или fminunc. Поскольку этот пример оптимизации является гладким и неограниченным, используйте fminunc в качестве гибридной функции. Обеспечить fminunc с опциями графика в качестве дополнительного аргумента при определении гибридной функции.
fminuncOptions = optimoptions(@fminunc,'PlotFcn',{'optimplotfval','optimplotx'}); options = optimoptions(options,'HybridFcn',{@fminunc, fminuncOptions});
Управляемый ga снова с fminunc в качестве гибридной функции.
[x,fval,exitflag,output] = ga(FitnessFcn,numberOfVariables,[],[],[],[],[],[],[],options)
Optimization terminated: average change in the fitness value less than options.FunctionTolerance.

Local minimum found. Optimization completed because the size of the gradient is less than the value of the optimality tolerance.

x = 1×2
1.0000 1.0000
fval = 1.7215e-11
exitflag = 1
output = struct with fields:
problemtype: 'unconstrained'
rngstate: [1x1 struct]
generations: 51
funccount: 2534
message: 'Optimization terminated: average change in the fitness value less than options.FunctionTolerance....'
maxconstraint: []
hybridflag: 1
ga график показывает лучшие и средние значения населения в каждом поколении. Заголовок графика определяет наилучшее значение, найденное ga когда она остановится. Гибридная функция fminunc начинается с лучшей точки, найденной ga. fminunc график показывает решение x и fval, что является результатом использования ga и fminunc вместе. В этом случае использование гибридной функции повышает точность и эффективность решения. output.hybridflag поле показывает, что fminunc останавливается с флагом выхода 1, указывающим, что x является истинным локальным минимумом.