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

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

Существует два общих подхода для памяти управления при решении большинства задач, поддержанных механизмом 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 основе. Однако могут быть допустимые причины выборки точных решений в близко расположенных интервалах, таких как оценка зависимых от предшествующего пути развития опций.

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

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

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

Больше о

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