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



Использование точечной нотации. 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 в значении целевой функции или местоположении.