setSolverMINLP

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

Описание

пример

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 объект, для который любой 'Conditional' BoundType, 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 ограничение, чтобы установить xi = 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

  • Display '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 имя аргумента и 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' - Отобразите вывод в каждой итерации и техническом выходном сообщении

  • '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]. Кроме того, 'Conditional' BoundType ограничение должно установить нижнюю и верхнюю границу так, чтобы положением был любой 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

Когда 'Conditional' BoundType, 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