随机数分布 c++11
Posted
技术标签:
【中文标题】随机数分布 c++11【英文标题】:Random number distributions c++11 【发布时间】:2013-05-15 19:14:04 【问题描述】:我有一个使用多个分发对象的程序:
喜欢:
std::normal_distribution std::exponential_distribution
等等。
我应该为每个使用一个随机数引擎,还是应该让它们都共享同一个生成器?
【问题讨论】:
【参考方案1】:通常您希望分布的每个实例都表示一个不相关的随机变量,这意味着您应该为每个实例配备一个新引擎。如果您的随机变量是相关的,您应该自己引入相关性而不是重用随机引擎,这样您就可以确保它被正确建模。
有时,您可以通过只播种一个(并且仅用于此)随机引擎并使用它来播种其他随机引擎来作弊。
如果您不关心确保随机变量不相关(例如,您没有做任何科学工作,而是编写游戏),您可以忽略这一点,因为这通常无关紧要。
【讨论】:
如果单个引擎产生的每个输出都与该引擎之前的输出不相关,那么使用单个引擎不应该没问题吗? @bernie 如果是,那么是的。但是,如果您使用的是 PRNG,而不是真正的随机数源,则根据定义,您的输出是相关的 - 可能非常非常难以弄清楚这一点。对于非加密引擎,这通常没有那么难。【参考方案2】:当然,通常的答案是视情况而定。
如果您正在尝试进行模拟工作并且会提取大量随机数,那么最好为每个使用不同的引擎。否则,没关系。
【讨论】:
【参考方案3】:没有理由使用多个引擎。如果您要绘制大量随机数并且您认为结果似乎相关,请将引擎更改为具有更大循环长度的引擎。
【讨论】:
以上是关于随机数分布 c++11的主要内容,如果未能解决你的问题,请参考以下文章