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].

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

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 запуски взяли. Большинство этого 2 261 вычисления функции, кажется, для 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 exitflag .
localSolverNoSolutionКоличество локального решателя запускается с отрицательным выходным флагом.
localSolverSuccessКоличество локального решателя запускается с положительным выходным флагом.
localSolverTotalОбщее количество локальных запусков решателя.
messageВыходное сообщение.

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

Введен в R2010a