MATLAB.Exponenta
–Û·Ë͇ Matlab&Toolboxes
  Математика
  Оптимизация
  - Optimization Toolbox
- Genetic Algorithm and Direct Search Toolbox
  Работа с данными
  Обработка сигналов и изображений
  Проектирование систем управления
  Оптимальные и робастные системы управления
  Финансовые приложения

Genetic Algorithm and Direct Search Toolbox - Математика

Статьи, материалы по практическим приложениям

Оптимизация с использованием MATLAB и Genetic Algorithm and Direct Search Toolbox

Дан Доетри, Мари Эн Фриман и Ракеш Кумар

Инженеры и научные работники постоянно связаны с проблемой поиска наиболее оптимального решения поставленной задачи, им приходится проводить анализ с целью выбора компромиссного решения, рассматривать множественные конструкторские варианты и вносить методы оптимизации в разрабатываемые модели и алгоритмы. Сочетание Optimization Toolbox и недавно внедренного в MATLAB Genetic Algorithm and Direct Search Toolbox расширяет возможности для решения разнообразных оптимизационных задач.

Традиционные методы на основе анализа производных различного порядка подобно тому, как это реализовано в Optimization Toolbox являются достаточно быстрыми и точными для целого ряда оптимизационных задач. Эти методы разработаны для решения так называемых "гладких", то есть для непрерывных и дифференцируемых задач оптимизации, поскольку для определения направления спуска проводится анализ производной целевой функции. Однако применение анализа производных часто оказывается попросту неэффективным в случае решения задач оптимизации для негладких функций, например, когда заданная целевая функция является прерывистой, недифференцируемой или стохастической функцией. Для случая негладких функций такие методы, как генетический алгоритм или сравнительно недавно разработанный алгоритм поиска по шаблону, являются вполне оправданной альтернативой и реализованы в Genetic Algorithm and Direct Search Toolbox.

В данной статье приводится обсуждение проблемы минимизации негладких функций с использованием Genetic Algorithm and Direct Search Toolbox. Примеры по приложению данного тулбокса, а так же методов оптимизации из Optimization Toolbox, приводятся для следующих вариантов применения:

  • Генетический алгоритм.
  • Генетический алгоритм в сочетании с алгоритмом на основе анализа производных согласно Optimization Toolbox.
  • Алгоритм поиска по шаблону.
В данные раздел включены пункты:
  • Эталонная целевая функция
  • Минимизация целевой функции с использованием генетического алгоритма
  • Минимизация целевой функции с использованием алгоритма поиска по шаблону
  • Заключение
  • Дополнение

Эталонная целевая функция

С целью возможной презентации поставленной задачи и полученных результатов возьмем некую задачу только с двумя переменными, хотя предложенный алгоритм не ограничивается такой низкой размерностью. Взятая нами целевая функция является кусочно-непрывной функцией, то есть имеются участки гладких функций с встроенными между ними разрывами одним примечательным участком, где функция является всюду недифференцируемой. Дополнительно, что характерно для большинства задач оптимизации, следует отметить, что взятая нами функция является гладкой в области точки минимума. Наша задача - найти минимум данной функции.

На Рисунке 1 представлен график выбранной нами целевой функции. Соответствующий М-файл с заданием поверхности является доступным для загрузки и носит название nonSmoothFcn.m. Красное пятно относится к расположению особой области.


Рисунок 1. С помощью клика мышкой можно получить увеличенной изображение.

Минимизация целевой функции с использованием генетического алгоритма

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

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

В Genetic Algorithm and Direct Search Toolbox генетический алгоритм можно запустить как из командной строки, так и с помощью графического интерфейса пользователя, называемого как Genetic Algorithm Tool (Рисунок 2) и который можно запустить, если набрать и выполнить команду gatool в окне команд MATLAB. В графическом интерфейсе пользователя так же возможно ввести решаемую задачу и выбрать необходимый генетический алгоритм. В Genetic Algorithm Tool определены следующие опции:

  • Функция пригодности - та целевая функция, которую необходимо оптимизировать.
  • Количество переменных в принимаемой оптимизации.
  • Графическая функция - функция пользователя, называемая как gaplotbestfun.m, которая отображает на графике наилучшее значение функции на каждом этапе генерации в зависимости от числа итераций (или генераций). Эта функция доступна для загрузки.
  • Графический интервал - число генераций между последовательными обращениями к графическим функциям.
  • Область исходного поколения - область индивидуальных объектов в исходном поколении.


Рисунок 2. С помощью клика мышкой можно получить увеличенной изображение.

Для запуска генетического алгоритма необходимо выполнить команду Start. По окончании оптимизации результаты выполнения операции можно увидеть на панели Status and results и на панели Final point. На графике поверхности на Рисунке 3 фиолетовы цветом помечена конечная точка расчета. На рисунке 4 представлены наиболее подходящие значения для каждой итерации.


Рисунок 3. С помощью клика мышкой можно получить увеличенной изображение.


Рисунок 4. С помощью клика мышкой можно получить увеличенной изображение.

Из графика искомой поверхности можно видеть, генетический алгоритм выходит на некую точку вблизи минимума в независимости условия недифференцируемости целевой функции. Схожий результат можно достигнуть и при решении искомой задачи с использованием командной строки:

FitnessFcn = @nonSmoothFcn;
optGA = gaoptimset('PlotFcns', @gaplotbestfun, 'PlotInterval', 5, 'PopInitRange', [-5 ; 5]); 
[Xga,Fga] = ga(FitnessFcn,2,optGA)

Xga =
-4.7220 0.0205

Fga =
13.0003 

Полученные результаты можно представить как:

  Точное решение Результаты согласно генетическому алгоритму Решение согласно генетическому алгоритму - точное решение
x(1) -4.712389 -4.7220 -0.0096
x(2) 0 0.0205 0.0205
Objfcn(x) 13 13.0003 0.0003

Использование гибридной функции с генетическим алгоритмом

Поскольку генетический алгоритм в большинстве случаев может определять точку только вблизи минимума, но в разумном временном интервале поиска, то в этом случае возможно использовать этот алгоритм в точение несколько большего времени, но выйти на нужную точку с несколько большей точностью. Когда, согласно постановке задачи, требуется такая повышенная точность, то можно использовать гибридную функцию, позволяющую соединить воедино генетический алгоритм с более точными методами из Optimization Toolbox.

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

Поскольку fminunc может эффективно определять точку минимума в некой сглаженной области, то нам следует передавать решение в данную функцию сразу, как только при помощи генетического алгоритма будет достигнуто некое приемлемое решение. На Рисунке 4 показан результат решения поставленной задачи с помощью генетического алгоритма за 15 итераций. На этом основании мы можем изменить Stopping criteria в Genetic Algorithm Tool таким образом, что бы генетический алгоритм использовался только в течение 15 итераций, взамен принимаемых по умолчанию 100 итераций. Этого числа достаточно для, что бы решение достигло сглаженной области, и которое можно взять в качестве отправной точки по применению функции fminunc.

Гибридную функцию можно выбрать и по собственному желанию с собственным набором опций. Для выбранной нами задачи в качестве выходной функции мы использовали функцию fminunc, обращение к которой производится после каждой алгоритмической итерации. Наша функция вывода fminuncOut.m представляет графическое отображение наилучшего значения функции на каждой итерации при применении алгоритма fminunc и при наложении на тот же график для итераций согласно генетическому алгоритму.

Функция вывода была определена на панели Options в разделе Hybrid function в используемом инструментарии Genetic Algorithm Tool путем ввода команды

optimset('Outputfcn',@fminuncOut) 

После выполнения процесса оптимизации при помощи Genetic Algorithm Tool и соответствующей последующей доводки были получены следующие результаты, как это представлено на Рисунке 5.


Рисунок 5. С помощью клика мышкой можно получить увеличенной изображение.

Из графика совпадения функций следует, что наилучшие значения функций достигаются при последующем применении итераций с функцией fminunc. Полученные результаты можно представить как:

  Exact solution Genetic algorithm with fminunc hybrid function results Genetic algorithm with fminunc - exact solution
x(1) -4.712389 -4.712389 -7.29017E-12
x(2) 0 1.6E-7 1.6E-7
Objfcn(x) 13 13.000000 7.5E-14

Следует отметить, что в случае применения гибридной функции происходит заметное увеличение точности по сравнению с полученными с помощью генетического алгоритма данными. Хотя затраты по числу итераций в алгоритме функции fminunc заметно ниже.


Рисунок 6. С помощью клика мышкой можно получить увеличенной изображение.

Минимизация целевой функции с использованием алгоритма поиска по шаблону

Метод поиска по шаблону является достаточно привлекательной альтернативой генетическому алгоритму, поскольку в большинстве случаев требует значительно более меньших компьютерных затрат для тех же самых функций. Кроме того, Genetic Algorithm and Direct Search Toolbox включает в себя вариант метода поиска по шаблону при наличии линейных ограничений.

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

Алгоритм метода поиска по шаблону для минимизации выбранной нами целевой функции можно запускать или из командной строки или графического интерфейса пользователя, называемого как Pattern Search Tool. Для запуска графического интерфейса пользователя в командной строке MATLAB следует набрать команду psearchtool.

Далее в графическом интерфейсе пользователя следует набрать вид целевой функции и определить стартовую точку на верхнем недифференцирукемом участке поверхности [2 -2]. В случае взятого нами примера выберем опцию графика Best function value с интервалом 5 для обзора результатов данной оптимизации. Для начала выполнения алгоритма поиска по шаблону следует кликнуть мышкой на команду Start (Рисунок 6).



Рисунок 7. С помощью клика мышкой можно получить увеличенной изображение

На рисунке 7 представлены результаты выполнения принятой нами оптимизации, откуда следует, что алгоритм поиска по шаблону дает точку минимума очень низкую к точному значению минимума рассматриваемой нами целевой функции. Полученные результаты оптимизации можно представит как

  Точное решение Результата расчета по мету поиска по шаблону Поиск по шаблону - точное решение
x(1) -4.712389 -4.712387 1.895E-06
x(2) 0 0 0
Objfcn(x) 13 13.000000 3.592E-12

Заключение

В данной статье приведены примеры из Genetic Algorithm and Direct Search Toolbox. Можно видеть, что генетический алгоритм имеет достаточно эффективный решатель для негладких целевых функций. Дополнительно следует отметить, генетический алгоритм может быть с другими типами решателей, такими как алгоритм fminunc из Optimization Toolbox, что может приводить к более точным результатам решения задачи оптимизации. Для активизации генетического алгоритма можно использовать как графический интерфейс пользователя, так и интерфейс из командной строки MATLAB. Для выбранной нами в качестве тестового варианта целевой функции после исследования генетического алгоритма был рассмотрен менее общеизвестный, но достаточно эффективный метод расчета по шаблону с использованием графического интерфейса пользователя.

В Genetic Algorithm and Direct Search Toolbox доступен ряд новых методов оптимизации, которые могут служить дополнением уже известного раннее Optimization Toolbox. Введенные новые методы решения для прерывистых, недифференцируемых или стохастических функций расширяют область решаемых оптимизационных задач в области науки и техники.

Для того, чтобы можно было выполнить приведенное выше программное обеспечение необходимо иметь установленные Optimization Toolbox и Genetic Algorithm and Direct Search Toolbox. В крайнем случае, можно использовать 30-дневный триал этих тулбоксов, например, смотри линк:

http://www.mathworks.com/products/gads/tryit.html

Следующие пять M-файлов должны быть включены в рабочую папку MATLAB. Используемая в приведенной выше статье подлежащая оптимизации функция находится в файле "nonSmoothOpt.m".

Прежде всего следует выполнить пошаговый проход по данному файлу в режиме пофрагментного выполнения программы согласно приведенной в статье последовательности. Для установки пофрагментного выполнения программы следует открыть M-файл. Это можно сделать, если набрать и выполнить в командном окне команду

'edit nonSmoothOpt'

После открытия редактора следует перейти к меню 'Cell' и выбрать команду

'Enable Cell Mode'

После установки необходимого режима работы с помощью правой кнопки мыши курсор ставится на данный фрагмент (фрагмент начинается с %%) и выполняется команда

'Evaluate Current Cell'

Данная программа снабжена детальным комментарием и отображает детальный отчет о производимых действиях. Такой отчет включает в себя поясняющую информацию о том как работает программа, а так же анализ результатов оптимизации.

Для вывода на печать данного файла следует из меню 'File' выполнить команду

'Publish To'

и установить необходимый формат печати.

Используемые в программе "nonSmoothOpt.m" четыре M-файла предназначены для:

  • nonSmoothFcn.m - М-файл с подлежащей оптимизации целевой функцией.
  • showNonSmoothFcn.m - функция, которая обеспечивает аннотированное отображение выбранной целевой функции.
  • gaplotbestfun.m - специальная графическая функция для генетического алгоритма, с помощью которой производится график наиболее подходящего значения функции в зависимости от числа итераций (или поколений).
  • fminuncOut.m - это функция вывода для гибридной функции FMINUNC, которая используется в решателе генетического алгоритма. Эта функция строит график для наиболее подходящего значения функции на каждой итерации алгоритма FMINUNC в тех самых осях, что и графическая функция генетического алгоритма (gaplotbestfun.m).

Программы для представления возможностей Genetic Algorithm and Direct Search Toolbox:

  • fminuncOut.m
  • gaplotbestfun.m
  • nonSmoothFcn.m
  • nonSmoothOpt.m
  • showNonSmoothFcn.m
===========================================================================

fminuncOut.m

function stop = fminuncOut(x,optimvalues, state)

%FMINUNCOUT is an output function used with the demo nonSmoothOpt.
% X is the current point. 
% OPTIMVALUES is a structure containing data from the current iteration. 
% STATE is the current state of the algorithm. 
% STOP is a flag that is set to true or false depending on whether the
% optimization routine should quit or continue.

persistent fig gaIter
stop = false;

switch state

    case 'init'
        fig = findobj(0,'type','figure','name','Genetic Algorithm');
        limits = get(gca,'XLim');
        gaIter = limits(2);
        hold on;
    case 'iter'
        set(gca,'Xlim', [1 optimvalues.iteration + gaIter]);
        fval = optimvalues.fval;
        iter = gaIter + optimvalues.iteration;
        plot(iter,fval,'dr','MarkerFaceColor','r')
        title(['Best function value: ',num2str(fval)],'interp','none')
    case 'done'
        fval = optimvalues.fval;
        iter = gaIter + optimvalues.iteration;
        title(['Best function value: ',num2str(fval)],'interp','none')
        % Create textarrow
        annotation1 = annotation(...
            gcf,'textarrow',...
            [0.6643 0.7286],[0.3833 0.119],...
            'String',{'Algorithm switch to fminunc'},...
            'FontWeight','bold');
        ch = get(gca,'Children');
        leg = [ch(end) ch(1)]
        legend(leg, 'Genetic Algorithm', 'fminunc');
        hold off
end
===========================================================================

gaplotbestfun.m

function state = gaplotbestfun(options,state,flag)

%GAPLOTBESTFUN Plots the best score and the mean score.
%   STATE = GAPLOTBESTFUN(OPTIONS,STATE,FLAG) plots the best function value
%   in every generation.

%   OPTIONS: Options structure used by the GA solver
%   STATE: A structure containing the following information about the state 
%   of the optimization:

%             Population: Population in the current generation
%                  Score: Scores of the current population
%             Generation: Current generation number
%              StartTime: Time when GA started 
%               StopFlag: String containing the reason for stopping
%              Selection: Indices of individuals selected for elite,
%                         crossover and mutation
%            Expectation: Expectation for selection of individuals
%                   Best: Vector containing the best score in each generation
%        LastImprovement: Generation at which the last improvement in
%                         fitness value occurred
%    LastImprovementTime: Time at which last improvement occurred
%

%   FLAG: Current state in which PlotFcns are called. Possible values are:
%         init: initialization state 
%         iter: iteration state
%         done: final state

if(strcmp(flag,'init'))
    set(gca,'xlim',[1,options.Generations]);
    xlabel('Generation','interp','none');
    grid on
    ylabel('Fitness value','interp','none');
    generation = state.Generation;
    best = min(state.Score);
    plot(generation+1,best, 'v','MarkerFaceColor','b');
    title(['Best: ',num2str(best)],'interp','none')
end

hold on;
generation = state.Generation;
best = min(state.Score);
plot(generation,best, 'v','MarkerFaceColor','b');
title(['Best: ',num2str(best)],'interp','none')
hold off;
===========================================================================

nonSmoothFcn.m

function [f, g] = nonSmoothFcn(x)

%NONSMOOTHFCN is a non-smooth objective function

for i = 1:size(x,1)
    if  x(i,1) < -7
        f(i) = (x(i,1))^2 + (x(i,2))^2 ;
    elseif x(i,1) < -3
        f(i) = -2*sin(x(i,1)) - (x(i,1)*x(i,2)^2)/10 + 15 ;
    elseif x(i,1) < 0
        f(i) = 0.5*x(i,1)^2 + 20 + abs(x(i,2))+ patho(x(i,:));
    elseif x(i,1) >= 0
        f(i) = .3*sqrt(x(i,1)) + 25 +abs(x(i,2)) + patho(x(i,:));
    end
end
===========================================================================

nonSmoothOpt.m

% Genetic Algorithm and Direct Search optimization demo
% This is a demonstration of how to find a minimum of a non-smooth
% objective function using the Genetic Algorithm (GA) and the pattern
% search (PATTERNSEARCH) functions in the Genetic Algorithm and Direct
% Search Toolbox. Traditional derivative-based optimization methods, like
% those found in the Optimization Toolbox, are fast and accurate for many
% types of optimization problems.  These methods are designed to solve
% 'smooth', i.e., continuous and differentiable, minimization problems as
% they use derivatives to determine the direction of descent. While using
% derivatives makes these methods fast and accurate, they often are not
% effective when problems lack smoothness, e.g., problems with
% discontinuous, non-differentiable, or stochastic objective functions.
% When faced with solving such non-smooth problems, methods like the
% genetic algorithm, or the more recently developed pattern search methods,
% both found in the Genetic Algorithm and Direct Search Toolbox, are
% effective alternatives.

%% Initialization

clear all; close all;format compact
Objfcn = @nonSmoothFcn;   %Handle to the objective function
X0 = [2 -2];   % Starting point 
range = [-6 6;-6 6];      %Range used to plot the objective function
rand('state',0);          %Reset the state of random number generators
randn('state',0);

%% Non-smooth Objective Function
% To help visualize the problem and results, we have chosen a problem with
% only two variables, but the algorithms we explore are certainly not
% limited to such small problems. We can view the code for this objective
% function.
type nonSmoothFcn.m
%%
% The objective function of our sample problem is a piece-wise continuous
% function, that is it has smooth regions separated by discontinuities,
% with one exceptional region that is non-differentiable almost everywhere.
% We use the function SHOWNONSMOOTHFCN, written for this demo, to plot the
% function NONSMOOTHFCN over the range = [-6 6;-6 6].
showNonSmoothFcn(Objfcn,range);
set(gca,'CameraPosition',[-36.9991   62.6267  207.3622]);
set(gca,'CameraTarget',[0.1059   -1.8145   22.3668])
set(gca,'CameraViewAngle',6.0924)
%Plot of the starting point (used by the PATTERNSEARCH solver)
plot3(X0(1),X0(2),feval(Objfcn,X0),'or','MarkerSize',10, ...
      'MarkerFaceColor','r');
fig = gcf;

%% Minimization Using The Genetic Algorithm

% The motivation for the genetic algorithm is evolutionary biology and
% genetics, mainly Darwin's theory of survival of the fittest. The Genetic
% Algorithm (GA) works on a population using a set of operators that are
% applied to the population. A population is a set of points in the design
% space. The initial population is generated randomly by default. The next
% generation of the population is computed using the fitness of the
% individuals in the current generation. The genetic algorithm does not use
% derivatives to detect descent in its minimization steps and so it is a
% good choice for problems such as our non-differentiable problem, as well
% as discontinuous, and stochastic problems. 

%%

% To start, we will use the Genetic Algorithm, GA, alone to find the
% minimum of the objective function (also called a fitness function). We
% need to supply GA with a function handle to the fitness function
% nonSmoothFcn.m. Also, GA needs to know the how many variables are in the 
% problem, which is two for this function.
FitnessFcn = @nonSmoothFcn;
numberOfVariables = 2;

%%

% Run GA Alone
% Some plot functions are selected to monitor the performance of the solver.

optionsGA = gaoptimset('PlotFcns',@gaplotbestfun,'PlotInterval',5, ...
                   'PopInitRange',[-5;5]);

% We run GA with the options 'optionsGA' as the third argument.

[Xga,Fga] = ga(FitnessFcn,numberOfVariables,optionsGA)

% Plot the final solution.
figure(fig)
hold on;
plot3(Xga(1),Xga(2),Fga,'vm','MarkerSize',10,'MarkerFaceColor','m');
hold off;
fig = gcf;

%%

% The optimum is at x* = (-4.7124, 0.0). GA found the point
% (-4.7775,0.0481) near the optimum, but could not get closer with the
% default stopping criteria. By changing the stopping criteria, we might
% find a more accurate solution, but it may take many more function
% evaluations to reach x* = (-4.7124, 0.0). Instead, we can use a more
% efficient local search that starts where GA left off. The hybrid function
% field in GA provides this feature automatically.

%% Minimization Using A Hybrid Function

% We will use a hybrid function to solve the optimization problem, i.e.,
% when GA stops (or you ask it to stop) this hybrid function will start
% from the final point returned by GA. Our choices are FMINSEARCH,
% PATTERNSEARCH, or FMINUNC. Since this optimization example is smooth near
% the minimum, we can use the FMINUNC function from the Optimization
% toolbox as our hybrid function as this is likely to be the most
% efficient. Since FMINUNC has its own options structure, we provide it as
% an additional argument when specifying the hybrid function.  

%% 

% Run GA-FMINUNC Hybrid.

optHybrid = gaoptimset(optionsGA,'Generations',15, 'PlotInterval',1,...
                'HybridFcn',{@fminunc,optimset('OutputFcn',@fminuncOut)});
[Xhybrid,Fhybrid] = ga(Objfcn,2,optHybrid)
% Plot the final solution.
figure(fig);
hold on;
plot3(Xhybrid(1),Xhybrid(2),Fhybrid+1,'^c','MarkerSize',10, ...
     'MarkerFaceColor','c');
hold off;

%%

% The plot shows the best value of the population in every generation. The
% best value found by GA when it terminated is also shown in the plot
% title. When GA terminated, FMINUNC (the hybrid function) was
% automatically called with the best point found by GA so far. The solution
% 'Xhybrid' with function value 'Fhybrid' is the result of using GA and
% FMINUNC together. As shown here, using the hybrid function can
% efficiently improve the accuracy of the solution. Also, the total number
% of generations was reduced from 100 to 18 by using the FMINUNC solver as
% a hybrid function. The improvement in X and the function value is
% calculated below. 

disp(['The norm of |Xga - Xhb| is  ', num2str(norm(Xga-Xhybrid))]);
disp(['The difference in function values Fga and Fhb is ', num2str(Fga - Fhybrid)]);

%% Minimization Using The Pattern Search Algorithm

% Pattern search, a more recently developed optimization algorithm, is an
% attractive alternative to the genetic algorithm as it is often
% computationally less expensive and can minimize the same types of
% functions. Additionally, the toolbox includes a pattern search method
% that can solve problems with linear constraints and bounds.

%% 

% Pattern search operates by searching a set of points called a pattern,
% which expands or shrinks depending on whether any point within the
% pattern has a lower objective function value than the current point. The
% search stops after a minimum pattern size is reached. Like the genetic
% algorithm, the pattern search algorithm does not use derivatives to
% determine descent, and so works well on non-differentiable, stochastic,
% and discontinuous objective functions.  And similar to the genetic
% algorithm, pattern search is often very effective at finding a global
% minimum because of the nature of its search. 

%%

% To minimize our objective function using the PATTERNSEARCH function, 
% we pass in a function handle to the objective function as well 
% as specifying a start point as the second argument. 

ObjectiveFunction = @nonSmoothFcn;
X0 = [2 -2];   % Starting point 

% Some plot functions are selected to monitor the performance of the solver.

optionsPS = psoptimset('PlotFcns',@psplotbestf,'PlotInterval',5);
% Run pattern search solver.
[Xps,Fps] = patternsearch(Objfcn,X0,[],[],[],[],[],[],optionsPS)
% Plot the final solution.
figure(fig)
hold on;
plot3(Xps(1),Xps(2),Fps+1,'*y','MarkerSize',14,'MarkerFaceColor','y');
hold off;
===========================================================================

showNonSmoothFcn.m

function showNonSmoothFcn(fcn,range)
%SHOWNONSMOOTHFCN plot a fitness function in two dimensions.
% showSmoothFcn(fcn,range) where range is a 2 by 2 matrix in which each
% row holds the min and max values to range over in that dimension.

% This function is used by the nonSmoothOpt demo.

pts = 25;
span = diff(range')/(pts - 1);
x = range(1,1): span(1) : range(1,2);
y = range(2,1): span(2) : range(2,2);

pop = zeros(pts * pts,2);
k = 1;
for i = 1:pts
    for j = 1:pts
        pop(k,:) = [x(i),y(j)];
        k = k + 1;
    end
end

values = feval(fcn,pop);
values = reshape(values,pts,pts);

surf(x,y,values)
shading interp
light
lighting phong
hold on
contour(x,y,values)
rotate3d
view(37,60)

% Annotations
figure1 = gcf;
% Create arrow
annotation1 = annotation(figure1,'arrow',[0.5946 0.4196],[0.9024 0.6738]);
% Create textbox
annotation2 = annotation(...
  figure1,'textbox',...
  'Position',[0.575 0.9071 0.1571 0.07402],...
  'FitHeightToText','off',...
  'FontWeight','bold',...
  'String',{'Start point'});
 
% Create textarrow
annotation3 = annotation(...
  figure1,'textarrow',...
  [0.3679 0.4661],[0.1476 0.3214],...
  'String',{'Non-differentiable regions'},...
  'FontWeight','bold');
 
% Create arrow
annotation4 = annotation(figure1,'arrow',[0.1196 0.04107],[0.1381 0.5429]);
 
% Create textarrow
annotation5 = annotation(...
  figure1,'textarrow',...
  [0.7411 0.5321],[0.05476 0.1381],...
  'LineWidth',2,...
  'Color',[1 0 0],...
  'String',{'Smooth region'},...
  'FontWeight','bold',...
  'TextLineWidth',2,...
  'TextEdgeColor',[1 0 0]);
 
% Create arrow
annotation6 = annotation(...
  figure1,'arrow',...
  [0.8946 0.9179],[0.05714 0.531],...
  'Color',[1 0 0]);

Поиск по сайту:

Система Orphus

Яндекс.Метрика