Краткая версия: как наиболее эффективно представлять и добавлять две случайные величины, заданные списками их реализаций?
Немного более длинная версия: для рабочего проекта мне нужно добавить несколько случайных величин, каждый из которых задается списком значений. Например, реализация rand. вар. A являются {1,2,3}, а реализации B - {5,6,7}. Следовательно, мне нужно распределение А + В, т.е. {1 + 5,1 + 6,1 + 7,2 + 5,2 + 6,2 + 7,3 + 5,3 + 6,3 + 7 }. И мне нужно сделать это несколько раз (пусть обозначить это количество дополнений как COUNT, где COUNT может достигать 720) для разных случайных величин (C, D,...).
Проблема:, если я использую этот глупый алгоритм суммирования каждой реализации A с каждой реализацией B, сложность экспоненциальна в COUNT. Следовательно, для случая, когда каждый r.v. задается тремя значениями, сумма вычислений для COUNT = 720 составляет 3 ^ 720 ~ 3,36xe ^ 343, которая продлится до конца наших дней, чтобы рассчитать:) Не говоря уже о том, что в реальной жизни длина каждого р.в. будет 5000 +.
Решения: Первое решение состоит в том, чтобы использовать тот факт, что я в порядке с округлением, т.е. С целыми значениями реализаций. Таким образом, я могу представлять каждый r.v. как вектор, а для индекса, соответствующего реализации, у меня есть значение 1 (когда r.v. имеет эту реализацию один раз). Так что для r.v. A и вектора реализаций, индексированных от 0 до 10, вектор, представляющий A, будет [0,1,1,1,0,0,0...], а представление для B будет [0,0,0, 0,0,1,1,1,0,0,10]. Теперь я создаю A + B, перейдя через эти векторы и делаю то же самое, что и выше (суммируйте каждую реализацию A с каждой реализацией B и кодифицируйте ее в одну и ту же векторную структуру, квадратичную сложность в векторной длине). Поверхность этого подхода заключается в том, что сложность связана. Проблема такого подхода заключается в том, что в реальных приложениях реализации A будут находиться в интервале [-50000,50000] с гранулярностью 1. Следовательно, после добавления двух случайных величин диапазон A + B достигает -100K, 100K.. и после 720 дополнений, диапазон SUM (A, B,...) доходит до [-36M, 36M] и даже квадратичной сложности (по сравнению с экспоненциальной сложностью) на массивах, которые это большое займет навсегда.
2/Чтобы иметь более короткие массивы, можно было бы использовать хэш-карту, которая, скорее всего, уменьшит количество операций (обращения к массиву), участвующих в + B, поскольку предполагается, что какая-то нетривиальная часть теоретического диапазона [ -50K, 50K] никогда не будет реализацией. Однако при непрерывном суммировании все более и более случайных величин число реализаций возрастает экспоненциально, в то время как диапазон увеличивается только линейно, поэтому плотность чисел в промежутке возрастает с течением времени. И это убьет преимущества hashmap.
Итак, вопрос: как я могу эффективно справиться с этой проблемой? Решение необходимо для вычисления VaR при торговле электроэнергией, где все распределения задаются эмпирически и не похожи на обычные распределения, поэтому формулы бесполезны, мы можем имитировать только.
Использование математики рассматривалось как первый вариант как половина нашего отдела. являются математиками. Однако дистрибутивы, которые мы собираемся добавить, плохо себя ведут, а COUNT = 720 - крайняя. Скорее всего, мы будем использовать COUNT = 24 для ежедневного VaR. Принимая во внимание плохое поведение распределений для добавления, для COUNT = 24 центральная предельная теорема не будет слишком тесно (дистрибутив SUM (A1, A2,..., A24) не будет близким к нормальному). Поскольку мы рассчитываем возможные риски, мы хотели бы получить максимально точное число.
Предполагаемое использование: у вас есть часовые сбои от некоторой операции. Распределение денежных потоков в течение одного часа - r.v. A. В течение следующего часа, он r.v. B и т.д. И ваш вопрос: какая самая большая потеря в 99 процентах случаев? Таким образом, вы моделируете денежные потоки за каждый из этих 24 часов и добавляете эти денежные потоки в качестве случайных величин, чтобы получить распределение общего количества casfhlow за весь день. Затем вы берете 0,01 квантиль.