exponenta event banner

setSolver

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

Описание

пример

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

пример

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.

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

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

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

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

  • 'fmincon'

  • 'quadprog'

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

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

  • 'ExtendedCP'

  • 'fmincon'

  • 'cuttingplane'

    • 'cuttingplane' решатель является реализацией метода [1] секущей плоскости Келли для выпуклой оптимизации с аргументами пары имя-значение для 'MaxIter', 'Abstol', 'Reltol' и 'MasterSolverOptions'. Для получения дополнительной информации о 'cuttingplane' параметры пары «имя-значение» см. в разделе Аргументы пары «имя-значение объекта».

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

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

  • 'ExtendedCP'

  • 'fmincon'

    • Алгоритм по умолчанию для 'fmincon' является 'sqp' алгоритм и 'GradObj' установить в значение 'on'. Для получения дополнительной информации о 'fmincon' параметры пары «имя-значение» см. в разделе Аргументы пары «Имя-значение объекта MAD».

Примечание

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

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

(Необязательно) optimoptions объект, указанный как optimoptions объект, созданный с помощью optimoptions из 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 Аргументы пары имя-значение объекта
Аргументы пары «имя-значение» для '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'Уровень отображения, определяемый как разделенная запятыми пара, состоящая из '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. Nonnegative real между 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 объект. Определение риска портфеля и возврата см. в разделах Прокси-сервер риска и Прокси-сервер возврата.

МинимизексРиск (x) подлежит  Возврату (x) ≥TargetReturnAx≤bAeqx=beqlb≤x≤ub

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

MaximizexReturn (x) подлежит  риску (x) ≤TargetRiskAx≤bAeqx=beqlb≤x≤ub

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

Ссылки

[1] Келли, Дж. Э. «Метод секущей плоскости для решения выпуклых программ». Журнал Общества промышленной и прикладной математики. т. 8, № 4, декабрь 1960, стр. 703-712.

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

[3] Рокафеллар, Р. Т. и С. Урясев «Условная величина риска для общего распределения убытков». Журнал банковских и финансовых операций. Т. 26, 2002, стр. 1443-1471.

Представлен в R2011a