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

Введение

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

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

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

   f(x)= 100*(x(2)-x(1)^2)^2+(1-x(1))^2

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

Мы можем просмотреть код для этой функции фитнеса.

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

Мы используем функциональный plotobjective в тулбоксе, чтобы построить функциональный dejong2fcn в области значений = [-2 2;-2 2].

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

Решение для генетического алгоритма

Чтобы запуститься, мы будем использовать Генетический алгоритм, ga, один, чтобы найти минимум функции Розенброка. Мы должны предоставить ga указатель на функцию к функции фитнеса dejong2fcn.m. Кроме того, 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

Глобальный оптимум в x* = (1,1). ga нашел точку около оптимума, но не мог получить более точный ответ с критерием остановки по умолчанию. Путем изменения критерия остановки мы можем найти более точное решение, но может потребоваться намного больше функциональных оценок, чтобы достигнуть x* = (1,1). Вместо этого мы можем использовать более эффективный локальный поиск, который запускается где брошенный ga. Гибридное функциональное поле в ga обеспечивает эту функцию автоматически.

Добавление гибридной функции

Мы будем использовать гибридную функцию, чтобы решить задачу оптимизации, т.е. когда ga остановится (или вы просите, чтобы он остановился), эта гибридная функция начнет с конечного пункта, возвращенного ga. Нашим выбором является fminsearch, patternsearch или fminunc. Поскольку этот пример оптимизации сглажен, т.е. непрерывно дифференцируем, мы можем использовать функцию fminunc от Optimization Toolbox как наша гибридная функция. Поскольку fminunc имеет свою собственную структуру опций, мы обеспечиваем его в качестве дополнительного аргумента при определении гибридной функции.

fminuncOptions = optimoptions(@fminunc,'Display','iter','Algorithm','quasi-newton');
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.
                                                        First-order 
 Iteration  Func-count       f(x)        Step-size       optimality
     0           3         0.664192                          28.1
     1          12         0.489131    0.000402247          0.373  
     2          21          0.48383             91           1.22  
     3          24         0.422036              1            6.7  
     4          33         0.225633       0.295475           7.36  
     5          39         0.221682       0.269766           10.1  
     6          45         0.126376             10           7.96  
     7          48        0.0839643              1          0.457  
     8          54        0.0519836            0.5           4.56  
     9          57        0.0387946              1           5.37  
    10          60        0.0149721              1           0.85  
    11          63       0.00959914              1           3.45  
    12          66        0.0039939              1          0.662  
    13          69       0.00129755              1          0.348  
    14          72      0.000288982              1          0.634  
    15          75      2.29621e-05              1         0.0269  
    16          78      3.34554e-07              1         0.0139  
    17          81      5.38696e-10              1       0.000801  
    18          84      1.72147e-11              1       7.21e-06  

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, когда это остановилось, также показывают в заголовке графика. Когда отключенный ga, fminunc (гибридная функция) был автоматически вызван лучшей точкой, найденной ga до сих пор. Решение x и fval является результатом использования ga и fminunc вместе. Как показано здесь, использование гибридной функции может улучшить точность решения эффективно.

Похожие темы