Решателем по умолчанию для оптимизации портфеля средних отклонений является lcprog, который реализует алгоритм линейного комплементарного программирования (LCP). Хотя lcprog работает для большинства проблем, можно настроить аргументы для управления алгоритмом. Кроме того, инструменты оптимизации портфеля средних отклонений позволяют использовать любой из вариантов quadprog из ПО 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 из панели инструментов оптимизации, 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 функции уменьшают проблему в НЛП. Эти два решателя могут быть сконфигурированы с помощью setSolver. |
Портфель с активным 'Conditional'
BoundType, MinNumAssets, и MaxNumAssets | estimateFrontierByReturn | Проблема формулируется введением NumAssets двоичные переменные для указания того, вложен ли соответствующий актив или нет. Поэтому требуется смешанный целочисленный нелинейный решатель программирования. Предлагаются три типа решателей MINLP, см. setSolverMINLP. | Решение смешанного целочисленного нелинейного программирования (MINLP) с использованием setSolverMINLP | 'quadprog' или 'fmincon' используются, когда estimate функции уменьшают проблему в НЛП. Эти два решателя могут быть сконфигурированы с помощью setSolver |
Портфель с активным 'Conditional'
BoundType, MinNumAssets, и MaxNumAssets | estimateFrontierLimits | Проблема формулируется введением NumAssets двоичные переменные для указания того, вложен ли соответствующий актив или нет. Поэтому требуется смешанный целочисленный нелинейный решатель программирования. Предлагаются три типа решателей MINLP, см. setSolverMINLP. | Решение смешанного целочисленного нелинейного программирования (MINLP) с использованием setSolverMINLP | 'quadprog' или 'fmincon' используются, когда estimate функции уменьшают проблему в НЛП. Эти два решателя могут быть сконфигурированы с помощью setSolver |
Портфель с активным 'Conditional'
BoundType, MinNumAssets, и MaxNumAssets | estimateMaxSharpeRatio | Проблема формулируется введением NumAssets двоичные переменные для указания того, вложен ли соответствующий актив или нет. Поэтому требуется смешанный целочисленный нелинейный решатель программирования. Предлагаются три типа решателей MINLP, см. setSolverMINLP. | Решение смешанного целочисленного нелинейного программирования (MINLP) с использованием setSolverMINLP | 'quadprog' или 'fmincon' используются, когда estimate функции уменьшают проблему в НЛП. Эти два решателя могут быть сконфигурированы с помощью setSolver |
estimatePortMoments | estimatePortReturn | plotFrontier | Portfolio