Вы получаете несколько решений в объекте путем вызова run
с синтаксисом
[x,fval,eflag,output,manymins] = run(...);
manymins
вектор объектов решения; смотрите GlobalOptimSolution
. manymins
вектор в порядке значения целевой функции от самого низкого (лучше всего) к (худшему) самому высокому. Каждый объект решения содержит следующие свойства (поля):
X
— локальный минимум
Fval
— значение целевой функции при X
Exitflag
— выходной флаг для локального решателя (описанный на локальной странице ссылки на функцию решателя: fmincon
exitflag
, fminunc
exitflag
, lsqcurvefit
exitflag
, или lsqnonlin
exitflag
Output
— структура output для локального решателя (описанный на локальной странице ссылки на функцию решателя: 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 независимо или в значении целевой функции или в местоположении.