При решении оптимизации портфеля для PortfolioMAD объект, вы решаете нелинейные задачи оптимизации или с нелинейными объективными или с нелинейными ограничениями. Можно использовать 'TrustRegionCP' (значение по умолчанию) или 'ExtendedCP' решатели, которые реализуют метод плоскости сокращения Келли (см. Келли [45] при Оптимизации Портфеля). В качестве альтернативы можно использовать fmincon и все изменения fmincon от Optimization Toolbox™ поддерживаются. При использовании fmincon как solverType, 'sqp' алгоритм по умолчанию для fmincon.
'TrustRegionCP' и 'ExtendedCP' SolverTypes'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 |
PortfolioMAD | estimateFrontier | estimateFrontierLimits | estimateFrontierByReturn | estimatePortReturn | estimateFrontierByRisk | estimatePortRisk | estimateFrontierByRisk | setSolver | setSolverMINLP