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