Найти глобальный минимум
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
решатель.
BasinRadiusFactor
- Коэффициент уменьшения радиуса умывальной раковины0.2
(по умолчанию) | скаляр из 0
через 1
Коэффициент уменьшения радиуса умывальной раковины, заданный как скаляр от 0
через 1
. Радиус умывальной раковины уменьшается после MaxWaitCycle
последовательные начальные точки находятся в умывальных раковинах. Радиус умывальной раковины уменьшается в 1 - BasinRadiusFactor
раз.
Задайте BasinRadiusFactor
на 0
отключить обновление радиуса умывальной раковины.
Пример:
0.5
Типы данных: double
Display
- Level of display в Командном окне'final'
(по умолчанию) | 'iter'
| 'off'
Level of display в Командном окне, заданный как один из следующих векторов символов или строк:
'final'
- Сообщите обобщенные результаты после run
концы.
'iter'
- Сообщить о результатах после начального fmincon
пробежать, после Этапа 1, после каждые 200 стартовых точек, и после каждого запуска fmincon
, в дополнение к окончательным сводным данным.
'off'
- Нет отображения.
Пример:
'iter'
Типы данных: char
| string
DistanceThresholdFactor
- Умножитель для определения пробной точки находится в существующей умывальной раковине0.75
(по умолчанию) | неотрицательной скаляромУмножитель для определения, находится ли пробная точка в существующей области притяжения, заданный как неотрицательный скаляр. Для получения дополнительной информации смотрите Исследуйте пробную точку этапа 2, чтобы увидеть, работает ли fmincon.
Пример: 0.5
Типы данных: double
FunctionTolerance
- Допуск на значения функций для принятия решений равным1e-6
(по умолчанию) | неотрицательной скаляромДопуск на значения функции для принятия решений равным, заданный как неотрицательный скаляр. Решатели считают два решения идентичными, если они находятся в XTolerance
относительное расстояние друг от друга и иметь значения целевых функций в FunctionTolerance
относительное различие между собой. Если оба условия не выполняются, решатели сообщают о решениях как об отличных. Задайте FunctionTolerance
на 0
для получения результатов каждого запуска локального решателя. Задайте FunctionTolerance
к большему значению, чтобы иметь меньше результатов. Для GlobalSearch
подробности см. Update Solution Set в «Когда fmincon запускается». Для MultiStart
см. раздел Создание объекта GlobalOptimSolution.
Пример:
1e-4
Типы данных: double
MaxTime
- Максимальное время в секундах выполнения GlobalSearchInf
(по умолчанию) | положительная скалярная величинаМаксимальное время в секундах выполнения GlobalSearch, заданное как положительная скалярная величина. GlobalSearch и его локальные решатели останавливаются, когда MaxTime
секунды прошли с начала запуска, как измерено tic
и toc
.
MaxTime
не прерывает локальные решатели во время запуска, поэтому общее время может превысить MaxTime
.
Пример: 180
останавливает решатель в первый раз, когда вызов локального решателя заканчивается через 180 секунд.
Типы данных: double
MaxWaitCycle
- Параметр управления алгоритмом20
(по умолчанию) | положительное целое числоПараметр управления алгоритмом, заданный как положительное целое число.
Если наблюдаемая штрафная функция MaxWaitCycle
последовательные пробные точки - это, по крайней мере, порог штрафа, затем повышайте порог штрафа (см. PenseThresholdFactor).
Если MaxWaitCycle
последовательные пробные точки находятся в умывальной раковине, затем обновляется радиус умывальной раковины (см. BasinRadiusFactor).
Пример: 40
Типы данных: double
NumStageOnePoints
- Количество точек 1 этапа200
(по умолчанию) | положительное целое числоКоличество точек 1 этапа, заданное как положительное целое число. Для получения дополнительной информации смотрите Получение начальной точки этапа 1, Запуск.
Пример: 1000
Типы данных: double
NumTrialPoints
- Количество потенциальных начальных точек1000
(по умолчанию) | положительное целое числоКоличество потенциальных начальных точек, заданное как положительное целое число.
Пример: 3e4
Типы данных: double
OutputFcn
- Отчет о прогрессе решателя или остановке решателя[]
(по умолчанию) | указатель на функцию | cell-массив указателей на функциюОтчет о прогрессе решателя или решение остановки, заданный как указатель на функцию или cell-массив указателей на функцию. Выходные функции выполняются после каждого вызова локального решателя. Они также запускаются, когда глобальный решатель запускается и заканчивается. Напишите выходные функции с помощью синтаксиса, описанного в OutputFcn. Смотрите Выходную функцию GlobalSearch.
Типы данных: cell
| function_handle
PenaltyThresholdFactor
- Увеличение порога штрафов0.2
(по умолчанию) | положительная скалярная величинаУвеличение порога штрафа, заданное как положительная скалярная величина. Для получения дополнительной информации смотрите Реакцию на Большие Значения Счетчика.
Пример: 0.4
Типы данных: double
PlotFcn
- Постройте график прогресса решателя[]
(по умолчанию) | указатель на функцию | cell-массив указателей на функциюПостройте график прогресса решателя, заданный как указатель на функцию или cell-массив указателей на функцию. Функции построения графика выполняются после каждого вызова локального решателя. Они также запускаются, когда глобальный решатель запускается и заканчивается. Напишите функции построения графика с помощью синтаксиса, описанного в OutputFcn.
Существует две встроенные функции построения графика:
@gsplotbestf
строит графики наилучшего значения целевой функции.
@gsplotfunccount
строит графики количества вычислений функции.
См. раздел Функции построения графика MultiStart.
Пример:
@gsplotbestf
Типы данных: cell
| function_handle
StartPointsToRun
- Стартовые точки для запуска'all'
(по умолчанию) | 'bounds'
| 'bounds-ineqs'
Начальные точки для запуска, заданные как:
'all'
- Запуск всех начальных точек.
'bounds'
- Выполнение только тех начальных точек, которые удовлетворяют границам.
'bounds-ineqs'
- Запускать только стартовые точки, которые удовлетворяют границам и ограничениям неравенства.
GlobalSearch
проверяет StartPointsToRun
свойство только во время Этапа 2 GlobalSearch
алгоритм (основной цикл). Для получения дополнительной информации см. «Алгоритм глобального поиска».
Пример:
'bounds' выполняются только те точки, которые удовлетворяют всем границам.
Типы данных: char
| string
XTolerance
- Допуск на расстояние для принятия решений равным1e-6
(по умолчанию) | неотрицательной скаляромДопуск на расстояние для принятия решений равным, заданный как неотрицательный скаляр. Решатели считают два решения идентичными, если они находятся в XTolerance
относительное расстояние друг от друга и иметь значения целевых функций в FunctionTolerance
относительное различие между собой. Если оба условия не выполняются, решатели сообщают о решениях как об отличных. Задайте XTolerance
на 0
для получения результатов каждого запуска локального решателя. Задайте XTolerance
к большему значению, чтобы иметь меньше результатов. Для GlobalSearch
подробности см. Update Solution Set в «Когда fmincon запускается». Для MultiStart
см. раздел Создание объекта GlobalOptimSolution.
Пример: 2e-4
Типы данных: double
run | Запустите решатель с несколькими стартами |
GlobalSearch
по многомерной задачеСоздайте задачу оптимизации, которая имеет несколько локальных минимумов и попытайтесь найти глобальный минимум с помощью 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
GlobalSearch
по 1-D задачеРассмотрим функцию с несколькими локальными минимумами.
fun = @(x) x.^2 + 4*sin(5*x); fplot(fun,[-5,5])
Чтобы найти глобальный минимум, запустите 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
GlobalSearch
Использование общих свойств из MultiStart
Создайте 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
СвойстваСоздайте 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.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.