exponenta event banner

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

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

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

'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

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

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

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

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

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

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

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

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

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

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

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

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

См. также

| | | | | | | | |

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

Подробнее