Решателем по умолчанию для оптимизации портфеля среднего отклонения является lcprog
, который реализует алгоритм линейного программирования взаимозависимости (LCP). Несмотря на то, что lcprog
работает на большинство проблем, можно настроить аргументы, чтобы управлять алгоритмом. Также инструменты оптимизации портфеля среднего отклонения позволяют вам использовать любое из изменений quadprog
из программного обеспечения Optimization Toolbox™. В отличие от Optimization Toolbox, который использует алгоритм trust-region-reflective
в качестве алгоритма по умолчанию для quadprog
, инструменты оптимизации портфеля используют алгоритм interior-point-convex
. Для получения дополнительной информации о quadprog
и алгоритмах квадратичного программирования и опциях, см. Алгоритмы Квадратичного программирования (Optimization Toolbox).
Чтобы изменить или lcprog
или задать quadprog
как ваш решатель, используйте функцию setSolver
, чтобы установить скрытые свойства solverType
и solverOptions
, которые задают и управляют решателем. Поскольку свойства решателя скрыты, вы не можете установить их с помощью объекта Portfolio
. Решателем по умолчанию является lcprog
, таким образом, вы не должны использовать setSolver
, чтобы задать этот решатель. Чтобы использовать quadprog
, необходимо настроить версию interior-point-convex
использования quadprog
:
p = Portfolio;
p = setSolver(p, 'quadprog');
display(p.solverType);
quadprog
lcprog
с:p = setSolver(p, 'lcprog');
display(p.solverType);
lcprog
setSolver
настраивает опции по умолчанию, сопоставленные с любым решателем. Если вы хотите задать дополнительные опции, сопоставленные с данным решателем, setSolver
принимает эти опции с аргументами пары "имя-значение" аргумента в вызове функции. Например, если вы намереваетесь использовать quadprog
и хотеть использовать алгоритм active-set
, вызовите setSolver
с:p = setSolver(p, 'quadprog', 'Algorithm', 'active-set'); display(p.solverOptions.Algorithm);
active-set
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) решатель, сконфигурированное использование setSolverMINLP
, позволяет вам задать сопоставленные опции решателя для оптимизации портфеля для объекта Portfolio
. Когда любой или любая комбинация '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 | Квадратичный (проблема риска min) или линейный (макс. возвращают проблему), цель с линейными и нелинейными ограничениями | '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 |