Выбор и управление решателем для оптимизации портфеля Среднего Отклонения

Решателем по умолчанию для оптимизации портфеля среднего отклонения является lcprog, который реализует алгоритм линейного программирования взаимозависимости (LCP). Несмотря на то, что lcprog работает на большинство проблем, можно настроить аргументы, чтобы управлять алгоритмом. В качестве альтернативы инструменты оптимизации портфеля среднего отклонения позволяют вам использовать любое из изменений quadprog из программного обеспечения Optimization Toolbox™. Как Optimization Toolbox, который использует interior-point-convex алгоритм как алгоритм по умолчанию для quadprog, инструменты оптимизации портфеля также используют interior-point-convex алгоритм как значение по умолчанию. Для получения дополнительной информации о quadprog и алгоритмы квадратичного программирования и опции, см. Алгоритмы Квадратичного программирования (Optimization Toolbox).

Используя 'lcprog' и 'quadprog'

Изменить любой lcprog или задавать quadprog как ваш решатель, используйте setSolver функционируйте, чтобы установить скрытые свойства solverType и solverOptions это задает и управляет решателем. Поскольку свойства решателя скрыты, вы не можете установить их с помощью Portfolio объект. Решателем по умолчанию является lcprog таким образом, вы не должны использовать setSolver задавать этот решатель. Использовать quadprog, можно установить interior-point-convex по умолчанию алгоритм quadprog использование:

p = Portfolio;
p = setSolver(p, 'quadprog');
display(p.solverType);
display(p.solverOptions);
quadprog
  quadprog options:

   Options used by current Algorithm ('interior-point-convex'):
   (Other available algorithms: 'trust-region-reflective')

   Set properties:
              Algorithm: 'interior-point-convex'
                Display: 'off'
    OptimalityTolerance: 1.0000e-12

   Default properties:
    ConstraintTolerance: 1.0000e-08
           LinearSolver: 'auto'
          MaxIterations: 200
          StepTolerance: 1.0000e-12
и можно переключиться назад tolcprog с:
p = setSolver(p, 'lcprog');
display(p.solverType);
display(p.solverOptions);
lcprog
     MaxIter: []
    TieBreak: []
      TolPiv: 5.0000e-08
В обоих случаях, setSolver настраивает опции по умолчанию, сопоставленные с любым решателем. Если вы хотите указать, что дополнительные опции сопоставили с данным решателем, setSolver принимает эти опции с аргументами пары "имя-значение" аргумента в вызове функции. Например, если вы намереваетесь использовать quadprog и хочу использовать 'trust-region-reflective' алгоритм, вызовите setSolver с:
p = Portfolio;
p = setSolver(p, 'quadprog', 'Algorithm', 'trust-region-reflective');
display(p.solverOptions);
 quadprog options:

   Options used by current Algorithm ('trust-region-reflective'):
   (Other available algorithms: 'interior-point-convex')

   Set properties:
              Algorithm: 'trust-region-reflective'

   Default properties:
                Display: 'final'
      FunctionTolerance: 'default dependent on problem'
     HessianMultiplyFcn: []
          MaxIterations: 'default dependent on problem'
    OptimalityTolerance: 'default dependent on problem'
          StepTolerance: 2.2204e-14
    SubproblemAlgorithm: 'cg'
               TypicalX: 'ones(numberOfVariables,1)'

Кроме того, если вы хотите задать какую-либо из опций для quadprog это обычно устанавливается через optimoptions от Optimization Toolbox, setSolver принимает optimoptions возразите в качестве второго аргумента. Например, можно запустить с опций по умолчанию для quadprog установите setSolver и затем измените алгоритм в 'trust-region-reflective' без отображенного вывода:

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

Используя смешанное целочисленное нелинейное программирование (MINLP) решатель

Смешанное целочисленное нелинейное программирование (MINLP) решатель, сконфигурированное использование setSolverMINLP, позволяет вам задать сопоставленные опции решателя для оптимизации портфеля для Portfolio объект. Решатель MINLP используется когда любой или любая комбинация 'Conditional' BoundType, MinNumAssets, или MaxNumAssets ограничения активны. В этом случае проблема портфеля формулируется путем добавления NumAssets бинарные переменные, где 0 указывает не инвестированный, и 1 инвестирован. Для получения дополнительной информации об использовании 'Conditional' BoundType, смотрите setBounds. Для получения дополнительной информации об определении MinNumAssets и MaxNumAssets, смотрите setMinMaxNumAssets.

При использовании estimate функции с Portfolio возразите где 'Conditional' BoundType, MinNumAssets, или MaxNumAssets ограничения активны, смешанное целочисленное нелинейное программирование (MINLP), решатель автоматически используется.

Инструкции по решателю для объектов портфеля

Следующая таблица предоставляет инструкции для использования setSolver и setSolverMINLP.

Проблема портфеляФункция портфеляТип задачи оптимизацииОсновной решатель Решатель помощника
Портфель, не отслеживая ошибочные ограниченияestimateFrontierByRiskОптимизация портфеля для уровня определенного риска вводит нелинейное ограничение. Поэтому эта проблема имеет линейную цель с линейными и нелинейными ограничениями.'fmincon' использование setSolver

Для ‘min’: квадратичная цель, 'quadprog' или 'lcprog' использование setSolver

Для ‘max’: линейная цель, 'linprog' или 'lcprog' использование setSolver

Портфель, не отслеживая ошибочные ограниченияestimateFrontierByReturnКвадратичная цель с линейными ограничениями'quadprog' или 'lcprog' использование setSolver

Для ‘min’: квадратичная цель, 'quadprog' или 'lcprog' использование setSolver

Для ‘max’: линейная цель, 'linprog' или 'lcprog' использование setSolver

Портфель, не отслеживая ошибочные ограниченияestimateFrontierLimits

Квадратичная или линейная цель с линейными ограничениями

Для ‘min’: квадратичная цель, 'quadprog' или 'lcprog' использование setSolver

Для ‘max’: линейная цель, 'linprog' или 'lcprog' использование setSolver

Не применяется
Портфель, не отслеживая ошибочные ограниченияestimateMaxSharpeRatioКвадратичная цель с линейными ограничениями'quadprog' использование setSolver

Поскольку estimateMaxSharpeRatio внутренне вызовы estimateFrontierLimits, все решатели необходимы estimateFrontierLimits будут решатели помощника

Портфель с отслеживанием ошибочных ограниченийestimateFrontierByRiskЛинейная цель с линейными и нелинейными ограничениями'fmincon' использование setSolverНе применяется
Портфель с отслеживанием ошибочных ограниченийestimateFrontierByReturnЛинейная цель с линейными и нелинейными ограничениями'fmincon' использование setSolverНе применяется
Портфель с отслеживанием ошибочных ограниченийestimateFrontierLimitsКвадратичный (проблема риска min) или линейный (макс. возвращают проблему), цель с линейными и нелинейными ограничениями'fmincon' использование setSolverНе применяется
Портфель с отслеживанием ошибочных ограниченийestimateMaxSharpeRatioКвадратичная цель с линейными и нелинейными ограничениями'fmincon' использование setSolverНе применяется
Портфель с активным 'Conditional' BoundType, MinNumAssets, и MaxNumAssetsestimateFrontierByRiskПроблема формулируется путем представления NumAssets бинарные переменные, чтобы указать, инвестируют ли соответствующий актив или нет. Поэтому это требует смешанного целочисленного решателя нелинейного программирования. Три типа решателей MINLP предлагаются, видят setSolverMINLP.Смешанный целочисленный решатель нелинейного программирования (MINLP) использование setSolverMINLP'quadprog' или 'fmincon' используются когда estimate функции уменьшают проблему в NLP. Эти два решателя могут быть сконфигурированы через setSolver.
Портфель с активным 'Conditional' BoundType, MinNumAssets, и MaxNumAssetsestimateFrontierByReturnПроблема формулируется путем представления NumAssets бинарные переменные, чтобы указать, инвестируют ли соответствующий актив или нет. Поэтому это требует смешанного целочисленного решателя нелинейного программирования. Три типа решателей MINLP предлагаются, видят setSolverMINLP.Смешанный целочисленный решатель нелинейного программирования (MINLP) использование setSolverMINLP'quadprog' или 'fmincon' используются когда estimate функции уменьшают проблему в NLP. Эти два решателя могут быть сконфигурированы через setSolver
Портфель с активным 'Conditional' BoundType, MinNumAssets, и MaxNumAssetsestimateFrontierLimitsПроблема формулируется путем представления NumAssets бинарные переменные, чтобы указать, инвестируют ли соответствующий актив или нет. Поэтому это требует смешанного целочисленного решателя нелинейного программирования. Три типа решателей MINLP предлагаются, видят setSolverMINLP.Смешанный целочисленный решатель нелинейного программирования (MINLP) использование setSolverMINLP'quadprog' или 'fmincon' используются когда estimate функции уменьшают проблему в NLP. Эти два решателя могут быть сконфигурированы через setSolver
Портфель с активным 'Conditional' BoundType, MinNumAssets, и MaxNumAssetsestimateMaxSharpeRatioПроблема формулируется путем представления NumAssets бинарные переменные, чтобы указать, инвестируют ли соответствующий актив или нет. Поэтому это требует смешанного целочисленного решателя нелинейного программирования. Три типа решателей MINLP предлагаются, видят setSolverMINLP.Смешанный целочисленный решатель нелинейного программирования (MINLP) использование setSolverMINLP'quadprog' или 'fmincon' используются, когда estimate функции уменьшают проблему в NLP. Эти два решателя могут быть сконфигурированы через setSolver

Смотрите также

| | |

Связанные примеры

Больше о

Внешние веб-сайты