我正在生成大约 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 亿个相同。