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

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

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

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте