简短版本:如何最有效地表示和添加由它们的实现列表给出的两个随机变量?
稍微长一点的版本: 对于一个工作项目,我需要添加几个随机变量,每个变量都由一个值列表给出。例如,rand 的实现。变种。A 是 {1,2,3},B 的实现是 {5,6,7}。因此,我需要的是A+B的分布,即{1+5,1+6,1+7,2+5,2+6,2+7,3+5,3+6,3+7 }。而且我需要对不同的随机变量(C,D,...)进行多次这种添加(让我们将此添加次数表示为 COUNT,其中 COUNT 可能达到 720)。
问题:如果我使用这种将 A 的每个实现与 B 的每个实现相加的愚蠢算法,复杂性在 COUNT 中是指数级的。因此,对于每个 rv 由三个值给出的情况,COUNT=720 的计算量是 3^720 ~ 3.36xe^343,这将持续到我们的日子结束来计算:) 更不用说实际了生活,每辆房车的长度将是 5000+。
解决方案: 1/ 第一个解决方案是使用我可以进行舍入的事实,即具有整数值的实现。像这样,我可以将每个 rv 表示为一个向量,并且在对应于实现的索引处,我的值为 1(当 rv 具有此实现一次时)。因此,对于 rv 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,
2/ 要拥有更短的数组,可以使用哈希图,这很可能会减少 A+B 中涉及的操作(数组访问)的数量,因为假设理论跨度的一些重要部分 [-50K, 50K] 永远不会成为现实。然而,随着越来越多的随机变量的不断求和,实现的数量呈指数增长,而跨度仅线性增加,因此跨度中的数字密度随着时间的推移而增加。这会扼杀哈希图的好处。
所以问题是:我怎样才能有效地解决这个问题?计算电力交易中的 VaR 需要解决方案,其中所有分布都是凭经验给出的,不像普通分布,因此公式没有用,我们只能模拟。
作为我们部门的一半,使用数学被认为是第一选择。是数学家。但是,我们要添加的分布表现不佳,并且 COUNT=720 是一个极端值。更有可能的是,我们将使用 COUNT=24 作为每日 VaR。考虑到要添加的分布的不良行为,对于 COUNT=24,中心极限定理不会太紧密(SUM(A1, A2, ..., A24) 的发行版不会接近正常值)。在计算可能的风险时,我们希望得到一个尽可能精确的数字。
预期用途是这样的:您从某些操作中获得每小时的现金流量。一小时的现金流分布是 rv A。下一小时,是 rv B,等等。你的问题是:在 99% 的情况下,最大的损失是什么?因此,您对这 24 小时中的每个小时的现金流进行建模,并将这些现金流作为随机变量添加,以便获得全天总现金流的分布。然后你取 0.01 分位数。