Несколько решений

О нескольких решениях

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

Похожие темы