Выбор и управление решателем для оптимизации портфеля Среднего Отклонения

Решателем по умолчанию для оптимизации портфеля среднего отклонения является 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
и можно переключиться назад tolcprog с:
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

Для ‘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Квадратичный (проблема риска min) или линейный (макс. возвращают проблему), цель с линейными и нелинейными ограничениями'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