Решатель по умолчанию для оптимизации портфеля средних дисперсий 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-12lcprog с:p = setSolver(p, 'lcprog');
display(p.solverType);
display(p.solverOptions)lcprog
MaxIter: []
TieBreak: []
TolPiv: 5.0000e-08setSolver настраивает опции по умолчанию, сопоставленные с любым из решателей. Если вы хотите задать дополнительные опции, связанные с заданным решателем, 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), сконфигурированный с помощью 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 | Для Для |
| Портфолио без отслеживания ограничений по ошибкам | estimateFrontierByReturn | Квадратичный объект с линейными ограничениями | 'quadprog' или 'lcprog' использование setSolver | Для Для |
| Портфолио без отслеживания ограничений по ошибкам | estimateFrontierLimits | Квадратичный или линейный объект с линейными ограничениями | Для Для | Не применяется |
| Портфолио без отслеживания ограничений по ошибкам | estimateMaxSharpeRatio | Квадратичный объект с линейными ограничениями | 'quadprog' использование setSolver | Поскольку |
| Портфолио с ограничениями по ошибкам отслеживания | estimateFrontierByRisk | Линейная цель с линейными и нелинейными ограничениями | 'fmincon' использование setSolver | Не применяется |
| Портфолио с ограничениями по ошибкам отслеживания | estimateFrontierByReturn | Линейная цель с линейными и нелинейными ограничениями | 'fmincon' использование setSolver | Не применяется |
| Портфолио с ограничениями по ошибкам отслеживания | estimateFrontierLimits | Квадратичный (задача минимального риска) или линейный (задача максимального возврата) цель с линейными и нелинейными ограничениями | 'fmincon' использование setSolver | Не применяется |
| Портфолио с ограничениями по ошибкам отслеживания | estimateMaxSharpeRatio | Квадратичный объект с линейными и нелинейными ограничениями | 'fmincon' использование setSolver | Не применяется |
Портфолио с активными 'Conditional'
BoundType, MinNumAssets, и MaxNumAssets | estimateFrontierByRisk | Проблема сформулирована путем введения NumAssets двоичные переменные, чтобы указать, инвестирован ли соответствующий актив или нет. Поэтому это требует смешанного целочисленного нелинейного решателя программирования. Предлагаются три типа решателей MINLP, см. setSolverMINLP. | Смешанный целочисленный решатель нелинейного программирования (MINLP) с использованием setSolverMINLP | 'quadprog' или 'fmincon' используются, когда estimate функции сокращают задачу до NLP. Эти два решателя могут быть сконфигурированы через setSolver. |
Портфолио с активными 'Conditional'
BoundType, MinNumAssets, и MaxNumAssets | estimateFrontierByReturn | Проблема сформулирована путем введения NumAssets двоичные переменные, чтобы указать, инвестирован ли соответствующий актив или нет. Поэтому это требует смешанного целочисленного нелинейного решателя программирования. Предлагаются три типа решателей MINLP, см. setSolverMINLP. | Смешанный целочисленный решатель нелинейного программирования (MINLP) с использованием setSolverMINLP | 'quadprog' или 'fmincon' используются, когда estimate функции сокращают задачу до NLP. Эти два решателя могут быть сконфигурированы через setSolver |
Портфолио с активными 'Conditional'
BoundType, MinNumAssets, и MaxNumAssets | estimateFrontierLimits | Проблема сформулирована путем введения NumAssets двоичные переменные, чтобы указать, инвестирован ли соответствующий актив или нет. Поэтому это требует смешанного целочисленного нелинейного решателя программирования. Предлагаются три типа решателей MINLP, см. setSolverMINLP. | Смешанный целочисленный решатель нелинейного программирования (MINLP) с использованием setSolverMINLP | 'quadprog' или 'fmincon' используются, когда estimate функции сокращают задачу до NLP. Эти два решателя могут быть сконфигурированы через setSolver |
Портфолио с активными 'Conditional'
BoundType, MinNumAssets, и MaxNumAssets | estimateMaxSharpeRatio | Проблема сформулирована путем введения NumAssets двоичные переменные, чтобы указать, инвестирован ли соответствующий актив или нет. Поэтому это требует смешанного целочисленного нелинейного решателя программирования. Предлагаются три типа решателей MINLP, см. setSolverMINLP. | Смешанный целочисленный решатель нелинейного программирования (MINLP) с использованием setSolverMINLP | 'quadprog' или 'fmincon' используются, когда estimate функции сокращают задачу до NLP. Эти два решателя могут быть сконфигурированы через setSolver |
estimatePortMoments | estimatePortReturn | plotFrontier | Portfolio