setSolver

Выберите основной решатель и укажите связанные опции решателя для оптимизации портфеля

Описание

пример

obj = setSolver(obj,solverType) выбирает основной решатель и позволяет вам задать связанные опции решателя для оптимизации портфеля для Portfolio, PortfolioCVaR, или PortfolioMAD объекты. Для получения дополнительной информации о соответствующих рабочих процессах при использовании этих различных объектов смотрите Рабочий процесс объекта портфеля, Рабочий процесс объекта PortfolioCVaR и Рабочий процесс объекта PortfolioMAD.

пример

obj = setSolver(obj,solverType,Name,Value) выбирает основной решатель и позволяет вам задать связанные опции решателя для оптимизации портфеля для объектов портфеля с дополнительными опциями, заданными при помощи одной или нескольких Name,Value аргументы в виде пар.

пример

obj = setSolver(obj,solverType,optimoptions) выбирает основной решатель и позволяет вам задать связанные опции решателя для оптимизации портфеля для объектов портфеля с optimoptions объект.

Примеры

свернуть все

Если вы используете quadprog функционирует как solverType, по умолчанию это interior-point-convex версия quadprog.

load CAPMuniverse
p = Portfolio('AssetList',Assets(1:12));
p = setDefaultConstraints(p);
p = setSolver(p, 'quadprog');
display(p.solverType);
quadprog

Можно переключиться назад на lcprog с:

p = setSolver(p, 'lcprog');
display(p.solverType);
lcprog

Использование 'fmincon' как solverType.

p = PortfolioCVaR;
p = setSolver(p, 'fmincon');
display(p.solverType);
fmincon

Использование 'fmincon' как solverType и используйте аргументы пары "имя-значение", чтобы задать алгоритм равным 'interior-point' и выключить отображение.

p = PortfolioCVaR;
p = setSolver(p, 'fmincon', 'Algorithm', 'interior-point', 'Display', 'off');
display(p.solverOptions.Algorithm);
interior-point
display(p.solverOptions.Display);
off

Использование 'fmincon' как solverType и используйте optimoptions объект, чтобы задать алгоритм равным 'interior-point' и выключить отображение.

p = PortfolioCVaR;
options = optimoptions('fmincon', 'Algorithm', 'interior-point', 'Display', 'off');
p = setSolver(p, 'fmincon', options);
display(p.solverOptions.Algorithm);
interior-point
display(p.solverOptions.Display);
off

Использование 'TrustRegionCP' как solverType с опциями по умолчанию.

p = PortfolioCVaR;
p = setSolver(p,'TrustRegionCP');
display(p.solverType);
trustregioncp
display(p.solverOptions);
  struct with fields:

                MaxIterations: 1000
         AbsoluteGapTolerance: 1.0000e-07
         RelativeGapTolerance: 1.0000e-05
       NonlinearScalingFactor: 1000
       ObjectiveScalingFactor: 1000
          MasterSolverOptions: [1x1 optim.options.Linprog]
                      Display: 'off'
                CutGeneration: 'basic'
     MaxIterationsInactiveCut: 30
           ActiveCutTolerance: 1.0000e-07
                  ShrinkRatio: 0.7500
    TrustRegionStartIteration: 2
                   DeltaLimit: 1

Используйте пару "имя-значение" 'ShrinkRatio' чтобы уменьшить размер доверительной области по 0.75.

p = PortfolioCVaR;
p = setSolver(p,'TrustRegionCP','ShrinkRatio',0.75);
display(p.solverType);
trustregioncp
display(p.solverOptions);
  struct with fields:

                MaxIterations: 1000
         AbsoluteGapTolerance: 1.0000e-07
         RelativeGapTolerance: 1.0000e-05
       NonlinearScalingFactor: 1000
       ObjectiveScalingFactor: 1000
          MasterSolverOptions: [1x1 optim.options.Linprog]
                      Display: 'off'
                CutGeneration: 'basic'
     MaxIterationsInactiveCut: 30
           ActiveCutTolerance: 1.0000e-07
                  ShrinkRatio: 0.7500
    TrustRegionStartIteration: 2
                   DeltaLimit: 1

Для главного решателя продолжите использовать dual-simplex алгоритм без отображения, но ужесточить его допуск на разрыв, чтобы 1e-8.

p = PortfolioCVaR;
options = optimoptions('linprog','Algorithm','Dual-Simplex','Display','off','OptimalityTolerance',1e-8);
p = setSolver(p,'TrustRegionCP','MasterSolverOptions',options);
display(p.solverType)
trustregioncp
display(p.solverOptions)
  struct with fields:

                MaxIterations: 1000
         AbsoluteGapTolerance: 1.0000e-07
         RelativeGapTolerance: 1.0000e-05
       NonlinearScalingFactor: 1000
       ObjectiveScalingFactor: 1000
          MasterSolverOptions: [1x1 optim.options.Linprog]
                      Display: 'off'
                CutGeneration: 'basic'
     MaxIterationsInactiveCut: 30
           ActiveCutTolerance: 1.0000e-07
                  ShrinkRatio: 0.7500
    TrustRegionStartIteration: 2
                   DeltaLimit: 1
display(p.solverOptions.MasterSolverOptions.Algorithm)
dual-simplex
display(p.solverOptions.MasterSolverOptions.Display)
off
display(p.solverOptions.MasterSolverOptions.TolFun)
   1.0000e-08

Для главного решателя используйте interior-point алгоритм без отображения и с допуском завершения 1e-7.

p = PortfolioCVaR;
options = optimoptions('linprog','Algorithm','interior-point','Display','off','OptimalityTolerance',1e-7);
p = setSolver(p,'TrustRegionCP','MasterSolverOptions',options);
display(p.solverType)
trustregioncp
display(p.solverOptions)
  struct with fields:

                MaxIterations: 1000
         AbsoluteGapTolerance: 1.0000e-07
         RelativeGapTolerance: 1.0000e-05
       NonlinearScalingFactor: 1000
       ObjectiveScalingFactor: 1000
          MasterSolverOptions: [1x1 optim.options.Linprog]
                      Display: 'off'
                CutGeneration: 'basic'
     MaxIterationsInactiveCut: 30
           ActiveCutTolerance: 1.0000e-07
                  ShrinkRatio: 0.7500
    TrustRegionStartIteration: 2
                   DeltaLimit: 1
display(p.solverOptions.MasterSolverOptions.Algorithm)
interior-point
display(p.solverOptions.MasterSolverOptions.Display)
off
display(p.solverOptions.MasterSolverOptions.TolFun)
   1.0000e-07

Использование 'fmincon' как solverType.

p = PortfolioMAD;
p = setSolver(p, 'fmincon');
display(p.solverType);
fmincon

Использование 'fmincon' как solverType и используйте аргументы пары "имя-значение", чтобы задать алгоритм равным 'sqp' и включить отображение.

p = PortfolioMAD;
p = setSolver(p, 'fmincon', 'Algorithm', 'sqp', 'Display', 'final');
display(p.solverOptions.Algorithm);
sqp
display(p.solverOptions.Display);
final

Использование 'fmincon' как solverType и используйте optimoptions объект, чтобы задать алгоритм равным 'trust-region-reflective' и выключить отображение.

p = PortfolioMAD;
options = optimoptions('fmincon', 'Algorithm', 'trust-region-reflective', 'Display', 'off');
p = setSolver(p, 'fmincon', options);
display(p.solverOptions.Algorithm);
trust-region-reflective
display(p.solverOptions.Display);
off

Использование 'fmincon' как solverType и используйте optimoptions объект, чтобы задать алгоритм равным 'active-set' и установить флаг градиентов 'on' для 'GradObj' и отключите отображение.

p = PortfolioMAD;
options = optimoptions('fmincon','algorithm','active-set','display','off','gradobj','on');
p = setSolver(p, 'fmincon', options);
display(p.solverOptions.Algorithm);
active-set
display(p.solverOptions.Display);
off

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

свернуть все

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

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

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

The solverType входной параметр зависит от того, какой тип объекта (obj) используется для оптимизации портфеля.

Для Portfolio объект, поддерживаемый solverType являются:

  • 'lcprog' (По умолчанию).

    • The 'lcprog' решатель использует линейное комплементарное программирование с алгоритмом Лемке с аргументами пары "имя-значение" переменных управления для 'maxiter', 'tiebreak', 'tolpiv'. Для получения дополнительной информации о 'lcprog' пары "имя-значение", см. «Аргументы в виде пар имя-значение объекта портфеля».

  • 'fmincon'

  • 'quadprog'

Для PortfolioCVaR объект, поддерживаемый solverType являются:

Для PortfolioMAD объект, поддерживаемый solverType являются:

Примечание

setSolver можно также сконфигурировать опции решателя для 'linprog'. linprog является вспомогательным решателем, используемым при оценке эффективных пограничных задач для Portfolio, PorfolioCVaR, или PortfolioMAD объект. Алгоритм по умолчанию для 'linprog' является 'dual-simplex'. Для получения дополнительной информации о 'linprog' пары "имя-значение", см. «Аргументы в виде пар имя-значение». Дополнительные сведения об использовании вспомогательного решателя см. в Руководствах решателя для объектов портфеля, Руководствах решателя для объектов PortfolioCVaR или Руководствах решателя для объектов PortfolioMAD.

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

(Необязательно) optimoptions объект, заданный как optimoptions объект, который создается с использованием optimoptions из Optimization Toolbox™. Для примера:

p = setSolver(p,'fmincon',optimoptions('fmincon','Display','iter'));

Примечание

optimoptions является методом по умолчанию и рекомендуемым для установки опций решателя, однако optimset также поддерживается.

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

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

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: p = setSolver(p,'cuttingplane','MasterSolverOptions',options) устанавливает cuttingplane опции для PortfolioCVaR объект.

В зависимости от obj тип (Portfolio, PortfolioCVaR, или PortfolioMAD) и заданное solverTypeопции для связанных аргументов пары "имя-значение" различаются.

Portfolio Аргументы в виде пар имя-значение объекта
  • Для Portfolio объект с использованием solverType от lcprogвыберите имя-значение, значение в этой таблице.

    ЗначениеОписание
    'maxiter'

    Максимальное количество итераций, заданное как разделенная разделенными запятой парами, состоящая из 'MaxIter' и положительное целое число. Значение по умолчанию 1 + n3, где n - размерность входа.

    'tiebreak'

    Метод разрыва связей для выбора шарнира, заданный как разделенная разделенными запятой парами, состоящая из 'tiebreak' и один из следующих опций:

    • first - Выберите центр с самым низким индексом.

    • last - Выберите центр с самым высоким индексом.

    • random - Выберите центр случайным образом.

    Значение по умолчанию first.

    'tolpiv'

    Допуск поворота, ниже которого число считается нулем, задается как разделенная разделенными запятой парами, состоящая из 'tolpiv' и числовое значение. Значение по умолчанию 1.0e-9.

  • Для Portfolio объект с использованием solverType из fmincon, см. опции, чтобы выбрать аргументы пары "имя-значение".

  • Для Portfolio объект с использованием solverType из linprog, см. опции, чтобы выбрать аргументы пары "имя-значение".

  • Для Portfolio объект с использованием solverType из quadprog, см. опции, чтобы выбрать аргументы пары "имя-значение".

PortfolioCVaR Аргументы в виде пар имя-значение объекта
  • Для PortfolioCVaR объект с использованием solverType из fmincon, см. опции, чтобы выбрать аргументы пары "имя-значение".

  • Для PorfolioCVaR объект с использованием solverType от 'TrustRegionCP' или 'ExtendedCP', см. Аргументы в виде пар имя-значение для 'TrustRegionCP' и 'ExtendedCP', чтобы выбрать аргументы пары "имя-значение".

  • Для PorfolioCVaR объект с использованием solverType от 'cuttingplane'выберите в этой таблице значение пары "имя-значение".

    ЗначениеОписание
    'MaxIter'

    Максимальное количество итераций, заданное как разделенная разделенными запятой парами, состоящая из 'MaxIter' и положительное целое число. Значение по умолчанию 1000.

    'AbsTol'

    Абсолютный допуск остановки, заданный как разделенная разделенными запятой парами, состоящая из 'AbsTol' и положительная скалярная величина. Значение по умолчанию 1e-6.

    'RelTol'

    Относительный допуск остановки, заданный как разделенная разделенными запятой парами, состоящая из 'RelTol' и положительная скалярная величина. Значение по умолчанию 1e-5.

    'MasterSolverOptions'

    Опции для главного решателя linprog, заданная как разделенная разделенными запятой парами, состоящая из 'MasterSolverOptions' и optimoptions объект. Значение по умолчанию является optimoptions('linprog','Algorithm','Dual-Simplex','Display','off').

  • Для PortfolioCVaR объект с использованием solverType из linprog, см. опции, чтобы выбрать аргументы пары "имя-значение".

PortfolioMAD Аргументы в виде пар имя-значение объекта
  • Для PortfolioMAD объект с использованием solverType из fmincon, см. опции, чтобы выбрать аргументы пары "имя-значение".

  • Для PorfolioMAD объект с использованием solverType от 'TrustRegionCP' или 'ExtendedCP', см. Аргументы в виде пар имя-значение для 'TrustRegionCP' и 'ExtendedCP', чтобы выбрать аргументы пары "имя-значение".

  • Для PortfolioMAD объект с использованием solverType из linprog, см. опции, чтобы выбрать аргументы пары "имя-значение".

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

Для PortfolioCVaR или PortfolioMAD объект с использованием solverType от 'TrustRegionCP' или 'ExtendedCP'выберите в этой таблице значение пары "имя-значение".

ЗначениеОписание
'MaxIterations'

Максимальное количество итераций, заданное как разделенная разделенными запятой парами, состоящая из 'MaxIterations' и положительное вещественное число. Значение по умолчанию 1e-3.

'NonlinearScalingFactor'

Масштабирует нелинейную функцию и ее градиент на множитель, заданный как разделенная разделенными запятой парами, состоящая из 'NonlinearScalingFactor' и положительное вещественное число. Значение по умолчанию 1e-3.

'ObjectiveScalingFactor'

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

'AbsoluteGapTolerance'Решатель останавливается, если абсолютное различие между аппроксимированным значением нелинейной функции и ее истинным значением меньше или равна AbsoluteGapTolerance, заданная как разделенная разделенными запятой парами, состоящая из 'AbsoluteGapTolerance' и положительное вещественное число. Значение по умолчанию 1e-7.
'RelativeGapTolerance'Решатель останавливается, если относительное различие между аппроксимированным значением нелинейной функции и ее истинным значением меньше или равна RelativeGapTolerance, заданная как разделенная разделенными запятой парами, состоящая из 'RelativeGapTolerance' и положительное вещественное число. Значение по умолчанию 1e-5.
'Display'Level of display, заданный как разделенная разделенными запятой парами, состоящая из 'Display' и поддерживаемое значение:
  • 'iter' отображает выход при каждой итерации и выдает техническое выходное сообщение.

  • 'final' отображает только окончательный выход и выдает окончательное техническое выходное сообщение.

  • 'off' является значением по умолчанию и не отображает выходов.

'CutGeneration'Метод добавления выреза, заданный как разделенная разделенными запятой парами, состоящая из 'CutGeneration' и поддерживаемое значение:
  • 'basic' является значением по умолчанию, и новый вырез добавляется в последнем найденном решении.

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

'MaxIterationsInactiveCut'Удаляет ограничения, которые не активны для последнего MaxIterationsInactiveCut итерации, заданные как разделенная разделенными запятой парами, состоящая из 'MaxIterationsInactiveCut' и положительное целое число. Значение по умолчанию 30.
'ActiveCutTolerance'Определяет, активны ли вырезы и используются ли они вместе с MaxIterationsInactiveCut решить, какие вырезы удалить из подпрограммы НД в виде разделенной разделенными запятой парами, состоящей из 'ActiveCutTolerance' и действительное число. Значение по умолчанию 1e-7.
'MasterSolverOptions'Опции для главного решателя linprog, заданная как разделенная разделенными запятой парами, состоящая из 'MasterSolverOptions' и optimoptions объект. Значение по умолчанию является optimoptions('linprog','Algorithm','Dual-Simplex','Display','off').
'TrustRegionStartIteration'Используйте этот параметр только для solverType от 'TrustRegionCP'. Решатель начинает применять эвристическую область доверия в TrustRegionStartIteration. Неотрицательное целое число. По умолчанию это 2.
'ShrinkRatio'Используйте этот параметр только для solverType от 'TrustRegionCP'. Если аппроксимированные функции плохо согласуются в предыдущих итерациях, алгоритм уменьшает размер доверительной области ShrinkRatio. Неотрицательная действительная между 0 и 1. По умолчанию это 0.75.
'DeltaLimit'Используйте этот параметр только для solverType от 'TrustRegionCP'. Доверительная область аппроксимированных функций ограничена DeltaLimit во время итераций. DeltaLimit также используется для инициализации доверительной области. Для задач портфеля, 1 является, как правило, хорошим DeltaLimit, поскольку веса портфеля находятся между 0 и 1. Неотрицательная реальность. По умолчанию это 1.

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

свернуть все

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

Совет

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

obj = obj.setSolver(solverType,Name,Value);

Алгоритмы

Чтобы решить эффективный рубеж портфеля, одна версия задачи оптимизации портфеля минимизирует портфельный риск Risk(x), с учетом целевого возврата и других линейных ограничений, заданных для Portfolio, PortfolioCVaR, или PortfolioMAD объект. Для определения риска портфеля и возврата смотрите Прокси риска и Прокси возврата.

MinimizexRisk(x)при условии , что  Return(x)TargetReturnAxbAeqx=beqlbxub

Альтернативная версия задачи оптимизации портфеля максимизирует ожидаемый возврат портфеля, удовлетворяющую целевому риску и другим линейным ограничениям, заданным для Portfolio, PortfolioCVaR, или PortfolioMAD объект.

MaximizexReturn(x)при условии , что  Risk(x)TargetRiskAxbAeqx=beqlbxub

Прокси- возврат всегда является линейной функцией. Поэтому, в зависимости от прокси риска и того, используется ли он в качестве цели или ограничений, задача должна быть решена другими решателями. Для примера, quadprog подходит для задач с квадратичной функцией в качестве объективных и только линейных ограничений, и fmincon подходит для задач с нелинейной целью или ограничениями. В сложение существуют решатели в Financial Toolbox™, подходящие для определенных специальных типов задач, таких как solverType lcprog, 'TrustRegionCP', или 'ExtendedCP'.

Ссылки

[1] Kelley, J. E. «The Cutting-Plane Method for Solving Convex Programs». Журнал Общества промышленной и прикладной математики. Том 8, № 4, декабрь 1960, с. 703-712.

[2] Рокафеллар, Р. Т. и С. Урясев «Оптимизация условной ценности под угрозой». Журнал рисков. Том 2, № 3, весна 2000, стр. 21-41.

[3] Rockafellar, R. T. and S. Uryasev «Условная стоимость риска для общих распределений потерь». Журнал банковского дела и финансов. Том 26, 2002, с. 1443-1471.

Введенный в R2011a