При решении оптимизации портфеля для PortfolioCVaR объект, вы решаете нелинейные задачи оптимизации с нелинейными целевыми или нелинейными ограничениями. Можно использовать 'TrustRegionCP' (по умолчанию), 'ExtendedCP', или 'cuttingplane' решатели, которые реализуют метод секущей плоскости Келли (см. Келли [45] в Portfolio Optimization). Также можно использовать fmincon и все изменения fmincon Из Optimization Toolbox™ поддерживаются. При использовании fmincon как solverType, 'sqp' является алгоритмом по умолчанию для fmincon.
'TrustRegionCP', 'ExtendedCP', и 'cuttingplane' SolverTypesThe 'TrustRegionCP', 'ExtendedCP', и 'cuttingplane' решатели имеют опции для управления итерациями числа и остановкой допусков. Более того, эти решатели используют linprog как главный решатель, и все linprog опции поддерживаются с помощью optimoptions структуры. Все эти опции заданы с помощью setSolver.
Для примера можно использовать setSolver увеличить количество итераций для 'TrustRegionCP':
p = PortfolioCVaR; p = setSolver(p, 'TrustRegionCP', 'MaxIterations', 2000); display(p.solverType) display(p.solverOptions)
trustregioncp
MaxIterations: 2000
AbsoluteGapTolerance: 1.0000e-07
RelativeGapTolerance: 1.0000e-05
NonlinearScalingFactor: 1000
ObjectiveScalingFactor: 1000
MasterSolverOptions: [1×1 optim.options.Linprog]
Display: 'off'
CutGeneration: 'basic'
MaxIterationsInactiveCut: 30
ActiveCutTolerance: 1.0000e-07
ShrinkRatio: 0.7500
TrustRegionStartIteration: 2
DeltaLimit: 1Чтобы изменить алгоритм главного решателя на 'interior-point', без отображения, используйте setSolver для изменения 'MasterSolverOptions':
p = PortfolioCVaR; options = optimoptions('linprog','Algorithm','interior-point','Display','off'); p = setSolver(p,'TrustRegionCP','MasterSolverOptions',options); display(p.solverType) display(p.solverOptions) display(p.solverOptions.MasterSolverOptions.Algorithm) display(p.solverOptions.MasterSolverOptions.Display)
trustregioncp
MaxIterations: 1000
AbsoluteGapTolerance: 1.0000e-07
RelativeGapTolerance: 1.0000e-05
NonlinearScalingFactor: 1000
ObjectiveScalingFactor: 1000
MasterSolverOptions: [1×1 optim.options.Linprog]
Display: 'off'
CutGeneration: 'basic'
MaxIterationsInactiveCut: 30
ActiveCutTolerance: 1.0000e-07
ShrinkRatio: 0.7500
TrustRegionStartIteration: 2
DeltaLimit: 1
interior-point
off'fmincon' SolverTypeВ отличие от Optimization Toolbox, который использует interior-point алгоритм как алгоритм по умолчанию для fmincon, оптимизация портфеля для PortfolioCVaR объект использует sqp алгоритм. Для получения дополнительной информации о fmincon и ограниченные нелинейные алгоритмы оптимизации и опции, см. Ограниченные нелинейные алгоритмы оптимизации.
Изменить fmincon опции для оптимизации портфеля CVaR, использование setSolver чтобы задать скрытые свойства solverType и solverOptions для определения и управления решателем. (Обратите внимание, что опции по умолчанию можно увидеть, создав манекен PortfolioCVaR объект, использование p = PortfolioCVaR а затем введите p.solverOptions.) Поскольку эти свойства решателя скрыты, вы не можете задать их с помощью PortfolioCVaR объект. Значение по умолчанию для fmincon решатель должен использовать sqp целевая функция алгоритма, градиенты включены, и не отображается выход, поэтому вам не нужно использовать setSolver для задания sqp алгоритм.
p = PortfolioCVaR;
p = setSolver(p, 'fmincon');
display(p.solverOptions)fmincon options:
Options used by current Algorithm ('sqp'):
(Other available algorithms: 'active-set', 'interior-point', 'sqp-legacy', 'trust-region-reflective')
Set properties:
Algorithm: 'sqp'
ConstraintTolerance: 1.0000e-08
Display: 'off'
OptimalityTolerance: 1.0000e-08
SpecifyConstraintGradient: 1
SpecifyObjectiveGradient: 1
StepTolerance: 1.0000e-08
Default properties:
CheckGradients: 0
FiniteDifferenceStepSize: 'sqrt(eps)'
FiniteDifferenceType: 'forward'
MaxFunctionEvaluations: '100*numberOfVariables'
MaxIterations: 400
ObjectiveLimit: -1.0000e+20
OutputFcn: []
PlotFcn: []
ScaleProblem: 0
TypicalX: 'ones(numberOfVariables,1)'
UseParallel: 0 Если вы хотите задать дополнительные опции, связанные с fmincon решатель, setSolver принимает эти опции как аргументы пары "имя-значение". Для примера, если вы хотите использовать fmincon с 'active-set' алгоритм и без отображенного выхода, используйте setSolver с:
p = PortfolioCVaR; p = setSolver(p, 'fmincon','Algorithm','active-set','Display','off'); display(p.solverOptions.Algorithm) display(p.solverOptions.Display)
active-set off
Кроме того, setSolver принимает optimoptions объект из Optimization Toolbox как второй аргумент. Для примера можно изменить алгоритм на '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
Смешанный целочисленный решатель нелинейного программирования (MINLP), сконфигурированный с помощью setSolverMINLP, позволяет вам задать связанные опции решателя для оптимизации портфеля для PortfolioCVaR объект. Решатель MINLP используется, когда любой один, или любая комбинация 'Conditional'
BoundType, MinNumAssets, или MaxNumAssets ограничения активны. В этом случае задача портфеля формулируется путем добавления NumAssets двоичные переменные, где 0 указывает на отсутствие инвестиций, и 1 инвестируется. Для получения дополнительной информации об использовании 'Conditional'
BoundType, см. setBounds. Для получения дополнительной информации об указании MinNumAssets и MaxNumAssets, см. setMinMaxNumAssets.
При использовании estimate функции со PortfolioCVaR объект, где 'Conditional'
BoundType, MinNumAssets, или MaxNumAssets ограничения активны, автоматически используется целое число смешанного решателя нелинейного программирования (MINLP).
В следующей таблице приведены инструкции по использованию setSolver и setSolverMINLP.
| Задача PortfolioCVaR | Функция PortfolioCVaR | Тип задачи оптимизации | Основной решатель | Вспомогательный решатель |
|---|---|---|---|---|
PortfolioCVaR без активных 'Conditional'
BoundType, MinNumAssets, и MaxNumAssets | estimateFrontierByRisk | Оптимизация портфеля для определенного уровня риска вводит нелинейное ограничение. Поэтому эта задача имеет линейную цель с линейными и нелинейными ограничениями. | 'TrustRegionCP', 'ExtendedCP', 'fmincon', или 'cuttingplane' использование setSolver |
|
PortfolioCVaR без активных 'Conditional'
BoundType, MinNumAssets, и MaxNumAssets | estimateFrontierByReturn | Нелинейная цель с линейными ограничениями | 'TrustRegionCP', 'ExtendedCP', 'fmincon', или 'cuttingplane' использование setSolver |
|
PortfolioCVaR без активных 'Conditional'
BoundType, MinNumAssets, и MaxNumAssets | estimateFrontierLimits | Нелинейный или линейный объект с линейными ограничениями | Для Для | Не применяется |
PortfolioCVaR с активными 'Conditional'
BoundType, MinNumAssets, и MaxNumAssets | estimateFrontierByRisk | Проблема сформулирована путем введения NumAssets двоичные переменные, чтобы указать, инвестирован ли соответствующий актив или нет. Поэтому это требует смешанного целочисленного нелинейного решателя программирования. Предлагаются три типа решателей MINLP, см. setSolverMINLP. | Смешанный целочисленный решатель нелинейного программирования (MINLP) с использованием setSolverMINLP | 'fmincon' используется, когда estimate функции сокращают задачу до NLP. Этот решатель сконфигурирован через setSolver. |
PortfolioCVaR с активными 'Conditional'
BoundType, MinNumAssets, и MaxNumAssets | estimateFrontierByReturn | Проблема сформулирована путем введения NumAssets двоичные переменные, чтобы указать, инвестирован ли соответствующий актив или нет. Поэтому это требует смешанного целочисленного нелинейного решателя программирования. Предлагаются три типа решателей MINLP, см. setSolverMINLP. | Смешанный целочисленный решатель нелинейного программирования (MINLP) с использованием setSolverMINLP | 'fmincon' используется, когда estimate функции сокращают задачу до NLP. Этот решатель сконфигурирован через setSolver |
PortfolioCVaR с активными 'Conditional'
BoundType, MinNumAssets, и MaxNumAssets | estimateFrontierLimits | Проблема сформулирована путем введения NumAssets двоичные переменные, чтобы указать, инвестирован ли соответствующий актив или нет. Поэтому это требует смешанного целочисленного нелинейного решателя программирования. Предлагаются три типа решателей MINLP, см. setSolverMINLP. | Смешанный целочисленный решатель нелинейного программирования (MINLP) с использованием setSolverMINLP | 'fmincon' используется, когда estimate функции сокращают задачу до NLP. Этот решатель сконфигурирован через setSolver |
estimateFrontier | estimateFrontierByReturn | estimateFrontierByRisk | estimateFrontierByRisk | estimateFrontierLimits | estimatePortReturn | estimatePortRisk | PortfolioCVaR | setSolver | setSolverMINLP