0

我正在生成大约 1 亿个随机数来从 300 件事情中挑选。我需要设置它,以便我有 1000 万个独立实例(不同的种子),每个实例选择 10 次。目标是使汇总结果具有非常低的差异,例如,每个项目被选中的次数大致相同。

问题在于常规 prng,某些数字比其他数字更容易选择。(尝试了lcg和mersenne twister)最多和最少的差异可能是几千到一万)使用线性一致性生成器和mersenne twister,我也尝试用1个实例选择1亿次,也没有产生统一的结果。我猜这是因为周期很长,可能一亿还不够大。从理论上讲,如果我选择足够多的数字,结果应该会达到一致。(应按预期值结算)

我改用了准随机生成器 Sobol,并通过 1 实例测试中的 1 亿得到了更好的结果。(最多选择和最少选择之间的差异约为 5)但是将它们分成 1000 万个实例,每个实例 10 次,失去了一致性,我得到了与 prng 相似的结果。Sobol 似乎对序列非常敏感——随机向前跳过会降低一致性。

是否有一类随机生成器即使在组合 1000 万个独立实例时也能保持类随机的低差异?还是理论上不可能?我现在能想到的一种解决方案是使用 1 个 Sobol 生成器,它在 1000 万个实例之间共享,因此它实际上与 1 个实例测试中的 1 亿个相同。

4

1 回答 1

0

Sobol 的改组和正确使用都应该为您提供所需的一致性。洗牌需要在聚合级别进行(从具有所需聚合频率的全局 100M 样本开始,然后对其进行洗牌以引入随机性,最后拆分为 10 个值实例;正如您所指出的,在每个实例中进行洗牌不会有帮助) .

但这是一种额外的统一性,你可能并不真正需要它:随机性可能就足够了。首先,我会检查检查本身,因为如果有足够的样本,你真的会得到显着的偏差,这听起来很奇怪(检查“卡方检验”来限定这种显着性,或者等效地有多少是“足够”的样本)。因此,对于第一次安全检查:如果您要选择独立值,则以不同的方式简化为 1000 万个实例,从 2 个类别中选择 10 个:您是否得到近似二项分布?对于独家采摘,它是不同的分布(超几何 iirc,但需要检查)。然后推广到更多类别(多项分布),然后才可以安全地继续处理您的问题。

于 2012-06-08T12:05:05.953 回答