Запуститесь несколько - запускают решатель
x = run(gs,problem)
x = run(ms,problem,k)
x = run(ms,problem,startpts)
[x,fval] = run(___)
[x,fval,exitflag,output] = run(___)
[x,fval,exitflag,output,solutions] = 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
Используйте объект 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: 2261 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 | Никакой локальный минимум не найден. Локальный решатель, названный, по крайней мере, однажды и по крайней мере один локальный решатель, превысили допуски MaxFunctionEvaluations или MaxIterations . |
-1 | Одно или несколько локальных выполнений решателя зашли в локальный решатель вывод или функция построения графика. |
-2 | Никакой выполнимый локальный минимум не найден. |
-5 | Предел MaxTime превышен. |
-8 | Никакое решение не найдено. Все выполнения имели локальный выходной флаг -2 решателя или меньший, не весь равный -2 . |
-10 | С отказами сталкиваются в обеспеченных пользователями функциях. |
вывод
Детали процесса решенияДетали процесса решения, возвращенные как структура со следующими полями.
Поле | Значение |
---|---|
funcCount | Количество функциональных оценок. |
localSolverIncomplete | Количество локального решателя запускается с выходным флагом 0 . |
localSolverNoSolution | Количество локального решателя запускается с отрицательным выходным флагом. |
localSolverSuccess | Количество локального решателя запускается с положительным выходным флагом. |
localSolverTotal | Общее количество локальных выполнений решателя. |
message | Выходное сообщение. |
solutions
— Отличные локальные решенияGlobalOptimSolution
Отличные локальные решения, возвращенные как вектор объектов GlobalOptimSolution
.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.