Когда решение оптимизации портфеля для объекта PortfolioMAD, в то время как все изменения fmincon от Optimization Toolbox™ поддерживаются, с помощью 'sqp' и алгоритмов 'active-set' для fmincon, рекомендуется, и использование алгоритма 'interior-point' не рекомендуется для оптимизации портфеля MAD.
В отличие от Optimization Toolbox, который использует алгоритм 'trust-region-reflective' в качестве алгоритма по умолчанию для fmincon, оптимизация портфеля для объекта PortfolioMAD использует алгоритм 'active-set'. Для получения дополнительной информации о fmincon и ограниченных нелинейных алгоритмах оптимизации и опциях, см. Ограниченные Нелинейные Алгоритмы Оптимизации (Optimization Toolbox).
Чтобы изменить опции fmincon для оптимизации портфеля MAD, используйте setSolver, чтобы установить скрытые свойства solverType и solverOptions задать и управлять решателем. Поскольку эти свойства решателя скрыты, вы не можете установить их использующий объект PortfolioMAD. Решатель по умолчанию является fmincon с алгоритмом 'sqb' и не отобразил вывод, таким образом, вы не должны использовать setSolver, чтобы задать это.
Если вы хотите задать дополнительные опции, сопоставленные с решателем fmincon, setSolver принимает эти опции как аргументы пары "имя-значение". Например, если вы хотите использовать fmincon с алгоритмом sqp и с отображенным выводом, используйте setSolver с:
p = PortfolioMAD; p = setSolver(p, 'fmincon', 'Algorithm', 'sqp', 'Display', 'final'); display(p.solverOptions.Algorithm); display(p.solverOptions.Display);
sqp final
Также функция setSolver принимает объект optimoptions как второй аргумент. Например, можно изменить алгоритм на trust-region-reflective без отображенного вывода можно следующим образом:
p = PortfolioMAD; options = optimoptions('fmincon', 'Algorithm', 'trust-region-reflective', 'Display', 'off'); p = setSolver(p, 'fmincon', options); display(p.solverOptions.Algorithm); display(p.solverOptions.Display);
trust-region-reflective off
Смешанное целочисленное нелинейное программирование (MINLP) решатель, сконфигурированное использование setSolverMINLP, позволяет вам задать сопоставленные опции решателя для оптимизации портфеля для объекта PortfolioMAD. Когда любой или любая комбинация 'Conditional'
, BoundType, MinNumAssets или ограничения MaxNumAssets активны, проблема портфеля, формулируется путем добавления двоичных переменных NumAssets, где 0 указывает не инвестированный, и 1 инвестируют. Для получения дополнительной информации об использовании 'Conditional'
BoundType смотрите setBounds. Для получения дополнительной информации об определении MinNumAssets и MaxNumAssets, смотрите setMinMaxNumAssets.
При использовании функций estimate с объектом PortfolioMAD, где 'Conditional'
BoundType, MinNumAssets или ограничения MaxNumAssets активны, смешанное целочисленное нелинейное программирование (MINLP), автоматически используется решатель.
Следующая таблица предоставляет инструкции для использования setSolver и setSolverMINLP.
| Проблема портфеля | Функция PortfolioMAD | Тип задачи оптимизации | Основной решатель | Решатель помощника |
|---|---|---|---|---|
| Портфель, не отслеживая ошибочные ограничения | estimateFrontierByRisk | Оптимизация портфеля для уровня определенного риска вводит нелинейное ограничение. Поэтому эта проблема имеет линейную цель с линейными и нелинейными ограничениями. | 'fmincon' с помощью setSolver |
|
| Портфель, не отслеживая ошибочные ограничения | estimateFrontierByReturn | Нелинейная цель с линейными ограничениями | 'fmincon' с помощью setSolver |
|
| Портфель, не отслеживая ошибочные ограничения | estimateFrontierLimits | Нелинейная или линейная цель с линейными ограничениями | Для Для | Не применяется |
PortfolioMAD с активным 'Conditional'
BoundType, MinNumAssets и MaxNumAssets | estimateFrontierByRisk | Проблема формулируется путем представления двоичных переменных NumAssets, чтобы указать, инвестируют ли соответствующий актив или нет. Поэтому это требует смешанного целочисленного решателя нелинейного программирования. Три типа решателей MINLP предлагаются, видят setSolverMINLP. | Смешанный целочисленный решатель нелинейного программирования (MINLP) использование setSolverMINLP | 'fmincon' используется, когда функции estimate уменьшают проблему в NLP. Этот решатель сконфигурирован через setSolver. |
PortfolioMAD с активным 'Conditional'
BoundType, MinNumAssets и MaxNumAssets | estimateFrontierByReturn | Проблема формулируется путем представления двоичных переменных NumAssets, чтобы указать, инвестируют ли соответствующий актив или нет. Поэтому это требует смешанного целочисленного решателя нелинейного программирования. Три типа решателей MINLP предлагаются, видят setSolverMINLP. | Смешанный целочисленный решатель нелинейного программирования (MINLP) использование setSolverMINLP | 'fmincon' используется, когда функции estimate уменьшают проблему в NLP. Этот решатель сконфигурирован через setSolver |
PortfolioMAD с активным 'Conditional'
BoundType, MinNumAssets и MaxNumAssets | estimateFrontierLimits | Проблема формулируется путем представления двоичных переменных NumAssets, чтобы указать, инвестируют ли соответствующий актив или нет. Поэтому это требует смешанного целочисленного решателя нелинейного программирования. Три типа решателей MINLP предлагаются, видят setSolverMINLP. | Смешанный целочисленный решатель нелинейного программирования (MINLP) использование setSolverMINLP | 'fmincon' используется, когда функции estimate уменьшают проблему в NLP. Этот решатель сконфигурирован через setSolver |
PortfolioMAD | estimateFrontier | estimateFrontierByReturn | estimateFrontierByRisk | estimateFrontierByRisk | estimateFrontierLimits | estimatePortReturn | estimatePortRisk | setSolver | setSolverMINLP