exponenta event banner

Выбор и управление решателем для оптимизации портфеля средних отклонений

Решателем по умолчанию для оптимизации портфеля средних отклонений является lcprog, который реализует алгоритм линейного комплементарного программирования (LCP). Хотя lcprog работает для большинства проблем, можно настроить аргументы для управления алгоритмом. Кроме того, инструменты оптимизации портфеля средних отклонений позволяют использовать любой из вариантов quadprog из ПО Optimization Toolbox™. Например, панель инструментов оптимизации, которая использует interior-point-convex алгоритм как алгоритм по умолчанию для quadprog, инструменты оптимизации портфеля также используют interior-point-convex алгоритм по умолчанию. Для получения подробной информации о quadprog и алгоритмы и опции квадратичного программирования см. в разделе Алгоритмы квадратичного программирования.

Используя 'lcprog' и 'quadprog'

Чтобы изменить либо lcprog или для указания quadprog в качестве решателя используйте setSolver для установки скрытых свойств solverType и solverOptions , которые определяют решатель и управляют им. Поскольку свойства решателя скрыты, их нельзя задать с помощью Portfolio объект. Решатель по умолчанию: lcprog поэтому вам не нужно использовать setSolver , чтобы указать этот решатель. Использовать quadprog, можно установить значение по умолчанию interior-point-convex алгоритм quadprog использование:

p = Portfolio;
p = setSolver(p, 'quadprog');
display(p.solverType)
display(p.solverOptions)
quadprog options:

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

   Set properties:
              Algorithm: 'interior-point-convex'
                Display: 'off'
    OptimalityTolerance: 1.0000e-12

   Default properties:
    ConstraintTolerance: 1.0000e-08
           LinearSolver: 'auto'
          MaxIterations: 200
          StepTolerance: 1.0000e-12
и вы можете вернуться кlcprog с:
p = setSolver(p, 'lcprog');
display(p.solverType);
display(p.solverOptions)
lcprog
     MaxIter: []
    TieBreak: []
      TolPiv: 5.0000e-08
В обоих случаях setSolver устанавливает параметры по умолчанию, связанные с любым решателем. Если необходимо указать дополнительные опции, связанные с данным решателем, setSolver принимает эти опции с аргументами пары «имя-значение» в вызове функции. Например, если предполагается использовать quadprog и хотите использовать 'trust-region-reflective' алгоритм, вызов setSolver с:
p = Portfolio;
p = setSolver(p, 'quadprog', 'Algorithm', 'trust-region-reflective');
display(p.solverOptions)
  quadprog options:

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

   Set properties:
              Algorithm: 'trust-region-reflective'

   Default properties:
                Display: 'final'
      FunctionTolerance: 'default dependent on problem'
     HessianMultiplyFcn: []
          MaxIterations: 'default dependent on problem'
    OptimalityTolerance: 'default dependent on problem'
          StepTolerance: 2.2204e-14
    SubproblemAlgorithm: 'cg'
               TypicalX: 'ones(numberOfVariables,1)'

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

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

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

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

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

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

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

Проблема портфеляФункция портфеляТип проблемы оптимизацииОсновной решатель Вспомогательный решатель
Портфель без отслеживания ограничений ошибокestimateFrontierByRiskОптимизация портфеля для определенного уровня риска создает нелинейное ограничение. Поэтому эта задача имеет линейную цель с линейными и нелинейными ограничениями.'fmincon' использование setSolver

Для ‘min’: квадратичный объект, 'quadprog' или 'lcprog' использование setSolver

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

Портфель без отслеживания ограничений ошибокestimateFrontierByReturnКвадратичный объект с линейными ограничениями'quadprog' или 'lcprog' использование setSolver

Для ‘min’: квадратичный объект, 'quadprog' или 'lcprog' использование setSolver

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

Портфель без отслеживания ограничений ошибокestimateFrontierLimits

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

Для ‘min’: квадратичный объект, 'quadprog' или 'lcprog' использование setSolver

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

Неприменимо
Портфель без отслеживания ограничений ошибокestimateMaxSharpeRatioКвадратичный объект с линейными ограничениями'quadprog' использование setSolver

Поскольку estimateMaxSharpeRatio внутренние вызовы estimateFrontierLimits, все решатели, необходимые для estimateFrontierLimits будут решателями-помощниками

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

См. также

| | |

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

Подробнее

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