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

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

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

Похожие темы