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