exponenta event banner

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

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

Используя 'TrustRegionCP', 'ExtendedCP', и 'cuttingplane' SolverTypes

'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

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

Рекомендации по решателю для объектов CCVaR

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

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

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

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

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

CCVaR без активного 'Conditional' BoundType, MinNumAssets, и MaxNumAssetsestimateFrontierLimits

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

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

Для ‘max’: линейный объект, 'linprog' использование setSolver

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

См. также

| | | | | | | | |

Связанные примеры

Подробнее

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