При решении оптимизации портфеля для объекта PortfolioCVaR поддерживаются все изменения fmincon от Optimization Toolbox™. Также вы можете use'cuttingplane', решатель, который реализует метод плоскости сокращения Келли (см. Келли [45] при Оптимизации Портфеля).
В отличие от Optimization Toolbox, который использует алгоритм interior-point в качестве алгоритма по умолчанию для fmincon, оптимизация портфеля для объекта PortfolioCVaR использует алгоритм sqp. Для получения дополнительной информации о fmincon и ограниченных нелинейных алгоритмах оптимизации и опциях, см. Ограниченные Нелинейные Алгоритмы Оптимизации (Optimization Toolbox).
Чтобы изменить опции fmincon для оптимизации портфеля CVaR, используйте setSolver, чтобы установить скрытые свойства solverType и solverOptions задать и управлять решателем. (Обратите внимание на то, что вы видите опции по умолчанию путем создания объекта dummyPortfolioCVaR, использования p = PortfolioCVaR и затем вводите p.solverOptions.), Поскольку эти свойства решателя скрыты, вы не можете установить их использующий объект PortfolioCVaR. Решатель по умолчанию является fmincon с целевой функцией алгоритма sqp, градиенты, включенные, и не отобразил вывод, таким образом, вы не должны использовать setSolver, чтобы задать это.
Если вы хотите задать дополнительные опции, сопоставленные с решателем fmincon, setSolver принимает эти опции как аргументы пары "имя-значение". Например, если вы хотите использовать fmincon с алгоритмом trust-region-reflective и без отображенного вывода, используйте setSolver с:
p = PortfolioCVaR; p = setSolver(p, 'fmincon', 'Algorithm', 'trust-region-reflective', 'Display', 'on'); display(p.solverOptions.Algorithm); display(p.solverOptions.Display);
trust-region-reflective on
Также setSolver принимает объект optimoptions как второй аргумент. Например, можно изменить алгоритм на trust-region-reflective без отображенного вывода можно следующим образом:
p = PortfolioCVaR; 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
Решатель 'cuttingplane' имеет опции, чтобы управлять итерациями номера и останавливающимися допусками. Кроме того, этот решатель использует linprog в качестве основного решателя, и все опции linprog поддерживаются с помощью структур optimoptions. Все эти опции установлены с помощью setSolver.
Например, можно использовать setSolver, чтобы увеличить число итераций для 'cuttingplane':
p = PortfolioCVaR; p = setSolver(p, 'cuttingplane', 'MaxIter', 2000); display(p.solverType); display(p.solverOptions);
cuttingplane
MaxIter: 2000
AbsTol: 1.0000e-06
RelTol: 1.0000e-05
MasterSolverOptions: [1x1 optim.options.Linprog]Чтобы изменить основной алгоритм решателя, to'interior-point', без отображения, используют setSolver, чтобы изменить 'MasterSolverOptions':
p = PortfolioCVaR; options = optimoptions('linprog','Algorithm','interior-point','Display','off'); p = setSolver(p,'cuttingplane','MasterSolverOptions',options); display(p.solverType) display(p.solverOptions) display(p.solverOptions.MasterSolverOptions.Algorithm) display(p.solverOptions.MasterSolverOptions.Display)
cuttingplane
MaxIter: 1000
AbsTol: 1.0000e-06
RelTol: 1.0000e-05
MasterSolverOptions: [1x1 optim.options.Linprog]
interior-point
offСмешанное целочисленное нелинейное программирование (MINLP) решатель, сконфигурированное использование setSolverMINLP, позволяет вам задать сопоставленные опции решателя для оптимизации портфеля для объекта PortfolioCVaR. Когда любой или любая комбинация 'Conditional'
, BoundType, MinNumAssets или ограничения MaxNumAssets активны, проблема портфеля, формулируется путем добавления двоичных переменных NumAssets, где 0 указывает не инвестированный, и 1 инвестируют. Для получения дополнительной информации об использовании 'Conditional'
BoundType смотрите setBounds. Для получения дополнительной информации об определении MinNumAssets и MaxNumAssets, смотрите setMinMaxNumAssets.
При использовании функций estimate с объектом PortfolioCVaR, где 'Conditional'
BoundType, MinNumAssets или ограничения MaxNumAssets активны, смешанное целочисленное нелинейное программирование (MINLP), автоматически используется решатель.
Следующая таблица предоставляет инструкции для использования setSolver и setSolverMINLP.
| Функция PortfolioCVaR | Тип задачи оптимизации | Основной решатель | Решатель помощника |
|---|---|---|---|
estimateFrontierByRisk | Оптимизация портфеля для уровня определенного риска вводит нелинейное ограничение. Поэтому эта проблема имеет линейную цель с линейными и нелинейными ограничениями. | 'fmincon' или 'cuttingplane' с помощью setSolver |
|
estimateFrontierByReturn | Нелинейная цель с линейными ограничениями | 'fmincon' или ' 'cuttingplane' с помощью setSolver |
|
estimateFrontierLimits | Нелинейная или линейная цель с линейными ограничениями | Для Для | Не применяется |
estimateFrontierByRisk | Проблема формулируется путем представления двоичных переменных NumAssets, чтобы указать, инвестируют ли соответствующий актив или нет. Поэтому это требует смешанного целочисленного решателя нелинейного программирования. Три типа решателей MINLP предлагаются, видят setSolverMINLP. | Смешанный целочисленный решатель нелинейного программирования (MINLP) использование setSolverMINLP | 'fmincon' используется, когда функции estimate уменьшают проблему в NLP. Этот решатель сконфигурирован через setSolver. |
estimateFrontierByReturn | Проблема формулируется путем представления двоичных переменных NumAssets, чтобы указать, инвестируют ли соответствующий актив или нет. Поэтому это требует смешанного целочисленного решателя нелинейного программирования. Три типа решателей MINLP предлагаются, видят setSolverMINLP. | Смешанный целочисленный решатель нелинейного программирования (MINLP) использование setSolverMINLP | 'fmincon' используется, когда функции estimate уменьшают проблему в NLP. Этот решатель сконфигурирован через setSolver |
estimateFrontierLimits | Проблема формулируется путем представления двоичных переменных NumAssets, чтобы указать, инвестируют ли соответствующий актив или нет. Поэтому это требует смешанного целочисленного решателя нелинейного программирования. Три типа решателей MINLP предлагаются, видят setSolverMINLP. | Смешанный целочисленный решатель нелинейного программирования (MINLP) использование setSolverMINLP | 'fmincon' используется, когда функции estimate уменьшают проблему в NLP. Этот решатель сконфигурирован через setSolver |
estimateMaxSharpeRatio | Проблема формулируется путем представления двоичных переменных NumAssets, чтобы указать, инвестируют ли соответствующий актив или нет. Поэтому это требует смешанного целочисленного решателя нелинейного программирования. Три типа решателей MINLP предлагаются, видят setSolverMINLP. | Смешанный целочисленный решатель нелинейного программирования (MINLP) использование setSolverMINLP | 'fmincon' используется, когда функции estimate уменьшают проблему в NLP. Этот решатель сконфигурирован через setSolver |
PortfolioCVaR | estimateFrontier | estimateFrontierByReturn | estimateFrontierByRisk | estimateFrontierByRisk | estimateFrontierLimits | estimatePortReturn | estimatePortRisk | setSolver | setSolverMINLP