Гибридная схема в генетическом алгоритме

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

Функция Розенброка

Этот пример использует функцию Розенброка (также известный как вторую функцию Деджонга) как функция фитнеса:

f(x)=100(x(2)-x(1)2)2+(1-x(1))2.

Функция Розенброка известна в оптимизации из-за медленной сходимости большая часть выставки методов при попытке минимизировать эту функцию. Функция Розенброка имеет уникальный минимум в точке x* = (1,1), где это имеет значение функции f(x*)=0.

Код для функции Розенброка находится в 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 вместе. В этом случае использование гибридной функции улучшает точность и КПД решения.

Похожие темы