Запуститесь несколько - запускают решатель
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 — решатель GlobalSearchGlobalSearchРешатель GlobalSearch, заданный как объект GlobalSearch. Создайте gs с помощью команды GlobalSearch.
ms — решатель MultiStartMultiStartРешатель 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 — Стартовые точки для MultiStartCustomStartPointSet | объект 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.