Вы получаете несколько решений в объекте путем вызова run
с синтаксисом
[x,fval,eflag,output,manymins] = run(...);
manymins
является вектором объектов решения; смотрите GlobalOptimSolution
. Вектор manymins
в порядке значения целевой функции от самого низкого (лучше всего) к (худшему) самому высокому. Каждый объект решения содержит следующие свойства (поля):
X
локальный минимум
Fval
значение целевой функции при X
Exitflag
выходной флаг для локального решателя (описанный на локальной странице ссылки на функцию решателя: fmincon
exitflag
, fminunc
exitflag
, lsqcurvefit
exitflag
или lsqnonlin
exitflag
Вывод
выходная структура для локального решателя (описанный на локальной странице ссылки на функцию решателя: fmincon
output
, fminunc
output
, lsqcurvefit
output
или lsqnonlin
output
X0
массив ячеек стартовых точек, которые привели к решению, указывает X
Существует несколько способов исследовать вектор объектов решения:
В MATLAB® Workspace Browser. Дважды кликните объект решения, и затем дважды кликните получившееся отображение в редакторе Переменных.
Используя запись через точку. свойства GlobalOptimSolution
использованы для своей выгоды. Используйте соответствующую капитализацию, чтобы получить доступ к свойствам.
Например, чтобы найти вектор значений функции, введите:
fcnvals = [manymins.Fval] fcnvals = -1.0316 -0.2155 0
Получить массив ячеек всех стартовых точек, которые привели к самому низкому значению функции (первый элемент manymins
), введите:
smallX0 = manymins(1).X0
Постройте некоторые значения полей. Например, чтобы видеть область значений получившегося Fval
, введите:
histogram([manymins.Fval],10)
Это приводит к гистограмме вычисленных значений функции. (Данные показывают гистограмму от различного примера, чем предыдущие немного фигур.)
Вы можете узнать после получения нескольких локальных решений, что ваши допуски не были соответствующими. У вас может быть намного больше локальных решений, чем вы хотите, распределенный слишком тесно вместе. Или у вас может быть меньше решений, чем вы хотите с GlobalSearch
или MultiStart
, собирающим в группу вместе слишком много решений.
Чтобы справиться с этой ситуацией, запустите решатель снова с различными допусками. XTolerance
и допуски FunctionTolerance
определяют, как решатели группируют свои выходные параметры в вектор GlobalOptimSolution
. Эти допуски являются свойствами объекта GlobalSearch
или MultiStart
.
Например, предположите, что вы хотите использовать алгоритм active-set
в fmincon
, чтобы решить проблему в Примере Запущенных с MultiStart. Далее предположите, что вы хотите иметь допуски 0.01
и для XTolerance
и для FunctionTolerance
. Локальные решения групп метода run
, значения целевой функции которых в FunctionTolerance
друг друга, и которые являются также меньше, чем XTolerance
друг кроме друга. Получить решение:
% % Set the random stream to get exactly the same output % rng(14,'twister') ms = MultiStart('FunctionTolerance',0.01,'XTolerance',0.01); opts = optimoptions(@fmincon,'Algorithm','active-set'); 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],... 'options',opts); [xminm,fminm,flagm,outptm,someminsm] = run(ms,problem,50); MultiStart completed the runs from all start points. All 50 local solver runs converged with a positive local solver exit flag. someminsm someminsm = 1x5 GlobalOptimSolution Properties: X Fval Exitflag Output X0
В этом случае MultiStart
сгенерировал пять отличных решений. Здесь “отличный” означает, что решения - больше чем 0,01 независимо или в значении целевой функции или в местоположении.