run

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

Описание

пример

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(___) также возвращает выходной флаг, описывающий условие возврата, и структуру output, описывающий итерации запуска.

пример

[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

Восемь локальных запусков решателя нашли четыре решения. The 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