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.

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

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

Для 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 имя аргумента и 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'Level of display в виде разделенной запятой пары, состоящей из 'Display' и поддерживаемое значение:
  • 'iter' отображает вывод в каждой итерации и дает техническое выходное сообщение.

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

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

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

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

'MaxIterationsInactiveCut'Удаляет ограничения, которые не активны для последнего MaxIterationsInactiveCut итерации в виде разделенной запятой пары, состоящей из 'MaxIterationsInactiveCut' и положительное целое число. Значением по умолчанию является 30.
'ActiveCutTolerance'Определяет, активны ли сокращения, и используется вместе с MaxIterationsInactiveCut решить который сокращения удалить из подпроблемы LP в виде разделенной запятой пары, состоящей из '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] Келли, J. E. "Плоский Сокращением Метод для Решения Выпуклых Программ". Журнал Общества Промышленной и Прикладной математики. Издание 8, № 4, декабрь 1960, стр 703–712.

[2] Rockafellar, R. T. и С. Урясев "Оптимизация Подверженного риску значения Условного выражения". Журнал Риска. Издание 2, № 3, Spring 2000, стр 21–41.

[3] Rockafellar, R. T. и С. Урясев "Условное выражение, Подверженное риску значения Общих Распределений Потерь". Журнал Банковского дела и Финансов. Издание 26, 2002, стр 1443–1471.

Введенный в R2011a
Для просмотра документации необходимо авторизоваться на сайте