В этом примере показано, как использовать гибридную схему оптимизировать функцию с помощью генетического алгоритма и другого метода оптимизации. 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
с опциями графика в качестве дополнительного аргумента при определении гибридной функции.
fminuncOptions = optimoptions(@fminunc,'PlotFcn',{'optimplotfval','optimplotx'}); options = optimoptions(options,'HybridFcn',{@fminunc, fminuncOptions});
Запустите ga
снова с fminunc
как гибридная функция.
[x,fval] = 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
Первый график показывает оптимальные и средние значения населения в каждой генерации. Заголовок графика идентифицирует оптимальное значение, найденное ga
когда это останавливается. Гибридный функциональный fminunc
начинает с лучшей точки, найденной ga
. Второй график показывает решению x
и fval
, которые следуют из использования ga
и fminunc
вместе. В этом случае использование гибридной функции улучшает точность и КПД решения.