При решении оптимизации портфеля для 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