Вы получаете несколько решений в объекте, вызывая run
с синтаксисом
[x,fval,eflag,output,manymins] = run(...);
manymins
- вектор объектов решения; см. GlobalOptimSolution
. The 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
объединение слишком многих решений.
Чтобы справиться с этой ситуацией, запустите решатель снова с различными допусками. The XTolerance
и FunctionTolerance
допуски определяют, как решатели группируют свои выходы в GlobalOptimSolution
вектор. Эти допуски являются свойствами GlobalSearch
или MultiStart
объект.
Например, предположим, что вы хотите использовать active-set
алгоритм в fmincon
чтобы решить проблему в примере выполнения с MultiStart. Далее предположим, что вы хотите иметь допуски 0.01
для обоих XTolerance
и FunctionTolerance
. The 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 разнесены либо в значении целевой функции, либо в местоположении.