Запустите решатель с несколькими стартами
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 из регулярного массиваСоздайте набор начальных точек 2-D для 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
Восемь локальных запусков решателя нашли четыре решения. The funcCount выход показывает, что fmincon потребовалось не более 40 вычисления функции, чтобы достичь каждого из четырех решений. Выходные выходы не показывают, сколько функций вычисляет четыре из fmincon выполняются. Большинство вычислений функции 2261, по-видимому, предназначены для 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 выходной флаг. |
localSolverNoSolution | Количество запусков локального решателя с отрицательным выходным флагом. |
localSolverSuccess | Количество запусков локального решателя с положительным выходным флагом. |
localSolverTotal | Общее количество запусков локального решателя. |
message | Выходное сообщение. |
solutions - Отдельные локальные решенияGlobalOptimSolution объектыОтдельные локальные решения, возвращенные как вектор GlobalOptimSolution объекты.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.