setSolverMINLP

Выберите смешанное целочисленное нелинейное программирование (MINLP) решатель для оптимизации портфеля

Синтаксис

obj = setSolverMINLP(obj,solverTypeMINLP)
obj = setSolverMINLP(___,Name,Value)

Описание

пример

obj = setSolverMINLP(obj,solverTypeMINLP) выбирает смешанное целочисленное нелинейное программирование (MINLP) решатель и позволяет вам задать сопоставленные опции решателя для оптимизации портфеля для Portfolio, PortfolioCVaR или объекта PortfolioMAD.

Когда любой или любая комбинация 'Conditional' , BoundType, MinNumAssets или ограничения MaxNumAssets активны, проблема портфеля, формулируются путем добавления двоичных переменных NumAssets. Бинарная переменная 0 указывает, что актив не инвестируют, и бинарная переменная 1 указывает, что актив инвестируют. Для получения дополнительной информации об использовании 'Conditional' BoundType смотрите setBounds. Для получения дополнительной информации об определении MinNumAssets и MaxNumAssets, смотрите setMinMaxNumAssets.

Если вы используете функции estimate с Portfolio, PortfolioCVaR или объектом PortfolioMAD, для которого любой BoundType 'Conditional', MinNumAssets или ограничения MaxNumAssets активен, решатель MINLP автоматически используется. Для получения дополнительной информации на MINLP, см. Алгоритмы.

пример

obj = setSolverMINLP(___,Name,Value) задает опции с помощью одного или нескольких аргументов пары "имя-значение" в дополнение к входным параметрам в предыдущем синтаксисе.

Примеры

свернуть все

Сконфигурируйте решатель MINLP для трех портфелей активов, для которых у вас есть среднее значение, и значения ковариации актива возвращается.

AssetMean = [ 0.0101110; 0.0043532; 0.0137058 ];
AssetCovar = [ 0.00324625 0.00022983 0.00420395;
               0.00022983 0.00049937 0.00019247;
               0.00420395 0.00019247 0.00764097 ]; 
p = Portfolio('AssetMean', AssetMean, 'AssetCovar', AssetCovar);

При работе с объектом Portfolio используйте setBounds с ограничением 'Conditional'BoundType, чтобы установить x i = 0 или 0.02 <= xi <= 0.5 для всего i = 1... NumAssets.

p = setBounds(p, 0.02, 0.5,'BoundType', 'Conditional', 'NumAssets', 3); 

При работе с объектом Portfolio используйте функцию setMinMaxNumAssets, чтобы настроить MinNumAssets и ограничения MaxNumAssets для портфеля. Это устанавливает предельные ограничения для объекта Portfolio, где общее количество выделенных активов, удовлетворяющих ограничения, между MinNumAssets и MaxNumAssets. При установке MinNumAssets = MaxNumAssets = 2, указывает, что только два из этих трех активов инвестируют в портфель.

p = setMinMaxNumAssets(p, 2, 2); 

Три различных решателя MINLP (OuterApproximation, ExtendedCP, TrustRegionCP) используют сокращающий плоский метод. Используйте функцию setSolverMINLP, чтобы сконфигурировать решатель OuterApproximation и опции.

pint = setSolverMINLP(p,'OuterApproximation', 'NonlinearScalingFactor', 1e4, 'Display', 'iter', 'CutGeneration', 'basic');
pint.solverTypeMINLP
ans = 
'OuterApproximation'
pint.solverOptionsMINLP
ans = struct with fields:
                           MaxIterations: 1000
                    AbsoluteGapTolerance: 1.0000e-07
                    RelativeGapTolerance: 1.0000e-05
                  NonlinearScalingFactor: 10000
                  ObjectiveScalingFactor: 1000
                                 Display: 'iter'
                           CutGeneration: 'basic'
                MaxIterationsInactiveCut: 30
                      ActiveCutTolerance: 1.0000e-07
                  IntMasterSolverOptions: [1x1 optim.options.Intlinprog]
    NumIterationsEarlyIntegerConvergence: 30

Можно также сконфигурировать опции для intlinprog, который является Основным решателем для смешанных целочисленных линейных проблем программирования в решателе MINLP.

pint = setSolverMINLP(p,'OuterApproximation', 'IntMasterSolverOptions', optimoptions('intlinprog','Display','off'));
pint.solverOptionsMINLP.IntMasterSolverOptions
ans = 
  intlinprog options:

   Set properties:
                          Display: 'off'

   Default properties:
             AbsoluteGapTolerance: 0
                       BranchRule: 'reliability'
              ConstraintTolerance: 1.0000e-04
                    CutGeneration: 'basic'
                 CutMaxIterations: 10
                       Heuristics: 'basic'
               HeuristicsMaxNodes: 50
                IntegerPreprocess: 'basic'
                 IntegerTolerance: 1.0000e-05
                  LPMaxIterations: 'max(30000,10*(numberOfEqualities+numberOfInequalities+numberOfVariables))'
            LPOptimalityTolerance: 1.0000e-07
                MaxFeasiblePoints: Inf
                         MaxNodes: 10000000
                          MaxTime: 7200
                    NodeSelection: 'simplebestproj'
                  ObjectiveCutOff: Inf
    ObjectiveImprovementThreshold: 0
                        OutputFcn: []
                          PlotFcn: []
             RelativeGapTolerance: 1.0000e-04
                  RootLPAlgorithm: 'dual-simplex'
              RootLPMaxIterations: 'max(30000,10*(numberOfEqualities+numberOfInequalities+numberOfVariables))'

Сконфигурируйте решатель MINLP для 12 портфелей активов, которые используют полунепрерывный и ограничения кардинальности.

load CAPMuniverse
p = PortfolioCVaR('AssetList',Assets(1:12));
p = simulateNormalScenariosByData(p, Data(:,1:12), 20000 ,'missingdata',true);
p = setProbabilityLevel(p, 0.95);

При работе с объектом PortfolioCVaR функция setMinMaxNumAssets позволяет вам настроить пределы на количестве активов, которые инвестируют. Следующий пример указывает, что минимум пяти активов и максимум 10 активов нужно инвестировать с помощью setMinMaxNumAssets, и инвестиции должны быть больше, чем 4% и меньше чем 45% с помощью setBounds.

p = setMinMaxNumAssets(p, 5, 10);  
p = setBounds(p, 0.04, 0.45, 'BoundType', 'conditional');  

Три различных решателя MINLP (OuterApproximation, ExtendedCP, TrustRegionCP) используют сокращающий плоский метод. Используйте функцию setSolverMINLP, чтобы сконфигурировать решатель OuterApproximation и опции.

pint = setSolverMINLP(p,'OuterApproximation', 'NonlinearScalingFactor', 1e4, 'Display', 'iter', 'CutGeneration', 'basic');
pint.solverTypeMINLP
ans = 
'OuterApproximation'
pint.solverOptionsMINLP
ans = struct with fields:
                           MaxIterations: 1000
                    AbsoluteGapTolerance: 1.0000e-07
                    RelativeGapTolerance: 1.0000e-05
                  NonlinearScalingFactor: 10000
                  ObjectiveScalingFactor: 1000
                                 Display: 'iter'
                           CutGeneration: 'basic'
                MaxIterationsInactiveCut: 30
                      ActiveCutTolerance: 1.0000e-07
                  IntMasterSolverOptions: [1x1 optim.options.Intlinprog]
    NumIterationsEarlyIntegerConvergence: 30

Можно также сконфигурировать опции для intlinprog, который является Основным решателем для смешанных целочисленных линейных проблем программирования в решателе MINLP.

pint = setSolverMINLP(p,'OuterApproximation', 'IntMasterSolverOptions', optimoptions('intlinprog','Display','off'));
pint.solverOptionsMINLP.IntMasterSolverOptions
ans = 
  intlinprog options:

   Set properties:
                          Display: 'off'

   Default properties:
             AbsoluteGapTolerance: 0
                       BranchRule: 'reliability'
              ConstraintTolerance: 1.0000e-04
                    CutGeneration: 'basic'
                 CutMaxIterations: 10
                       Heuristics: 'basic'
               HeuristicsMaxNodes: 50
                IntegerPreprocess: 'basic'
                 IntegerTolerance: 1.0000e-05
                  LPMaxIterations: 'max(30000,10*(numberOfEqualities+numberOfInequalities+numberOfVariables))'
            LPOptimalityTolerance: 1.0000e-07
                MaxFeasiblePoints: Inf
                         MaxNodes: 10000000
                          MaxTime: 7200
                    NodeSelection: 'simplebestproj'
                  ObjectiveCutOff: Inf
    ObjectiveImprovementThreshold: 0
                        OutputFcn: []
                          PlotFcn: []
             RelativeGapTolerance: 1.0000e-04
                  RootLPAlgorithm: 'dual-simplex'
              RootLPMaxIterations: 'max(30000,10*(numberOfEqualities+numberOfInequalities+numberOfVariables))'

Сконфигурируйте решатель MINLP для 12 портфелей активов, которые используют полунепрерывный и ограничения кардинальности.

load CAPMuniverse
p = PortfolioMAD('AssetList',Assets(1:12));
p = simulateNormalScenariosByData(p, Data(:,1:12), 20000 ,'missingdata',true);

При работе с объектом PortfolioMAD функция setMinMaxNumAssets позволяет вам настроить пределы на количестве активов, которые инвестируют. Следующий пример указывает, что минимум пяти активов и максимум 10 активов нужно инвестировать с помощью setMinMaxNumAssets, и инвестиции должны быть больше, чем 4% и меньше чем 45% с помощью setBounds.

p = setMinMaxNumAssets(p, 5, 10);  
p = setBounds(p, 0.04, 0.45, 'BoundType', 'conditional');  

Три различных решателя MINLP (OuterApproximation, ExtendedCP, TrustRegionCP) используют сокращающий плоский метод. Используйте функцию setSolverMINLP, чтобы сконфигурировать решатель OuterApproximation и опции.

pint = setSolverMINLP(p,'OuterApproximation', 'NonlinearScalingFactor', 1e4, 'Display', 'iter', 'CutGeneration', 'basic');
pint.solverTypeMINLP
ans = 
'OuterApproximation'
pint.solverOptionsMINLP
ans = struct with fields:
                           MaxIterations: 1000
                    AbsoluteGapTolerance: 1.0000e-07
                    RelativeGapTolerance: 1.0000e-05
                  NonlinearScalingFactor: 10000
                  ObjectiveScalingFactor: 1000
                                 Display: 'iter'
                           CutGeneration: 'basic'
                MaxIterationsInactiveCut: 30
                      ActiveCutTolerance: 1.0000e-07
                  IntMasterSolverOptions: [1x1 optim.options.Intlinprog]
    NumIterationsEarlyIntegerConvergence: 30

Можно также сконфигурировать опции для intlinprog, который является Основным решателем для смешанных целочисленных линейных проблем программирования в решателе MINLP.

pint = setSolverMINLP(p,'OuterApproximation', 'IntMasterSolverOptions', optimoptions('intlinprog','Display','off'));
pint.solverOptionsMINLP.IntMasterSolverOptions
ans = 
  intlinprog options:

   Set properties:
                          Display: 'off'

   Default properties:
             AbsoluteGapTolerance: 0
                       BranchRule: 'reliability'
              ConstraintTolerance: 1.0000e-04
                    CutGeneration: 'basic'
                 CutMaxIterations: 10
                       Heuristics: 'basic'
               HeuristicsMaxNodes: 50
                IntegerPreprocess: 'basic'
                 IntegerTolerance: 1.0000e-05
                  LPMaxIterations: 'max(30000,10*(numberOfEqualities+numberOfInequalities+numberOfVariables))'
            LPOptimalityTolerance: 1.0000e-07
                MaxFeasiblePoints: Inf
                         MaxNodes: 10000000
                          MaxTime: 7200
                    NodeSelection: 'simplebestproj'
                  ObjectiveCutOff: Inf
    ObjectiveImprovementThreshold: 0
                        OutputFcn: []
                          PlotFcn: []
             RelativeGapTolerance: 1.0000e-04
                  RootLPAlgorithm: 'dual-simplex'
              RootLPMaxIterations: 'max(30000,10*(numberOfEqualities+numberOfInequalities+numberOfVariables))'

Входные параметры

свернуть все

Объект для портфеля, заданное использование Portfolio, PortfolioCVaR или объект PortfolioMAD. Для получения дополнительной информации о создании объекта портфеля смотрите

Типы данных: object

Решатель MINLP для оптимизации портфеля, когда любой или любая комбинация 'Conditional' BoundType, MinNumAssets или ограничения MaxNumAssets активны. Задайте solverTypeMINLP с помощью вектора символов или строки со значением 'OuterApproximation', 'ExtendedCP' или 'TrustRegionCP'.

Для объекта Portfolio значением по умолчанию solverTypeMINLP является 'OuterApproximation' со следующими настройками по умолчанию для пар "имя-значение" для setSolverMINLP:

Для объекта PortfolioCVaR и PortfolioMAD значением по умолчанию solverTypeMINLP является 'TrustRegionCP' со следующими настройками по умолчанию для пар "имя-значение" для setSolverMINLP:

  • 'MaxIterations' - 1000

  • AbsoluteGapTolerance - 1.0000e-07

  • RelativeGapTolerance - 1.0000e-05

  • Отображение- 'off'

  • NonlinearScalingFactor - 1000

  • ObjectiveScalingFactor - 1000

  • CutGeneration - 'basic'

  • MaxIterationsInactiveCut - 30

  • NumIterationsEarlyIntegerConvergence - 30

  • ActiveCutTolerance - 1.0000e-07

  • TrustRegionStartIteration - 2

  • ShrinkRatio - 0.75

  • DeltaLimit - 1

  • IntMasterSolverOptions - optimoptions('intlinprog','Algorithm','Dual-Simplex','Display','off')

Типы данных: char | string

Аргументы в виде пар имя-значение

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: p = setSolverMINLP(p,'ExtendedCP','MaxIterations',10000,'NonlinearScalingFactor',1000)

Максимальное количество итераций, заданных как пара, разделенная запятой, состоящая из 'MaxIterations' и неотрицательного целочисленного значения.

Типы данных: double

Масштабный коэффициент для нелинейной функции и градиента, заданного как пара, разделенная запятой, состоящая из 'NonlinearScalingFactor' и неотрицательного действительного значения.

Типы данных: double

Масштабирует целевую функцию, используемую MasterSolver фактором, заданным как пара, разделенная запятой, состоящая из 'ObjectiveScalingFactor' и неотрицательного действительного значения.

Типы данных: double

Решатель останавливается, если абсолютная разность между аппроксимированным нелинейным значением функции и его истинным значением меньше чем или равна AbsoluteGapTolerance. AbsoluteGapTolerance задан как пара, разделенная запятой, состоящая из 'AbsoluteGapTolerance' и неотрицательного действительного значения.

Типы данных: double

Решатель останавливается, если относительная разница между аппроксимированным нелинейным значением функции и его истинным значением меньше чем или равна RelativeGapTolerance. RelativeGapTolerance задан как пара, разделенная запятой, состоящая из 'AbsoluteGapTolerance' и неотрицательного действительного значения.

Типы данных: double

Отобразите выходной формат, заданный как пара, разделенная запятой, состоящая из 'Display' и вектора символов со значением:

  • 'off'- Не отобразите вывод

  • 'iter' - Display вывод в каждой итерации и техническом выходном сообщении

  • 'final' - Отобразите только окончательный вывод и итоговое техническое выходное сообщение

Типы данных: char

Сократите спецификацию, заданную как пара, разделенная запятой, состоящая из 'CutGeneration' и вектора символов с одним из этих значений:

  • 'midway' - Добавьте новое сокращение в средней точке между последними и предыдущими найденными решениями.

  • 'basic' - Добавьте новое сокращение в последнем найденном решении.

Типы данных: char

Удаляет ограничения, которые не активны для последних итераций MaxIterationsInactiveCut, заданных как пара, разделенная запятой, состоящая из 'MaxIterationsInactiveCut' и неотрицательного целочисленного значения. Обычно значение MaxIterationsInactiveCut больше, чем 10.

Типы данных: double

Когда решение для целочисленной переменной стабильно для последних итераций NumIterationsEarlyIntegerConvergence, решатель вычисляет итоговый NLP при помощи последнего решения для целочисленной переменной в MILP. NumIterationsEarlyIntegerConvergence задан как пара, разделенная запятой, состоящая из 'NumIterationsEarlyIntegerConvergence' и неотрицательного целочисленного значения.

Типы данных: double

Определяет, активны ли сокращения, заданы как пара, разделенная запятой, состоящая из 'ActiveCutTolerance' и неотрицательного действительного значения. ActiveCutTolerance используется вместе с MaxIterationsInactiveCut, чтобы решить который сокращения удалить из подпроблемы MILP.

Типы данных: double

Решатель начинает применять доверительную эвристику области в TrustRegionStartIteration, заданном как пара, разделенная запятой, состоящая из 'TrustRegionStartIteration' и неотрицательного целого числа.

Примечание

Аргумент пары "имя-значение" TrustRegionStartIteration может только использоваться с solverTypeMINLP 'TrustRegionCP'.

Типы данных: double

Отношение, чтобы уменьшить размер доверительной области, заданной как пара, разделенная запятой, состоящая из 'ShrinkRatio' и неотрицательного действительного значения между 0 и 1. Если аппроксимированные функции не имеют хорошего соглашения в предыдущих итерациях, алгоритм использует это отношение, чтобы уменьшить размер доверительной области.

Примечание

Аргумент пары "имя-значение" ShrinkRatio может только использоваться с solverTypeMINLP 'TrustRegionCP'.

Типы данных: double

Доверительная область аппроксимированных функций ограничена DeltaLimit во время итераций, заданных как пара, разделенная запятой, состоящая из 'DeltaLimit' и неотрицательного действительного значения. Для проблем портфеля 1 обычно является хорошим значением для DeltaLimit, поскольку веса портфеля между 0 и 1.

Примечание

Аргумент пары "имя-значение" DeltaLimit может только использоваться с solverTypeMINLP 'TrustRegionCP'.

Типы данных: double

Опции для основного решателя intlinprog, заданный как пара, разделенная запятой, состоящая из 'IntMasterSolverOptions' и объекта optimoptions.

Пример: 'IntMasterSolverOptions', optimoptions('intlinprog','Display','off')

Типы данных: object

Выходные аргументы

свернуть все

Обновленный объект портфеля, возвращенный как Portfolio, PortfolioCVaR или объект PortfolioMAD.

Больше о

свернуть все

Решатели MINLP

Все три решателя MINLP ('OuterApproximation', 'ExtendedCP' и 'TrustRegionCP') заданный solverTypeMINLP полагаются на сокращающую плоскую концепцию.

Эти решатели MINLP аппроксимируют нелинейную выпуклую функцию f (x) кусочной линейной аппроксимацией, которая является последовательностью линейных сокращений вокруг исходной функции. Таким образом исходный MINLP уменьшается до последовательности подпроблем MILP, каждого с более усовершенствованным приближением к f (x), чем предыдущий MILPs, и приводит к более оптимальному решению. Процесс продолжается, пока решение, найденное от MILP, не сходится к истинному значению функции в определенном допуске.

  • Решатель 'ExtendedCP' итеративно добавляет линейное сокращение в последнем решении, которое, как находят, аппроксимировало f (x).

  • Решатель 'OuterApproximation' подобен 'ExtendedCP', но они отличаются по тому, где добавить сокращение. Вместо того, чтобы использовать решение от последнего MILP, OuterApproximation использует значения целочисленных переменных из последнего решения MILP и фиксирует их, чтобы уменьшать MINLP до нелинейного программирования (NLP) проблема. Сокращение добавляется в решении от этой проблемы NLP.

  • Решатель 'TrustRegionCP' является версией 'ExtendedCP', который изменяется, чтобы ускорить процесс оптимизации. В целом доверительный метод области использует модель, чтобы аппроксимировать истинную функцию в области в каждой итерации. В контексте решателя MINLP модель является максимумом всех добавленных сокращений. Истинной функцией является нелинейный функциональный f (x) в задаче оптимизации. Область модели обновляется на основе того, как хорошо модель аппроксимирует истинную функцию для итерации. Это приближение является сравнением предсказанного сокращения целевой функции с помощью модели по сравнению с истинным сокращением.

Советы

Можно также использовать запись через точку, чтобы задать сопоставленные опции пары "имя-значение".

obj = obj.setSolverMINLP(Name,Value);

Примечание

Свойства solverTypeMINLP и solverOptionsMINLP не могут быть установлены с помощью записи через точку, потому что они - скрытые свойства. Чтобы установить свойства solverTypeMINLP и solverOptionsMINLP, используйте функцию setSolverMINLP непосредственно.

Алгоритмы

Когда любой или любая комбинация 'Conditional' , BoundType, MinNumAssets или ограничения MaxNumAssets активны, проблема портфеля, формулируется путем добавления двоичных переменных NumAssets. Бинарная переменная 0 указывает, что актив не инвестируют, и бинарная переменная 1 указывает, что актив инвестируют.

MinNumAssets и ограничения MaxNumAssets сужают количество активных позиций в портфеле к области значений [minN, maxN]. Кроме того, ограничение BoundType 'Conditional' должно установить нижнюю и верхнюю границу так, чтобы положение было или 0 или находилось в диапазоне [minWgt, maxWgt]. Эти два типа ограничений включены в модель оптимизации портфеля путем представления переменных n, ν i, которые только принимают двоичные значения 0 и 1, чтобы указать, инвестируют ли соответствующий актив (1) или не вложил капитал (0). Здесь n является общим количеством активов, и ограничения могут быть сформулированы как следующие линейные ограничения неравенства:

minNi=1nυi maxNminWgtυiximaxWgtυi0υ1υi  целые числа

В этом уравнении minN и maxN являются представлениями для MinNumAsset и MaxNumAsset, которые установлены с помощью setMinMaxNumAssets. Кроме того, minWgt и maxWgt являются представлениями для LowerBound и UpperBound, которые установлены с помощью setBounds.

Задача оптимизации портфеля, чтобы минимизировать отклонение портфеля согласно достижению целевого ожидаемого дохода и некоторых дополнительных линейных ограничений на веса портфеля, формулируется как

minimizex  xTHxs.t.  mTxTargetReturnAxbAeqx=beqlbxub

В этом уравнении H представляет ковариацию, и m представляет актив, возвращается.

Задача оптимизации портфеля, чтобы максимизировать возврат согласно верхнему пределу отклонения портфеля возвращается и некоторые дополнительные линейные ограничения на веса портфеля, формулируется как

maximizex  mTxs.t.  xTHxTargetRiskAxbAeqx=beqlbxub

Когда BoundType 'Conditional', MinNumAssets и ограничения MaxNumAssets добавляются к этим двум задачам оптимизации, проблемы становятся:

minimizexυ  xTHxs.t.  mTxTargetReturnA'[x;υ]b'Aeqx=beqminNi=1nυimaxNminWgt(υi)ximaxWgt(υi)lbxub0υ1υi  целые числа

maximizexυ  mTxs.t.  xTHxTargetRiskA'[x;υ]b'Aeqx=beqminNi=1nυimaxNminWgtυiximaxWgt(υi)0υ1υi  целые числа

Ссылки

[1] Bonami, P., Kilinc, M. и Дж. Линдерот. "Алгоритмы и программное обеспечение для выпуклых смешанных целочисленных нелинейных программ". Технический отчет № 1664. Отдел информатики, Висконсинский университет в Мадисоне, 2009.

[2] Келли, J. E. "Плоский Сокращением Метод для Решения Выпуклых Программ". Журнал Общества Промышленной и Прикладной математики. Издание 8, Номер 4, 1960, стр 703–712.

[3] Линдерот, J. и С. Райт. "Алгоритмы разложения для Стохастического программирования на Вычислительной Сетке". Вычислительная Оптимизация и Приложения. Издание 24, Выпуск 2-3, 2003, стр 207–250.

[4] Nocedal, J. и С. Райт. Числовая оптимизация. Нью-Йорк: Springer-Verlag, 1999.

Введенный в R2018b