Выбор и управление решателем для оптимизации PortfolioMAD

При решении оптимизации портфеля для PortfolioMAD объект, вы решаете нелинейные задачи оптимизации с нелинейными целевыми или нелинейными ограничениями. Можно использовать 'TrustRegionCP' (по умолчанию) или 'ExtendedCP' решатели, которые реализуют метод секущей плоскости Келли (см. Келли [45] в Portfolio Optimization). Также можно использовать fmincon и все изменения fmincon Из Optimization Toolbox™ поддерживаются. При использовании fmincon как solverType, 'sqp' является алгоритмом по умолчанию для fmincon.

Использование 'TrustRegionCP' и 'ExtendedCP' SolverTypes

The 'TrustRegionCP' и 'ExtendedCP' решатели имеют опции для управления итерациями числа и остановкой допусков. Более того, эти решатели используют linprog как главный решатель, и все linprog опции поддерживаются с помощью optimoptions структуры. Все эти опции заданы с помощью setSolver.

Для примера можно использовать setSolver увеличить количество итераций для 'TrustRegionCP':

p = PortfolioMAD;
p = setSolver(p, 'TrustRegionCP', 'MaxIterations', 2000);
display(p.solverType)
display(p.solverOptions)
trustregioncp
                MaxIterations: 2000
         AbsoluteGapTolerance: 1.0000e-07
         RelativeGapTolerance: 1.0000e-05
       NonlinearScalingFactor: 1000
       ObjectiveScalingFactor: 1000
          MasterSolverOptions: [1×1 optim.options.Linprog]
                      Display: 'off'
                CutGeneration: 'basic'
     MaxIterationsInactiveCut: 30
           ActiveCutTolerance: 1.0000e-07
                  ShrinkRatio: 0.7500
    TrustRegionStartIteration: 2
                   DeltaLimit: 1

Чтобы изменить алгоритм главного решателя на 'interior-point', без отображения, используйте setSolver для изменения 'MasterSolverOptions':

p = PortfolioMAD;
options = optimoptions('linprog','Algorithm','interior-point','Display','off');
p = setSolver(p,'TrustRegionCP','MasterSolverOptions',options);
display(p.solverType)
display(p.solverOptions)
display(p.solverOptions.MasterSolverOptions.Algorithm)
display(p.solverOptions.MasterSolverOptions.Display)
trustregioncp
                MaxIterations: 1000
         AbsoluteGapTolerance: 1.0000e-07
         RelativeGapTolerance: 1.0000e-05
       NonlinearScalingFactor: 1000
       ObjectiveScalingFactor: 1000
          MasterSolverOptions: [1×1 optim.options.Linprog]
                      Display: 'off'
                CutGeneration: 'basic'
     MaxIterationsInactiveCut: 30
           ActiveCutTolerance: 1.0000e-07
                  ShrinkRatio: 0.7500
    TrustRegionStartIteration: 2
                   DeltaLimit: 1

interior-point
off

Использование 'fmincon' SolverType

В отличие от Optimization Toolbox, который использует 'interior-point' алгоритм как алгоритм по умолчанию для fmincon, оптимизация портфеля для PortfolioMAD объект использует 'sqp' алгоритм как значение по умолчанию. Для получения дополнительной информации о fmincon и ограниченные нелинейные алгоритмы оптимизации и опции, см. Ограниченные нелинейные алгоритмы оптимизации.

Изменить fmincon опции для оптимизации портфеля MAD, использование setSolver чтобы задать скрытые свойства solverType и solverOptions для определения и управления решателем. Поскольку эти свойства решателя скрыты, вы не можете задать их с помощью PortfolioMAD объект. Значение по умолчанию для fmincon решатель является 'sqb' алгоритм и отсутствие отображаемого выхода, поэтому вам не нужно использовать setSolver для задания 'sqp' алгоритм для fmincon.

p = PortfolioMAD;
p = setSolver(p, 'fmincon');
display(p.solverOptions.Algorithm)
display(p.solverOptions.Display)
sqp
off

Если вы хотите задать дополнительные опции, связанные с fmincon решатель, setSolver принимает эти опции как аргументы пары "имя-значение". Для примера, если вы хотите использовать fmincon с 'active-set' алгоритм и с отображенным выходом, используйте setSolver с:

p = PortfolioMAD;
p = setSolver(p, 'fmincon', 'Algorithm', 'active-set', 'Display', 'final');
display(p.solverOptions)
fmincon options:

   Options used by current Algorithm ('active-set'):
   (Other available algorithms: 'interior-point', 'sqp', 'sqp-legacy', 'trust-region-reflective')

   Set properties:
                    Algorithm: 'active-set'
                      Display: 'final'

   Default properties:
               CheckGradients: 0
          ConstraintTolerance: 1.0000e-06
     FiniteDifferenceStepSize: 'sqrt(eps)'
         FiniteDifferenceType: 'forward'
            FunctionTolerance: 1.0000e-06
       MaxFunctionEvaluations: '100*numberOfVariables'
                MaxIterations: 400
          OptimalityTolerance: 1.0000e-06
                    OutputFcn: []
                      PlotFcn: []
    SpecifyConstraintGradient: 0
     SpecifyObjectiveGradient: 0
                StepTolerance: 1.0000e-06
                     TypicalX: 'ones(numberOfVariables,1)'
                  UseParallel: 0

Кроме того, setSolver функция принимает optimoptions объект как второй аргумент. Для примера можно изменить алгоритм на 'active-set' без отображаемых выходов следующим образом:

p = PortfolioMAD;
options = optimoptions('fmincon', 'Algorithm', 'active-set', 'Display', 'off');
p = setSolver(p, 'fmincon', options);
display(p.solverOptions.Algorithm)
display(p.solverOptions.Display)
active-set
off

Использование смешанного Целого числа нелинейного программирования (MINLP) Решателя

Смешанный целочисленный решатель нелинейного программирования (MINLP), сконфигурированный с помощью setSolverMINLP, позволяет вам задать связанные опции решателя для оптимизации портфеля для PortfolioMAD объект. Решатель MINLP используется, когда любой один, или любая комбинация 'Conditional' BoundType, MinNumAssets, или MaxNumAssets ограничения активны, задача портфеля сформулирована путем добавления NumAssets двоичные переменные, где 0 указывает на отсутствие инвестиций, и 1 инвестируется. Для получения дополнительной информации об использовании 'Conditional' BoundType, см. setBounds. Для получения дополнительной информации об указании MinNumAssets и MaxNumAssets, см. setMinMaxNumAssets.

При использовании estimate функции со PortfolioMAD объект, где 'Conditional' BoundType, MinNumAssets, или MaxNumAssets ограничения активны, автоматически используется целое число смешанного решателя нелинейного программирования (MINLP).

Инструкции решателя для объектов PortfolioMAD

В следующей таблице приведены инструкции по использованию setSolver и setSolverMINLP.

Задача PortfolioMADФункция PortfolioMADТип задачи оптимизацииОсновной решатель Вспомогательный решатель
PortfolioMAD без активных 'Conditional' BoundType, MinNumAssets, и MaxNumAssetsestimateFrontierByRiskОптимизация портфеля для определенного уровня риска вводит нелинейное ограничение. Поэтому эта задача имеет линейную цель с линейными и нелинейными ограничениями.'TrustRegionCP', 'ExtendedCP', или 'fmincon' использование setSolver

'linprog' использование setSolver

PortfolioMAD без активных 'Conditional' BoundType, MinNumAssets, и MaxNumAssetsestimateFrontierByReturnНелинейная цель с линейными ограничениями'TrustRegionCP', 'ExtendedCP', или 'fmincon' использование setSolver

'linprog' использование setSolver

PortfolioMAD без активных 'Conditional' BoundType, MinNumAssets, и MaxNumAssetsestimateFrontierLimits

Нелинейный или линейный объект с линейными ограничениями

Для ‘min’: нелинейная цель, 'TrustRegionCP', 'ExtendedCP', или 'fmincon' использование setSolver

Для ‘max’: линейная цель, 'linprog' использование setSolver

Не применяется
PortfolioMAD с активными 'Conditional' BoundType, MinNumAssets, и MaxNumAssetsestimateFrontierByRiskПроблема сформулирована путем введения NumAssets двоичные переменные, чтобы указать, инвестирован ли соответствующий актив или нет. Поэтому это требует смешанного целочисленного нелинейного решателя программирования. Предлагаются три типа решателей MINLP, см. setSolverMINLP.Смешанный целочисленный решатель нелинейного программирования (MINLP) с использованием setSolverMINLP'fmincon' используется, когда estimate функции сокращают задачу до NLP. Этот решатель сконфигурирован через setSolver.
PortfolioMAD с активными 'Conditional' BoundType, MinNumAssets, и MaxNumAssetsestimateFrontierByReturnПроблема сформулирована путем введения NumAssets двоичные переменные, чтобы указать, инвестирован ли соответствующий актив или нет. Поэтому это требует смешанного целочисленного нелинейного решателя программирования. Предлагаются три типа решателей MINLP, см. setSolverMINLP.Смешанный целочисленный решатель нелинейного программирования (MINLP) с использованием setSolverMINLP'fmincon' используется, когда estimate функции сокращают задачу до NLP. Этот решатель сконфигурирован через setSolver
PortfolioMAD с активными 'Conditional' BoundType, MinNumAssets, и MaxNumAssetsestimateFrontierLimitsПроблема сформулирована путем введения NumAssets двоичные переменные, чтобы указать, инвестирован ли соответствующий актив или нет. Поэтому это требует смешанного целочисленного нелинейного решателя программирования. Предлагаются три типа решателей MINLP, см. setSolverMINLP.Смешанный целочисленный решатель нелинейного программирования (MINLP) с использованием setSolverMINLP'fmincon' используется, когда estimate функции сокращают задачу до NLP. Этот решатель сконфигурирован через setSolver

См. также

| | | | | | | | |

Похожие примеры

Подробнее о