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