При решении оптимизации портфеля для PortfolioMAD
объект, вы решаете нелинейные задачи оптимизации с нелинейными целевыми или нелинейными ограничениями. Можно использовать 'TrustRegionCP'
(по умолчанию) или 'ExtendedCP'
решатели, которые реализуют метод секущей плоскости Келли (см. Келли [45] в Portfolio Optimization). Также можно использовать fmincon
и все изменения fmincon
Из Optimization Toolbox™ поддерживаются. При использовании fmincon
как solverType
, 'sqp'
является алгоритмом по умолчанию для fmincon
.
'TrustRegionCP'
и 'ExtendedCP'
SolverTypesThe 'TrustRegionCP'
и 'ExtendedCP'
решатели имеют опции для управления итерациями числа и остановкой допусков. Более того, эти решатели используют linprog
как главный решатель, и все linprog
опции поддерживаются с помощью optimoptions
структуры. Все эти опции заданы с помощью setSolver
.
Для примера можно использовать setSolver
увеличить количество итераций для 'TrustRegionCP'
:
p = PortfolioMAD; 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 = PortfolioMAD; 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
, оптимизация портфеля для PortfolioMAD
объект использует 'sqp'
алгоритм как значение по умолчанию. Для получения дополнительной информации о fmincon
и ограниченные нелинейные алгоритмы оптимизации и опции, см. Ограниченные нелинейные алгоритмы оптимизации.
Изменить fmincon
опции для оптимизации портфеля MAD, использование setSolver
чтобы задать скрытые свойства solverType
и solverOptions
для определения и управления решателем. Поскольку эти свойства решателя скрыты, вы не можете задать их с помощью PortfolioMAD
объект. Значение по умолчанию для fmincon
решатель является 'sqb'
алгоритм и отсутствие отображаемого выхода, поэтому вам не нужно использовать setSolver
для задания 'sqp'
алгоритм для fmincon
.
p = PortfolioMAD;
p = setSolver(p, 'fmincon');
display(p.solverOptions.Algorithm)
display(p.solverOptions.Display)
sqp off
Если вы хотите задать дополнительные опции, связанные с fmincon
решатель, setSolver
принимает эти опции как аргументы пары "имя-значение". Для примера, если вы хотите использовать fmincon
с 'active-set'
алгоритм и с отображенным выходом, используйте setSolver
с:
p = PortfolioMAD; p = setSolver(p, 'fmincon', 'Algorithm', 'active-set', 'Display', 'final'); display(p.solverOptions)
fmincon options: Options used by current Algorithm ('active-set'): (Other available algorithms: 'interior-point', 'sqp', 'sqp-legacy', 'trust-region-reflective') Set properties: Algorithm: 'active-set' Display: 'final' Default properties: CheckGradients: 0 ConstraintTolerance: 1.0000e-06 FiniteDifferenceStepSize: 'sqrt(eps)' FiniteDifferenceType: 'forward' FunctionTolerance: 1.0000e-06 MaxFunctionEvaluations: '100*numberOfVariables' MaxIterations: 400 OptimalityTolerance: 1.0000e-06 OutputFcn: [] PlotFcn: [] SpecifyConstraintGradient: 0 SpecifyObjectiveGradient: 0 StepTolerance: 1.0000e-06 TypicalX: 'ones(numberOfVariables,1)' UseParallel: 0
Кроме того, setSolver
функция принимает optimoptions
объект как второй аргумент. Для примера можно изменить алгоритм на 'active-set'
без отображаемых выходов следующим образом:
p = PortfolioMAD; options = optimoptions('fmincon', 'Algorithm', 'active-set', 'Display', 'off'); p = setSolver(p, 'fmincon', options); display(p.solverOptions.Algorithm) display(p.solverOptions.Display)
active-set off
Смешанный целочисленный решатель нелинейного программирования (MINLP), сконфигурированный с помощью setSolverMINLP
, позволяет вам задать связанные опции решателя для оптимизации портфеля для PortfolioMAD
объект. Решатель MINLP используется, когда любой один, или любая комбинация 'Conditional'
BoundType
, MinNumAssets
, или MaxNumAssets
ограничения активны, задача портфеля сформулирована путем добавления NumAssets
двоичные переменные, где 0
указывает на отсутствие инвестиций, и 1
инвестируется. Для получения дополнительной информации об использовании 'Conditional'
BoundType
, см. setBounds
. Для получения дополнительной информации об указании MinNumAssets
и MaxNumAssets
, см. setMinMaxNumAssets
.
При использовании estimate
функции со PortfolioMAD
объект, где 'Conditional'
BoundType
, MinNumAssets
, или MaxNumAssets
ограничения активны, автоматически используется целое число смешанного решателя нелинейного программирования (MINLP).
В следующей таблице приведены инструкции по использованию setSolver
и setSolverMINLP
.
Задача PortfolioMAD | Функция PortfolioMAD | Тип задачи оптимизации | Основной решатель | Вспомогательный решатель |
---|---|---|---|---|
PortfolioMAD без активных 'Conditional'
BoundType , MinNumAssets , и MaxNumAssets | estimateFrontierByRisk | Оптимизация портфеля для определенного уровня риска вводит нелинейное ограничение. Поэтому эта задача имеет линейную цель с линейными и нелинейными ограничениями. | 'TrustRegionCP' , 'ExtendedCP' , или 'fmincon' использование setSolver |
|
PortfolioMAD без активных 'Conditional'
BoundType , MinNumAssets , и MaxNumAssets | estimateFrontierByReturn | Нелинейная цель с линейными ограничениями | 'TrustRegionCP' , 'ExtendedCP' , или 'fmincon' использование setSolver |
|
PortfolioMAD без активных 'Conditional'
BoundType , MinNumAssets , и MaxNumAssets | estimateFrontierLimits | Нелинейный или линейный объект с линейными ограничениями | Для Для | Не применяется |
PortfolioMAD с активными 'Conditional'
BoundType , MinNumAssets , и MaxNumAssets | estimateFrontierByRisk | Проблема сформулирована путем введения NumAssets двоичные переменные, чтобы указать, инвестирован ли соответствующий актив или нет. Поэтому это требует смешанного целочисленного нелинейного решателя программирования. Предлагаются три типа решателей MINLP, см. setSolverMINLP . | Смешанный целочисленный решатель нелинейного программирования (MINLP) с использованием setSolverMINLP | 'fmincon' используется, когда estimate функции сокращают задачу до NLP. Этот решатель сконфигурирован через setSolver . |
PortfolioMAD с активными 'Conditional'
BoundType , MinNumAssets , и MaxNumAssets | estimateFrontierByReturn | Проблема сформулирована путем введения NumAssets двоичные переменные, чтобы указать, инвестирован ли соответствующий актив или нет. Поэтому это требует смешанного целочисленного нелинейного решателя программирования. Предлагаются три типа решателей MINLP, см. setSolverMINLP . | Смешанный целочисленный решатель нелинейного программирования (MINLP) с использованием setSolverMINLP | 'fmincon' используется, когда estimate функции сокращают задачу до NLP. Этот решатель сконфигурирован через setSolver |
PortfolioMAD с активными 'Conditional'
BoundType , MinNumAssets , и MaxNumAssets | estimateFrontierLimits | Проблема сформулирована путем введения NumAssets двоичные переменные, чтобы указать, инвестирован ли соответствующий актив или нет. Поэтому это требует смешанного целочисленного нелинейного решателя программирования. Предлагаются три типа решателей MINLP, см. setSolverMINLP . | Смешанный целочисленный решатель нелинейного программирования (MINLP) с использованием setSolverMINLP | 'fmincon' используется, когда estimate функции сокращают задачу до NLP. Этот решатель сконфигурирован через setSolver |
estimateFrontier
| estimateFrontierByReturn
| estimateFrontierByRisk
| estimateFrontierByRisk
| estimateFrontierLimits
| estimatePortReturn
| estimatePortRisk
| PortfolioMAD
| setSolver
| setSolverMINLP