MultiStart

Найти несколько локальных минимумов

Описание

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

Создание

Описание

пример

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

пример

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

пример

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

пример

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

Свойства

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

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

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

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

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

Пример: 'iter'

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

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

Пример: 1e-4

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

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

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

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

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

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

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

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

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

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

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

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

Пример: @gsplotbestf

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

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

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

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

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

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

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

Распределите вызовы локальных решателей нескольким процессорам, задав это как false или true.

  • false - Не запускать параллельно.

  • true - Распределите вызовы локального решателя по нескольким процессорам.

Пример: true

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

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

Пример: 2e-4

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

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

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

Примеры

свернуть все

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

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

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

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

rng default % For reproducibility
opts = optimoptions(@fmincon,'Algorithm','sqp');
problem = createOptimProblem('fmincon','objective',...
    fun,'x0',3,'lb',-5,'ub',5,'options',opts);
ms = MultiStart;
[x,f] = run(ms,problem,20)
MultiStart completed the runs from all start points.

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

Создайте MultiStart объект со свойствами по умолчанию.

ms = MultiStart
ms = 
  MultiStart with properties:

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

Создайте MultiStart объект с более свободными допусками, чем по умолчанию, поэтому решатель возвращает меньше решений, которые близки друг к другу. Кроме того, иметь MultiStart запускать только начальные точки, которые допустимы относительно границ и ограничений неравенства.

ms = MultiStart('FunctionTolerance',2e-4,'XTolerance',5e-3,...
    'StartPointsToRun','bounds-ineqs')
ms = 
  MultiStart with properties:

          UseParallel: 0
              Display: 'final'
    FunctionTolerance: 2.0000e-04
              MaxTime: Inf
            OutputFcn: []
              PlotFcn: []
     StartPointsToRun: 'bounds-ineqs'
           XTolerance: 0.0050

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

gs = GlobalSearch('FunctionTolerance',2e-4,'NumTrialPoints',2000)
gs = 
  GlobalSearch with properties:

             NumTrialPoints: 2000
          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

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

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

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

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

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

ms = MultiStart('FunctionTolerance',1e-4)
ms = 
  MultiStart with properties:

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

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

ms = MultiStart(ms,'XTolerance',1e-3,'StartPointsToRun','bounds')
ms = 
  MultiStart with properties:

          UseParallel: 0
              Display: 'final'
    FunctionTolerance: 1.0000e-04
              MaxTime: Inf
            OutputFcn: []
              PlotFcn: []
     StartPointsToRun: 'bounds'
           XTolerance: 1.0000e-03

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

ms.MaxTime = 1800
ms = 
  MultiStart with properties:

          UseParallel: 0
              Display: 'final'
    FunctionTolerance: 1.0000e-04
              MaxTime: 1800
            OutputFcn: []
              PlotFcn: []
     StartPointsToRun: 'bounds'
           XTolerance: 1.0000e-03

Алгоритмы

Подробное описание алгоритма смотрите в MultiStart Algorithm.

Расширенные возможности

Введенный в R2010a