Запуститесь несколько - запускают решатель
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
Используйте MultiStart
по умолчанию объект решить проблему с позвоночником верблюда с шестью горбами (см. Запуск Решатель).
rng default % For reproducibility ms = MultiStart; 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,fval,exitflag,outpt,solutions] = run(ms,problem,30);
MultiStart completed the runs from all start points. All 30 local solver runs converged with a positive local solver exit flag.
Исследуйте лучшее значение функции и местоположение, где лучшее значение функции достигнуто.
fprintf('The best function value is %f.\n',fval)
The best function value is -1.031628.
fprintf('The location where this value is attained is [%f,%f].',x)
The location where this value is attained is [-0.089842,0.712656].
MultiStart
от регулярного массиваСоздайте набор начальных 2D точек для MultiStart
в области значений [-3,3]
для каждого компонента.
v = -3:0.5:3; [X,Y] = meshgrid(v); ptmatrix = [X(:),Y(:)]; tpoints = CustomStartPointSet(ptmatrix);
Найдите точку, которая минимизирует проблему с позвоночником верблюда с шестью горбами (см. Запуск Решатель) путем запуска MultiStart
в точках в tpoints
.
rng default % For reproducibility ms = MultiStart; 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(ms,problem,tpoints)
MultiStart completed the runs from all start points. All 169 local solver runs converged with a positive local solver exit flag.
x = 1×2
0.0898 -0.7127
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,fval,exitflag,output,solutions] = 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.
Понять что GlobalSearch
сделал, чтобы решить эту задачу, исследовать output
структура и solutions
объект.
disp(output)
funcCount: 2245 localSolverTotal: 8 localSolverSuccess: 8 localSolverIncomplete: 0 localSolverNoSolution: 0 message: 'GlobalSearch stopped because it analyzed all the trial points....'
GlobalSearch
оцененный времена целевой функции 2261.
GlobalSearch
запустил fmincon
запуск с восьми различных точек.
Весь fmincon
запуски сходились успешно к локальному решению.
disp(solutions)
1x4 GlobalOptimSolution array with properties: X Fval Exitflag Output X0
arrayfun(@(x)x.Output.funcCount,solutions)
ans = 1×4
31 34 40 3
Восемь локальных запусков решателя нашли четыре решения. funcCount
выведите показывает тот fmincon
взял не больше, чем 40 вычислений функции, чтобы достигнуть каждого из этих четырех решений. Выход не показывает сколько вычислений функции четыре из fmincon
запуски взяли. Большинство этого 2 261 вычисления функции, кажется, для GlobalSearch
оценивать испытательные точки, не для fmincon
запускать запуск с тех точек.
gs
— GlobalSearch
решательGlobalSearch
объектGlobalSearch
решатель в виде GlobalSearch
объект. Создайте gs
использование GlobalSearch
команда.
ms
— MultiStart
решательMultiStart
объектMultiStart
решатель в виде MultiStart
объект. Создайте ms
использование MultiStart
команда.
problem
— Задача оптимизацииЗадача оптимизации в виде структуры задачи. Создайте problem
использование createOptimProblem
. Для получения дальнейшей информации смотрите, Создают Структуру задачи.
Пример: problem = createOptimProblem('fmincon','objective',fun,'x0',x0,'lb',lb)
Типы данных: struct
k
— Количество стартовых точекКоличество стартовых точек в виде положительного целого числа. MultiStart
генерирует k - 1
стартовые точки с помощью того же алгоритма что касается RandomStartPointSet
объект. MultiStart
также использует x0
укажите от problem
структура.
Пример: 50
Типы данных: double
startpts
— Стартовые точки для MultiStart
CustomStartPointSet
возразите | RandomStartPointSet
возразите | массив ячеек таких объектовСтартовые точки для MultiStart
В виде CustomStartPointSet
объект, как RandomStartPointSet
объект, или как массив ячеек таких объектов.
Пример: {custompts,randompts}
x
— Лучшая точка найденаЛучшая найденная точка, возвратилась как действительный массив. Лучшая точка является той с самым низким значением целевой функции.
fval
— С самым низким значением целевой функции сталкиваютсяСамое низкое значение целевой функции, с которым сталкиваются, возвратилось как действительный скаляр. Для lsqcurvefit
и lsqnonlin
, целевая функция является суммой квадратов, также известной как норму в квадрате невязки.
exitflag
— Выйдите из сводных данных условияВыйдите из сводных данных условия, возвращенных как целое число.
2
| По крайней мере один локальный минимум найден. Сходились некоторые запуски локального решателя. |
1
| По крайней мере один локальный минимум найден. Все запуски локального решателя сходились. |
0
| Никакой локальный минимум не найден. Локальный решатель, названный, по крайней мере, однажды и по крайней мере один локальный решатель, превысили MaxIterations или MaxFunctionEvaluations допуски. |
-1
| Один или несколько локальных запусков решателя зашли в локальный решатель выход или функция построения графика. |
-2
| Никакой выполнимый локальный минимум не найден. |
-5
| MaxTime предел превышен. |
-8
| Никакое решение не найдено. Все запуски имели локальный выходной флаг -2 решателя или меньший, не весь равный -2 . |
-10
| С отказами сталкиваются в обеспеченных пользователями функциях. |
output
— Детали процесса решенияДетали процесса решения, возвращенные как структура со следующими полями.
Поле | Значение |
---|---|
funcCount | Количество вычислений функции. |
localSolverIncomplete | Количество локального решателя запускается с 0 exitflag . |
localSolverNoSolution | Количество локального решателя запускается с отрицательным выходным флагом. |
localSolverSuccess | Количество локального решателя запускается с положительным выходным флагом. |
localSolverTotal | Общее количество локальных запусков решателя. |
message | Выходное сообщение. |
solutions
— Отличные локальные решенияGlobalOptimSolution
объектыОтличные локальные решения, возвращенные как вектор GlobalOptimSolution
объекты.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.