exponenta event banner

управляемый

Запуск решателя с несколькими запусками

Описание

пример

x = run(gs,problem) пробеги GlobalSearch для поиска решения или нескольких локальных решений problem.

пример

x = run(ms,problem,k) пробеги MultiStart на k начальные точки для поиска решения или нескольких локальных решений problem.

пример

x = run(ms,problem,startpts) пробеги MultiStart на problem от начальных точек, описанных в startpts.

пример

[x,fval] = run(___) возвращает значение целевой функции при x, наилучшая точка найдена, используя любой из аргументов в предыдущих синтаксисах. Для lsqcurvefit и lsqnonlin локальные решатели, fval содержит квадратную норму остатка.

пример

[x,fval,exitflag,output] = run(___) также возвращает флаг выхода, описывающий условие возврата, и структуру вывода, описывающую итерации прогона.

пример

[x,fval,exitflag,output,solutions] = run(___) также возвращает вектор решений, содержащий отдельные локальные минимумы, найденные во время выполнения.

Примеры

свернуть все

Создайте задачу оптимизации с несколькими локальными минимумами и попробуйте найти глобальный минимум с помощью 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].

Создание набора начальных точек 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. Целью является проблема с возвращением верблюда с шестью горбами (см. Запуск решателя).

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 для запуска начиная с этих точек.

Входные аргументы

свернуть все

GlobalSearch решатель, указанный как GlobalSearch объект. Создать gs с использованием GlobalSearch команда.

MultiStart решатель, указанный как MultiStart объект. Создать ms с использованием MultiStart команда.

Задача оптимизации, указанная как структура проблемы. Создать problem использование createOptimProblem. Дополнительные сведения см. в разделе Создание структуры проблем.

Пример: problem = createOptimProblem('fmincon','objective',fun,'x0',x0,'lb',lb)

Типы данных: struct

Число начальных точек, указанное как положительное целое число. MultiStart производит k - 1 начальные точки с использованием того же алгоритма, что и для RandomStartPointSet объект. MultiStart также использует x0 точка из problem структура.

Пример: 50

Типы данных: double

Начальные точки для MultiStart, указано как CustomStartPointSet объект, как RandomStartPointSet или в виде массива ячеек таких объектов.

Пример: {custompts,randompts}

Выходные аргументы

свернуть все

Наилучшая точка, возвращенная как реальный массив. Лучшей точкой является точка с наименьшим значением целевой функции.

Встречается наименьшее значение целевой функции, возвращаемое как действительный скаляр. Для lsqcurvefit и lsqnonlin, целевая функция - это сумма квадратов, также известная как квадратичная норма остатка.

Сводка условий выхода, возвращенная как целое число.

2Найдено по крайней мере одно локальное минимальное значение. Несколько запусков локального решателя сошлись.
1Найдено по крайней мере одно локальное минимальное значение. Все прогоны локального решателя сходятся.
0Локальный минимум не найден. Локальный решатель вызывается по крайней мере один раз, и по крайней мере один локальный решатель превышает значение MaxIterations или MaxFunctionEvaluations допуски.
-1Один или несколько локальных запусков решателя останавливаются локальным выводом решателя или функцией печати.
-2Выполнимый локальный минимум не найден.
-5MaxTime превышен предел.
-8Решение не найдено. Для всех прогонов установлен флаг выхода из локального решателя -2 или меньше, но не все равны -2.
-10Ошибки, обнаруженные в предоставленных пользователем функциях.

Подробные данные процесса решения, возвращенные в виде структуры со следующими полями.

ОбластьЗначение
funcCountКоличество оценок функций.
localSolverIncompleteКоличество запусков локального решателя с 0 флаг выхода.
localSolverNoSolutionЧисло запусков локального решателя с отрицательным флагом выхода.
localSolverSuccessЧисло запусков локального решателя с положительным флагом выхода.
localSolverTotalОбщее число запусков локального решателя.
messageВыйти из сообщения.

Отдельные локальные решения, возвращаемые как вектор GlobalOptimSolution объекты.

Представлен в R2010a