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

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

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

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

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

p = PortfolioCVaR;
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 = PortfolioCVaR;
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, оптимизация портфеля для PortfolioCVaR объект использует sqp алгоритм. Для получения дополнительной информации о fmincon и ограниченные нелинейные алгоритмы оптимизации и опции, см. Ограниченные нелинейные алгоритмы оптимизации.

Изменить fmincon опции для оптимизации портфеля CVaR, использование setSolver чтобы задать скрытые свойства solverType и solverOptions для определения и управления решателем. (Обратите внимание, что опции по умолчанию можно увидеть, создав манекен PortfolioCVaR объект, использование p = PortfolioCVaR а затем введите p.solverOptions.) Поскольку эти свойства решателя скрыты, вы не можете задать их с помощью PortfolioCVaR объект. Значение по умолчанию для fmincon решатель должен использовать sqp целевая функция алгоритма, градиенты включены, и не отображается выход, поэтому вам не нужно использовать setSolver для задания sqp алгоритм.

p = PortfolioCVaR;
p = setSolver(p, 'fmincon');
display(p.solverOptions)
fmincon options:

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

   Set properties:
                    Algorithm: 'sqp'
          ConstraintTolerance: 1.0000e-08
                      Display: 'off'
          OptimalityTolerance: 1.0000e-08
    SpecifyConstraintGradient: 1
     SpecifyObjectiveGradient: 1
                StepTolerance: 1.0000e-08

   Default properties:
               CheckGradients: 0
     FiniteDifferenceStepSize: 'sqrt(eps)'
         FiniteDifferenceType: 'forward'
       MaxFunctionEvaluations: '100*numberOfVariables'
                MaxIterations: 400
               ObjectiveLimit: -1.0000e+20
                    OutputFcn: []
                      PlotFcn: []
                 ScaleProblem: 0
                     TypicalX: 'ones(numberOfVariables,1)'
                  UseParallel: 0 

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

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

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

p = PortfolioCVaR;
options = optimoptions('fmincon','Algorithm','trust-region-reflective', 'Display', 'off');
p = setSolver(p, 'fmincon', options);
display(p.solverOptions.Algorithm)
display(p.solverOptions.Display)
trust-region-reflective
off

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

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

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

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

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

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

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

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

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

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

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

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

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

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

См. также

| | | | | | | | |

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

Подробнее о

Внешние веб-сайты