Этот пример показывает, как использовать гибридную схему для оптимизации функции с помощью генетического алгоритма и другого метода оптимизации. ga
может быстро достичь локального минимума, но может потребовать многих вычислений функции для достижения сходимости. Чтобы ускорить процесс решения, сначала запустите ga
для небольшого числа поколений, чтобы приблизиться к оптимальной точке. Затем используйте решение из ga
в качестве начальной точки для другого решателя оптимизации, чтобы выполнить более быстрый и эффективный локальный поиск.
Этот пример использует функцию Розенбрка (также известную как вторая функция Дэджонга) в качестве функции соответствия:
.
Функция Розенбрка пресловута в оптимизации из-за медленной сходимости, большинство методов проявляются при попытке минимизировать эту функцию. Функция Розенбрка имеет уникальный минимум в точке x * = (1,1), где она имеет значение функции.
Код функции Розенбрка находится в dejong2fcn
файл.
type dejong2fcn.m
function 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
с опциями plot в качестве дополнительного аргумента при задании гибридной функции.
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
The ga
график показывает лучшие и средние значения населения в каждой генерации. Заголовок графика определяет лучшее значение, найденное по ga
когда он останавливается. Гибридная функция fminunc
начинается с лучшей точки, найденной по ga
. The fminunc
график показывает решение x
и fval
, которые являются результатом использования ga
и fminunc
вместе. В этом случае использование гибридной функции повышает точность и эффективность решения. The output.hybridflag
поле показывает, что fminunc
останавливается с выходным флагом 1, что указывает на то, что x
является истинным локальным минимумом.