GlobalSearch

Найти глобальный минимум

Описание

A GlobalSearch объект содержит свойства (опции), которые влияют на то, как run неоднократно запускает локальный решатель, чтобы сгенерировать GlobalOptimSolution объект. При запуске решатель пытается найти решение, которое имеет самое низкое значение целевой функции.

Создание

Описание

пример

gs = GlobalSearch создает gs, а GlobalSearch решатель со свойствами по умолчанию.

пример

gs = GlobalSearch(Name,Value) устанавливает свойства с помощью пар "имя-значение".

пример

gs = GlobalSearch(oldGS,Name,Value) создает копию oldGS GlobalSearch решатель и устанавливает свойства с помощью пар "имя-значение".

пример

gs = GlobalSearch(ms) создает gs, а GlobalSearch решатель, с общими значениями свойств от ms MultiStart решатель.

Свойства

расширить все

Коэффициент уменьшения радиуса умывальной раковины, заданный как скаляр от 0 через 1. Радиус умывальной раковины уменьшается после MaxWaitCycle последовательные начальные точки находятся в умывальных раковинах. Радиус умывальной раковины уменьшается в 1 - BasinRadiusFactor раз.

Задайте BasinRadiusFactor на 0 отключить обновление радиуса умывальной раковины.

Пример: 0.5

Типы данных: double

Level of display в Командном окне, заданный как один из следующих векторов символов или строк:

  • 'final' - Сообщите обобщенные результаты после run концы.

  • 'iter' - Сообщить о результатах после начального fmincon пробежать, после Этапа 1, после каждые 200 стартовых точек, и после каждого запуска fmincon, в дополнение к окончательным сводным данным.

  • 'off' - Нет отображения.

Пример: 'iter'

Типы данных: char | string

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

Пример: 0.5

Типы данных: double

Допуск на значения функции для принятия решений равным, заданный как неотрицательный скаляр. Решатели считают два решения идентичными, если они находятся в XTolerance относительное расстояние друг от друга и иметь значения целевых функций в FunctionTolerance относительное различие между собой. Если оба условия не выполняются, решатели сообщают о решениях как об отличных. Задайте FunctionTolerance на 0 для получения результатов каждого запуска локального решателя. Задайте FunctionTolerance к большему значению, чтобы иметь меньше результатов. Для GlobalSearch подробности см. Update Solution Set в «Когда fmincon запускается». Для MultiStart см. раздел Создание объекта GlobalOptimSolution.

Пример: 1e-4

Типы данных: double

Максимальное время в секундах выполнения GlobalSearch, заданное как положительная скалярная величина. GlobalSearch и его локальные решатели останавливаются, когда MaxTime секунды прошли с начала запуска, как измерено tic и toc.

MaxTime не прерывает локальные решатели во время запуска, поэтому общее время может превысить MaxTime.

Пример: 180 останавливает решатель в первый раз, когда вызов локального решателя заканчивается через 180 секунд.

Типы данных: double

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

  • Если наблюдаемая штрафная функция MaxWaitCycle последовательные пробные точки - это, по крайней мере, порог штрафа, затем повышайте порог штрафа (см. PenseThresholdFactor).

  • Если MaxWaitCycle последовательные пробные точки находятся в умывальной раковине, затем обновляется радиус умывальной раковины (см. BasinRadiusFactor).

Пример: 40

Типы данных: double

Количество точек 1 этапа, заданное как положительное целое число. Для получения дополнительной информации смотрите Получение начальной точки этапа 1, Запуск.

Пример: 1000

Типы данных: double

Количество потенциальных начальных точек, заданное как положительное целое число.

Пример: 3e4

Типы данных: double

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

Типы данных: cell | function_handle

Увеличение порога штрафа, заданное как положительная скалярная величина. Для получения дополнительной информации смотрите Реакцию на Большие Значения Счетчика.

Пример: 0.4

Типы данных: double

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

Существует две встроенные функции построения графика:

  • @gsplotbestf строит графики наилучшего значения целевой функции.

  • @gsplotfunccount строит графики количества вычислений функции.

См. раздел Функции построения графика MultiStart.

Пример: @gsplotbestf

Типы данных: cell | function_handle

Начальные точки для запуска, заданные как:

  • 'all' - Запуск всех начальных точек.

  • 'bounds' - Выполнение только тех начальных точек, которые удовлетворяют границам.

  • 'bounds-ineqs' - Запускать только стартовые точки, которые удовлетворяют границам и ограничениям неравенства.

GlobalSearch проверяет StartPointsToRun свойство только во время Этапа 2 GlobalSearch алгоритм (основной цикл). Для получения дополнительной информации см. «Алгоритм глобального поиска».

Пример: 'bounds' выполняются только те точки, которые удовлетворяют всем границам.

Типы данных: char | string

Допуск на расстояние для принятия решений равным, заданный как неотрицательный скаляр. Решатели считают два решения идентичными, если они находятся в XTolerance относительное расстояние друг от друга и иметь значения целевых функций в FunctionTolerance относительное различие между собой. Если оба условия не выполняются, решатели сообщают о решениях как об отличных. Задайте XTolerance на 0 для получения результатов каждого запуска локального решателя. Задайте XTolerance к большему значению, чтобы иметь меньше результатов. Для GlobalSearch подробности см. Update Solution Set в «Когда fmincon запускается». Для MultiStart см. раздел Создание объекта GlobalOptimSolution.

Пример: 2e-4

Типы данных: double

Функции объекта

runЗапустите решатель с несколькими стартами

Примеры

свернуть все

Создайте задачу оптимизации, которая имеет несколько локальных минимумов и попытайтесь найти глобальный минимум с помощью GlobalSearch. Цель состоит в том, чтобы решить проблему с шестью горбами (см. «Запуск решателя»).

rng default % For reproducibility
gs = GlobalSearch;
sixmin = @(x)(4*x(1)^2 - 2.1*x(1)^4 + x(1)^6/3 ...
    + x(1)*x(2) - 4*x(2)^2 + 4*x(2)^4);
problem = createOptimProblem('fmincon','x0',[-1,2],...
    'objective',sixmin,'lb',[-3,-3],'ub',[3,3]);
x = run(gs,problem)
GlobalSearch stopped because it analyzed all the trial points.

All 8 local solver runs converged with a positive local solver exit flag.
x = 1×2

   -0.0898    0.7127

Вы можете запросить значение целевой функции в x когда вы звоните run при помощи следующего синтаксиса:

[x,fval] = run(gs,problem)

Однако, если вы пренебрегли запросом fval, вы все еще можете вычислить значение целевой функции в x.

fval = sixmin(x)
fval = -1.0316

Рассмотрим функцию с несколькими локальными минимумами.

fun = @(x) x.^2 + 4*sin(5*x);
fplot(fun,[-5,5])

Figure contains an axes. The axes contains an object of type functionline.

Чтобы найти глобальный минимум, запустите GlobalSearch использование fmincon 'sqp' алгоритм.

rng default % For reproducibility
opts = optimoptions(@fmincon,'Algorithm','sqp');
problem = createOptimProblem('fmincon','objective',...
    fun,'x0',3,'lb',-5,'ub',5,'options',opts);
gs = GlobalSearch;
[x,f] = run(gs,problem)
GlobalSearch stopped because it analyzed all the trial points.

All 23 local solver runs converged with a positive local solver exit flag.
x = -0.3080
f = -3.9032

Создайте nondefault MultiStart объект.

ms = MultiStart('FunctionTolerance',2e-4,'UseParallel',true)
ms = 
  MultiStart with properties:

          UseParallel: 1
              Display: 'final'
    FunctionTolerance: 2.0000e-04
              MaxTime: Inf
            OutputFcn: []
              PlotFcn: []
     StartPointsToRun: 'all'
           XTolerance: 1.0000e-06

Создайте GlobalSearch объект, который использует доступные свойства из ms.

gs = GlobalSearch(ms)
gs = 
  GlobalSearch with properties:

             NumTrialPoints: 1000
          BasinRadiusFactor: 0.2000
    DistanceThresholdFactor: 0.7500
               MaxWaitCycle: 20
          NumStageOnePoints: 200
     PenaltyThresholdFactor: 0.2000
                    Display: 'final'
          FunctionTolerance: 2.0000e-04
                    MaxTime: Inf
                  OutputFcn: []
                    PlotFcn: []
           StartPointsToRun: 'all'
                 XTolerance: 1.0000e-06

gs имеет то же значение, что и nondefault, FunctionTolerance как ms. Но gs не использует UseParallel свойство.

Создайте GlobalSearch объект со FunctionTolerance от 1e-4.

gs = GlobalSearch('FunctionTolerance',1e-4)
gs = 
  GlobalSearch with properties:

             NumTrialPoints: 1000
          BasinRadiusFactor: 0.2000
    DistanceThresholdFactor: 0.7500
               MaxWaitCycle: 20
          NumStageOnePoints: 200
     PenaltyThresholdFactor: 0.2000
                    Display: 'final'
          FunctionTolerance: 1.0000e-04
                    MaxTime: Inf
                  OutputFcn: []
                    PlotFcn: []
           StartPointsToRun: 'all'
                 XTolerance: 1.0000e-06

Обновление XTolerance свойство к 1e-3 и StartPointsToRun свойство к 'bounds'.

gs = GlobalSearch(gs,'XTolerance',1e-3,'StartPointsToRun','bounds')
gs = 
  GlobalSearch with properties:

             NumTrialPoints: 1000
          BasinRadiusFactor: 0.2000
    DistanceThresholdFactor: 0.7500
               MaxWaitCycle: 20
          NumStageOnePoints: 200
     PenaltyThresholdFactor: 0.2000
                    Display: 'final'
          FunctionTolerance: 1.0000e-04
                    MaxTime: Inf
                  OutputFcn: []
                    PlotFcn: []
           StartPointsToRun: 'bounds'
                 XTolerance: 1.0000e-03

Можно также обновлять свойства по одному при помощи записи через точку.

gs.MaxTime = 1800
gs = 
  GlobalSearch with properties:

             NumTrialPoints: 1000
          BasinRadiusFactor: 0.2000
    DistanceThresholdFactor: 0.7500
               MaxWaitCycle: 20
          NumStageOnePoints: 200
     PenaltyThresholdFactor: 0.2000
                    Display: 'final'
          FunctionTolerance: 1.0000e-04
                    MaxTime: 1800
                  OutputFcn: []
                    PlotFcn: []
           StartPointsToRun: 'bounds'
                 XTolerance: 1.0000e-03

Алгоритмы

Подробное описание алгоритма смотрите в GlobalSearch Algorithm. Ugrey et al. [1] описывают как алгоритм, так и метод поиска рассеяния для генерации пробных точек.

Ссылки

[1] Угрей, Жолт, Леон Ласдон, Джон Пламмер, Фред Гловер, Джеймс Келли и Рафаэль Марти. Рассеяние и локальные решатели NLP: мультистартовая среда для глобальной оптимизации. Журнал ИНФОРМС по вычислению, том 19, № 3, 2007, стр. 328-340.

Введенный в R2010a