При решении оптимизации портфеля для PortfolioCVaR объект, вы решаете нелинейные задачи оптимизации или с нелинейными объективными или с нелинейными ограничениями. Можно использовать 'TrustRegionCP' (значение по умолчанию), 'ExtendedCP', или 'cuttingplane' решатели, которые реализуют метод плоскости сокращения Келли (см. Келли [45] при Оптимизации Портфеля). В качестве альтернативы можно использовать fmincon и все изменения fmincon от Optimization 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В отличие от 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