MultiStart

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

Описание

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

Создание

Синтаксис

ms = MultiStart
ms = MultiStart(Name,Value)
ms = MultiStart(oldMS,Name,Value)
ms = MultiStart(gs)

Описание

пример

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

пример

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

пример

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

пример

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

Свойства

развернуть все

Уровень отображения к Командному окну, заданному как один из следующих символьных массивов или строк:

  • 'final' – Сообщите об итоговых результатах после того, как run закончится.

  • 'iter' – Сообщите о результатах после каждого локального запущенного решателя, в дополнение к итоговым сводным данным.

  • '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

Стартовые точки, чтобы запуститься, заданный как:

  • все Запустите все стартовые точки.

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

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

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

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

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

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

  • tRUE Распределите локальные вызовы решателя нескольких процессоров.

Пример: true

Типы данных: логический

Допуск на расстоянии для рассмотрения решений, равных, заданных как неотрицательный скаляр. Решатели считают два решения идентичными, если они на расстоянии родственника 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])

Чтобы искать минимальную глобальную переменную, запустите MultiStart на 20 экземплярах проблемы с помощью алгоритма 'sqp' fmincon.

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

Создайте объект 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 имеет то же значение не по умолчанию 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.

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

Представленный в R2010a