Факторы производительности

Память управления

Существует два общих подхода для памяти управления при решении большинства проблем, поддержанных механизмом SDE:

Память управления с Выходными параметрами

Выполните традиционную симуляцию, чтобы моделировать основные переменные интереса, в частности запросив и затем управляя выходными массивами.

Этот подход является прямым и лучший выбор для небольших или проблем среднего размера. Поскольку его выходные параметры являются массивами, удобно управлять моделируемыми результатами в MATLAB® матричный язык. Однако когда шкала проблемы увеличивается, уменьшения преимущества этого подхода, потому что выходные массивы должны сохранить большие количества возможно посторонней информации.

Например, рассмотрите оценку европейской опции, в которой терминальная цена базового актива является единственным значением интереса. Чтобы упростить нагрузку памяти традиционного подхода, сократите количество моделируемых периодов, заданных необходимым входом NPERIODS, и задайте дополнительный вход NSTEPS. Это позволяет вам управлять памятью, не жертвуя точностью (см. Точность Оптимизации: О Точности Решения и Ошибке).

Кроме того, методы симуляции могут определить количество выходных аргументов и выделить память соответственно. А именно, все методы симуляции поддерживают тот же список выходных аргументов:

[Paths,Times,Z]

где Paths и Z могут быть большими, 3D массивами временных рядов. Однако базовый шумовой массив является обычно ненужным, и только хранится, если требуется как вывод. Другими словами, Z хранится только по вашему запросу; не запрашивайте его, если вам не нужен он.

Если вы нуждаетесь в выходном массиве шума Z, но не нуждаетесь в массиве временных рядов Paths, то можно постараться не хранить Paths два пути:

  • Это - лучшая практика использовать заполнителя выходного аргумента ~. Например, используйте следующий список выходных аргументов, чтобы сохранить Z и Times, но не Paths:

    [~,Times,Z]

  • Используйте дополнительный входной флаг StorePaths, который поддерживают все методы симуляции. По умолчанию Paths хранится (StorePaths = true). Однако установка StorePaths к false возвращает Paths как пустую матрицу.

Память управления Используя функции обработки конца периода

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

Этот подход требует, чтобы вы задали одну или несколько функций обработки конца периода и часто является предпочтительным подходом для крупномасштабных проблем. Этот подход позволяет вам избегать симуляции выходные параметры в целом. Поскольку никакие выходные параметры не требуют, 3D массивы временных рядов, Paths и Z не хранятся.

Этот подход часто требует большего усилия, но намного более изящен и позволяет вам настраивать задачи и существенно уменьшать использование памяти. См. Опции Акции Оценки.

Улучшение производительности

Следующие подходы улучшают производительность при решении проблем SDE:

  • Определение параметров модели как традиционные массивы MATLAB и функции, в различных комбинациях. Это обеспечивает гибкий интерфейс, который может поддержать фактически любое общее нелинейное отношение. Однако, в то время как функции предлагают удобное и изящное решение для многих проблем, симуляции, обычно запущенные быстрее, когда вы задаете параметры как векторы с двойной точностью или матрицы. Таким образом это - хорошая практика, чтобы задать параметры модели как массивы, если это возможно.

  • Используйте модели, которые перегрузили Эйлеровы методы симуляции, если это возможно. Используя Броуновское движение (BM) и модели (GBM) геометрического броуновского движения, которые предоставляют перегруженные Эйлеровы методы симуляции, используют в своих интересах отделимый, модели постоянного параметра. Эти специальные методы исключительно быстры, но только доступны моделям с постоянными параметрами, которые моделируются, не задавая обработку конца периода и шумовые функции генерации.

  • Замените симуляцию постоянного параметра, одномерная модель, выведенная от класса SDEDDO с той из диагональной многомерной модели. Обработайте многомерную модель как портфель одномерных моделей. Это увеличивает размерность модели и улучшает производительность путем сокращения эффективного числа испытаний симуляции.

    Примечание

    Этот метод применим только к постоянному параметру одномерные модели, не задавая обработку конца периода и шумовые функции генерации.

  • Используйте в своих интересах то, что методы симуляции разработаны, чтобы обнаружить присутствие NaN (не номер) условия, возвращенные в функции обработки конца периода. NaN представляет результат неопределенного числового вычисления, и любое последующее вычисление на основе NaN производит другой NaN. Это помогает улучшать производительность в определенных ситуациях. Например, рассмотрите пути к симуляции underlier барьерного опциона нокаута (то есть, опция, которая становится бесполезной, когда цена базового актива пересекает некоторый предписанный барьер). Ваша функция конца периода могла обнаружить пересечение барьера и возвратить NaN, чтобы сигнализировать о раннем завершении текущего испытания.

Оптимизация точности: о точности решения и ошибке

Архитектура симуляции, в целом, не моделирует точные решения никакого SDE. Вместо этого архитектура симуляции обеспечивает приближение дискретного времени базового непрерывно-разового процесса, метод симуляции, часто известный как Эйлерово приближение.

В наиболее общем случае данная симуляция выводит непосредственно от SDE. Поэтому моделируемый процесс дискретного времени приближается к базовому непрерывно-разовому процессу только в пределе, когда время постепенно увеличивает нуль подходов dt. Другими словами, архитектура симуляции помещает больше важности в обеспечение, что распределения вероятностей дискретного времени и непрерывно-разовые процессы близки, чем на pathwise близости процессов.

Прежде, чем проиллюстрировать методы, чтобы улучшить приближение решений, полезно понять источник ошибки. В этой архитектуре все методы симуляции принимают, что параметры модели являются кусочной константой по любому временному интервалу длины dt. На самом деле методы даже оценивают динамические параметры в начале каждого временного интервала и содержат их зафиксированный на время интервала. Этот подход выборки вводит ошибку дискретизации.

Однако существуют определенные модели, для которых кусочный постоянный подход предоставляет точные решения:

В более общем плане можно моделировать точные решения для этих моделей, даже если параметры меняются в зависимости от времени, если они отличаются кусочным постоянным способом, таким образом, что изменения параметра совпадают с заданным временем выборки. Однако такое точное совпадение маловероятно; поэтому, ранее обсужденное постоянное условие параметра обычно используется на практике.

Один очевидный способ улучшить точность включает выборку процесса дискретного времени более часто. Это уменьшает шаг времени (dt), заставляя выбранный процесс более тесно аппроксимировать базовый непрерывно-разовый процесс. Несмотря на то, что уменьшение шага времени универсально применимо, однако, существует компромисс среди точности, производительности во время выполнения и использования памяти.

Чтобы управлять этим компромиссом, задайте дополнительный входной параметр, NSTEPS, для всех методов симуляции. NSTEPS указывает, что количество промежуточных временных шагов в течение каждого раза постепенно увеличивает dt, в котором процесс выбирают, но не сообщают.

Это важно и удобно в этой точке подчеркнуть отношение входных параметров NSTEPS, NPERIODS и DeltaTime к выходному вектору Times, который представляет фактические времена наблюдения, в которые сообщают о моделируемых путях.

  • NPERIODS, необходимый вход, указывает на количество периодов симуляции длины DeltaTime и определяет количество строк в моделируемом 3D массиве временных рядов Paths (если вывод требуют).

  • DeltaTime является дополнительным, и указывает на соответствующий NPERIODS - вектор длины положительного шага времени между последовательными выборками. Это представляет знакомый dt, найденный в стохастических дифференциальных уравнениях. Если DeltaTime не задан, значение по умолчанию 1 используется.

  • NSTEPS является также дополнительным, и только свободно связан с NPERIODS и DeltaTime. NSTEPS указывает, что количество промежуточных временных шагов в течение каждого раза постепенно увеличивает DeltaTime.

    А именно, каждый раз постепенно увеличиваются, DeltaTime разделен на подынтервалы NSTEPS длины DeltaTime/NSTEPS каждый и совершенствовал симуляцию путем оценки моделируемого вектора состояния в промежуточные времена (NSTEPS - 1). Несмотря на то, что о векторе состояния вывода (если требуется) не сообщают в эти промежуточные времена, это улучшение улучшает точность, заставляя симуляцию более тесно аппроксимировать базовый непрерывно-разовый процесс. Если NSTEPS не задан, значением по умолчанию является 1 (чтобы не указать ни на какую промежуточную оценку).

  • Выводом Times является NPERIODS + 1 - вектор-столбец длины времен наблюдения, сопоставленных с моделируемыми путями. Каждый элемент Times сопоставлен с соответствующей строкой Paths.

Следующий пример иллюстрирует эту промежуточную выборку путем сравнения различия между решением закрытой формы и последовательностью Эйлеровых приближений, выведенных от различных значений NSTEPS.

Пример: улучшение точности решения

Рассмотрите одномерную модель (GBM) геометрического броуновского движения с помощью gbm с постоянными параметрами:

dXt=0.1Xtdt+0.4XtdWt.

Примите, что ожидаемая норма прибыли и параметры энергозависимости пересчитаны на год, и что календарный год включает 250 торговых дней.

  1. Моделируйте приблизительно четыре года одномерных цен за точное решение и за Эйлерово приближение для различных значений NSTEPS:

    nPeriods = 1000;    
    dt       = 1/250;
    obj      = gbm(0.1,0.4,'StartState',100);
    rng(575,'twister')
    [X1,T1]    = simBySolution(obj,nPeriods,'DeltaTime',dt);
    rng(575,'twister')
    [Y1,T1]    = simByEuler(obj,nPeriods,'DeltaTime',dt);
    rng(575,'twister')
    [X2,T2]    = simBySolution(obj,nPeriods,'DeltaTime',... 
        dt,'nSteps',2);
    rng(575,'twister')
    [Y2,T2]    = simByEuler(obj,nPeriods,'DeltaTime',...
        dt,'nSteps',2);
    rng(575,'twister')
    [X3,T3]    = simBySolution(obj,nPeriods, 'DeltaTime',... 
        dt,'nSteps',10);
    rng(575,'twister')
    [Y3,T3]    = simByEuler(obj,nPeriods,'DeltaTime',... 
        dt,'nSteps',10);
    rng(575,'twister')
    [X4,T4]    = simBySolution(obj,nPeriods,'DeltaTime',... 
        dt,'nSteps',100);
    rng(575,'twister')
    [Y4,T4]    = simByEuler(obj,nPeriods,'DeltaTime',... 
        dt,'nSteps',100);
  2. Сравните ошибку (различие между точным решением и Эйлеровым приближением) графически:

    clf; 
    plot(T1,X1 - Y1,'red')
    hold on;
    plot(T2,X2 - Y2,'blue')
    plot(T3,X3 - Y3,'green')
    plot(T4,X4 - Y4,'black')
    hold off
    xlabel('Time (Years)')
    ylabel('Price Difference')
    title('Exact Solution Minus Euler Approximation')
    legend({'# of Steps = 1'  '# of Steps = 2' ...
        '# of Steps = 10' '# of Steps = 100'},...
        'Location', 'Best')
    hold off

    whos T X Y

Как ожидалось ошибка симуляции уменьшается как количество промежуточных увеличений временных шагов. Поскольку о промежуточных состояниях не сообщают, все моделируемые временные ряды имеют то же количество наблюдений независимо от фактического значения NSTEPS.

Кроме того, поскольку ранее моделируемые точные решения правильны для любого количества промежуточных временных шагов, дополнительные вычисления не нужны для этого примера. На самом деле эта оценка правильна. Точные решения выбираются в промежуточные времена, чтобы гарантировать, что симуляция использует ту же последовательность Гауссовых случайных варьируемых величин в том же порядке. Без этого обеспечения нет никакого способа сравнить моделируемые цены на pathwise основе. Однако могут быть допустимые причины выборки точных решений в близко расположенных интервалах, таких как оценка зависимых от предшествующего пути развития опций.

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

| | | | | | | | | | | | | | | | |

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

Больше о