【问题标题】:Distributed random on cluster集群上的随机分布
【发布时间】:2011-03-21 13:02:51
【问题描述】:

我需要一个确定性随机数生成器,该生成器可以维持在集群上工作的某种分布(例如均匀分布或正态分布)。

Boost::Random 满足大部分要求。有什么方法可以在集群中使用它同时保持分布?

如果有一种有效的方法来推进数字生成器,这将是理想的,但是我找不到这样的功能。显然我可以在循环中重复调用该函数,但我需要在每个节点上执行数千次(可能更多次)。

关于如何实现这一点的任何建议?

【问题讨论】:

    标签: c++ random distributed


    【解决方案1】:

    我可能在这里遗漏了一些明显的东西,但你不能给每个集群的 RNG 一个不同的(伪)随机选择的种子吗?我认为这将使您在所有集群上实现均匀分布。

    另一种方法是从一台充当 RNG 服务器的计算机上分配所有随机数,但这可能会很慢。

    【讨论】:

    • 我想不出任何常见的随机分布,每个节点都有自己的 RNG 不起作用。看来OP可能只是想多了这个问题。现在,如果他们想要更奇怪的东西,比如泊松圆盘分布,那么所有位都关闭了。
    • 您遗漏了一些明显的东西。假设您的集群中有两台机器,运气不好,两台机器都以相同的种子开始。您的组合 RNG 现在不再那么随机了。现在,假设种子偏离了一到三个 - 错误仍然存​​在,但它并不那么明显,除非您碰巧注意到第一台机器生成的数字恰好与第二台机器生成的序列相同,移位一到三个。
    • @kfmfe04:不过,我并没有错过。随机性意味着每隔一段时间重复序列的可能性。另外,如果您知道种子,那么模式是可预测的,无论两个种子是否相同,这具有相同的效果。
    • 好吧,实际的问题是,如果您使用相同的 PRNG,则两个流具有相关性(它们完全相同),根据选择的种子移动固定数量的位置后.只要用户意识到这个弱点并认为它可以接受(对于蒙特卡洛模拟或密码学等应用程序来说可能不是),那么这个解决方案就可以了。
    【解决方案2】:

    根据您需要的 PRNG 有多强大,您可能需要在这里小心行事;使用多个 PRNG 肯定存在缺陷。

    尤其是统计领域的专家,他们专门研究 PRNG 的并行算法。

    要开始考虑其中一些问题,您可能需要查看this 之类的论文。

    像所有问题一样,我建议您先把它做好,然后让它快速运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-09
      • 1970-01-01
      相关资源
      最近更新 更多