При решении оптимизации портфеля для 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
и ограниченные нелинейные алгоритмы оптимизации и опции, см. Ограниченные Нелинейные Алгоритмы Оптимизации (Optimization Toolbox).
Изменить 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
| estimateFrontierByReturn
| estimateFrontierByRisk
| estimateFrontierByRisk
| estimateFrontierLimits
| estimatePortReturn
| estimatePortRisk
| setSolver
| setSolverMINLP