确定两个随机数发生器之间的相似性

时间:2010-11-02 14:27:20

标签: algorithm language-agnostic random statistics

假设我有两个随机数发生器RNG-A和RNG-B,这样:

  • 当调用
  • 时,它们都会产生随机的非无限浮点数
  • 我可以反复调用生成器并生成任意数量的随机数
  • 生成的随机数是独立且相同的分布(即RNG的输出与之前生成的所有内容无关)
  • 我无法保证发布的形状

我想获得衡量两个随机分布的相似程度,并且理想情况下使用它来确定它们是否看起来产生相同的分布。

这样做的最佳算法是什么?

4 个答案:

答案 0 :(得分:3)

我想你会找到答案here

摘录:

测试随机数发生器
观测数据是否满足特定分布? •卡方检验
•Kolmogorov-Smirnov检验
•串行相关测试
•两级测试
•K分布性
•串行测试
•光谱测试
.....

另一部分:

串行相关测试
•测试2个随机变量是否依赖      - 他们的协方差是非零的吗?      - 如果是的话,依赖。相反的不是真的

HTH!

答案 1 :(得分:2)

在随机化算法中主要关注的是均值和方差,同时模式和其他一些因素很重要,但是你可以生成太多的数字并比较它们的相关均值和方差,并检查它们的相似性。您还可以找到它们与其他函数(如高斯函数)的关系。 但对你的案件最有名的测试是:

如果您想拥有有限的数字(例如生成的数字大素数),您也可以使用卡方检验 < / p>

答案 2 :(得分:0)

因为您无法对这两种分布做出声明,您可能需要进行非参数测试来比较(未知)分布。您可以使用K-S测试,但在查看应用程序时,请查看非参数统计信息。

答案 3 :(得分:-1)

当你说比较两个发行版时,你不清楚你想要的答案有多详细。例如,考虑这两个序列:

RNG-A: 1111100000
RNG-B: 1010101010

由于平均值和方差相同,它会以Kolmogorov–Smirnov test的颜色通过。然而,RNG-A和RNG-B产生具有不同特征的序列明显。根据您的情况,这可能是也可能不是问题。只要您了解所涉及的风险,您就可以做出明智的决定。

如果你真的想确保发电机是相同的,那么看看belisarius'答案中提供的链接。但是,这会将RNG与已知分布进行比较。在你的情况下,你不知道任何分布。虽然我认为你可以模拟RNG-A足够的时间作为开始的近似值。

另一个有用的东西是Diehard测试。请参阅stats.SE。

中的question的答案