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

Решатель по умолчанию для оптимизации портфеля средних дисперсий lcprog, который реализует алгоритм линейного программирования комплементарности (LCP). Хотя lcprog работает для большинства задач, можно настроить аргументы, чтобы управлять алгоритмом. Кроме того, инструменты оптимизации портфеля средних дисперсий позволяют вам использовать любую из изменений quadprog от программного обеспечения Optimization Toolbox™. Как 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 из Optimization Toolbox, 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 функции сокращают задачу до NLP. Эти два решателя могут быть сконфигурированы через setSolver.
Портфолио с активными 'Conditional' BoundType, MinNumAssets, и MaxNumAssetsestimateFrontierByReturnПроблема сформулирована путем введения NumAssets двоичные переменные, чтобы указать, инвестирован ли соответствующий актив или нет. Поэтому это требует смешанного целочисленного нелинейного решателя программирования. Предлагаются три типа решателей MINLP, см. setSolverMINLP.Смешанный целочисленный решатель нелинейного программирования (MINLP) с использованием setSolverMINLP'quadprog' или 'fmincon' используются, когда estimate функции сокращают задачу до NLP. Эти два решателя могут быть сконфигурированы через setSolver
Портфолио с активными 'Conditional' BoundType, MinNumAssets, и MaxNumAssetsestimateFrontierLimitsПроблема сформулирована путем введения NumAssets двоичные переменные, чтобы указать, инвестирован ли соответствующий актив или нет. Поэтому это требует смешанного целочисленного нелинейного решателя программирования. Предлагаются три типа решателей MINLP, см. setSolverMINLP.Смешанный целочисленный решатель нелинейного программирования (MINLP) с использованием setSolverMINLP'quadprog' или 'fmincon' используются, когда estimate функции сокращают задачу до NLP. Эти два решателя могут быть сконфигурированы через setSolver
Портфолио с активными 'Conditional' BoundType, MinNumAssets, и MaxNumAssetsestimateMaxSharpeRatioПроблема сформулирована путем введения NumAssets двоичные переменные, чтобы указать, инвестирован ли соответствующий актив или нет. Поэтому это требует смешанного целочисленного нелинейного решателя программирования. Предлагаются три типа решателей MINLP, см. setSolverMINLP.Смешанный целочисленный решатель нелинейного программирования (MINLP) с использованием setSolverMINLP'quadprog' или 'fmincon' используются, когда estimate функции сокращают задачу до NLP. Эти два решателя могут быть сконфигурированы через setSolver

См. также

| | |

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

Подробнее о

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