6

我正在使用 C++11 中可用的随机数生成器。目前,我正在使用均匀分布,这应该给我一个相等的概率来获得我指定的范围 A 和 B 内的任何数字。

但是,我对生成泊松分布感到困惑。虽然我了解如何确定泊松概率,但我不明白如何根据泊松分布“分布”随机数系列。

例如,泊松分布的 C++11 构造函数采用一个参数——λ,它是分布的平均值

std::tr1::poisson_distribution<double> poisson(7.0);
std::cout << poisson(eng) << std::endl;

在泊松概率问题中,这等于给定时间间隔内预期的成功/发生次数。但是,我不明白它在这种情况下代表什么。什么是随机数场景中的“成功”/“发生”?

我感谢任何可以帮助我理解这一点的帮助或参考资料。

4

1 回答 1

3

泊松分布的概率是特定值出现的机会。想象一下,您想计算每天有多少汽车通过某个点。这个值在某些日子会更多,但在其他日子会更少。但是,当在很长一段时间内跟踪这一点时,将开始出现平均值,其附近的值出现的频率更高,而距离更远的值(每天 0 辆汽车或十倍数量)的可能性较小。λ 是出现的那个意思。

当将此反映到 RNG 时,该算法将返回您随机一天通过的汽车数量(统一选择)。正如你可以想象的那样,平均值 λ 更有可能出现,而极值出现的可能性最小。

以下链接有一个泊松分布的示例,显示了您获得的离散结果,以及每个结果发生的机会:

http://www.mathworks.com/help/toolbox/stats/brn2ivz-127.html

示例实现可以为每个值计算它发生的概率,然后根据这些值计算范围以将均匀分布转换为泊松。例如,对于 λ == 2,我们有 0 的 13% 的机会,1 的 27% 的机会,2 的 27% 的机会......然后我们生成一个介于 0.0 和 1.0 之间的良好的旧均匀随机数。如果这个数字 <= 0.13 返回 0。它是否 <= 0.40 返回 1。它是否 <= 0.67 返回 2 等等...

于 2012-02-22T09:31:40.313 回答