При решении задач оптимизации портфеля для PortfolioCVaR задача нелинейной оптимизации решается с помощью нелинейных целевых или нелинейных ограничений. Вы можете использовать 'TrustRegionCP' (по умолчанию), 'ExtendedCP', или 'cuttingplane' решатели, реализующие метод секущей плоскости Келли (см. Келли [45] в разделе Оптимизация портфеля). Кроме того, можно использовать fmincon и все варианты fmincon из оптимизации Toolbox™ поддерживаются. При использовании fmincon в качестве solverType, 'sqp' является алгоритмом по умолчанию для fmincon.
'TrustRegionCP', 'ExtendedCP', и 'cuttingplane' SolverTypes '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В отличие от панели инструментов оптимизации, в которой используется 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 объект из панели инструментов оптимизации в качестве второго аргумента. Например, можно изменить алгоритм на '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.
| Проблема CVaR | Функция CCVaR | Тип проблемы оптимизации | Основной решатель | Вспомогательный решатель |
|---|---|---|---|---|
CCVaR без активного 'Conditional'
BoundType, MinNumAssets, и MaxNumAssets | estimateFrontierByRisk | Оптимизация портфеля для определенного уровня риска создает нелинейное ограничение. Поэтому эта задача имеет линейную цель с линейными и нелинейными ограничениями. | 'TrustRegionCP', 'ExtendedCP', 'fmincon', или 'cuttingplane' использование setSolver |
|
CCVaR без активного 'Conditional'
BoundType, MinNumAssets, и MaxNumAssets | estimateFrontierByReturn | Нелинейный объект с линейными ограничениями | 'TrustRegionCP', 'ExtendedCP', 'fmincon', или 'cuttingplane' использование setSolver |
|
CCVaR без активного 'Conditional'
BoundType, MinNumAssets, и MaxNumAssets | estimateFrontierLimits | Нелинейный или линейный объект с линейными ограничениями | Для Для | Неприменимо |
CCVaR с активным 'Conditional'
BoundType, MinNumAssets, и MaxNumAssets | estimateFrontierByRisk | Проблема формулируется введением NumAssets двоичные переменные для указания того, вложен ли соответствующий актив или нет. Поэтому требуется смешанный целочисленный нелинейный решатель программирования. Предлагаются три типа решателей MINLP, см. setSolverMINLP. | Решение смешанного целочисленного нелинейного программирования (MINLP) с использованием setSolverMINLP | 'fmincon' используется, когда estimate функции уменьшают проблему в НЛП. Этот решатель настраивается с помощью setSolver. |
CCVaR с активным 'Conditional'
BoundType, MinNumAssets, и MaxNumAssets | estimateFrontierByReturn | Проблема формулируется введением NumAssets двоичные переменные для указания того, вложен ли соответствующий актив или нет. Поэтому требуется смешанный целочисленный нелинейный решатель программирования. Предлагаются три типа решателей MINLP, см. setSolverMINLP. | Решение смешанного целочисленного нелинейного программирования (MINLP) с использованием setSolverMINLP | 'fmincon' используется, когда estimate функции уменьшают проблему в НЛП. Этот решатель настраивается с помощью setSolver |
CCVaR с активным 'Conditional'
BoundType, MinNumAssets, и MaxNumAssets | estimateFrontierLimits | Проблема формулируется введением NumAssets двоичные переменные для указания того, вложен ли соответствующий актив или нет. Поэтому требуется смешанный целочисленный нелинейный решатель программирования. Предлагаются три типа решателей MINLP, см. setSolverMINLP. | Решение смешанного целочисленного нелинейного программирования (MINLP) с использованием setSolverMINLP | 'fmincon' используется, когда estimate функции уменьшают проблему в НЛП. Этот решатель настраивается с помощью setSolver |
estimateFrontier | estimateFrontierByReturn | estimateFrontierByRisk | estimateFrontierByRisk | estimateFrontierLimits | estimatePortReturn | estimatePortRisk | PortfolioCVaR | setSolver | setSolverMINLP