如何从一组伪随机数中获得代表性随机数?

问题描述 投票:0回答:2

假设我从不同的伪随机数生成器中获得了三个伪随机数。由于生成器仅反映真实随机数生成过程的一部分,因此,我认为使数字更接近真实随机数的一种方法可能是以某种方式获取三个伪随机数的“中心”。一种简单的获取“中心”的方法是采用平均值,中位数或众数(如果有)。我想知道是否有更复杂的方法,因为它们应该代表随机数。

random
2个回答
0
投票

为了获得良好的随机数,建议获取一些熵。根据它们是否用于安全性目的,您可以从系统时钟中获取时间作为随机数生成器的种子,或者使用更复杂的方法。项目PWGen download | SourceForge.net是开源的,并且监视Windows事件作为熵的随机位的来源。

您可以从SO中找到有关如何在C ++中随机数的更多信息?也是:Random number generation in C++11: how to generate, how does it work? [closed]。事实证明,C ++的随机数并不总是那么随机:Everything You Never Wanted to Know about C++'s random_device;因此,寻找播种的好方法,例如,将以毫秒为单位的时间传递给srand()并调用rand()可能是一种快速而肮脏的方法。


0
投票

如果您的目标是更好地表示随机性,那么这将是一个坏主意。

[首先,进行思想实验。如果您认为三个值可以提供更多的随机性,岂不是更好?事实证明,如果取n个Uniform(0,1)值的平均值或中值,则当n→∞时,它们都收敛为0.5,即一个点。碰巧的情况是,如果您想了解随机系统,则用“代表性”常量代替分布通常是个坏主意。举一个极端的例子,考虑队列。随着客户/实体的到达率接近可以提供服务的速率,随机队列的平均数量会逐渐增加。但是,如果到达和服务分布是恒定的,则队列将保持零长度,直到到达速率超过服务速率为止,此时它们将变为无限。当速率相等时,随机队列将具有无限队列,而确定性队列将保持其初始长度(通常假定为零)。无穷大和零几乎完全不同,说明用其均值替换排队模型中的分布将使您不了解队列的实际工作方式。

接下来,经验证据。下面的中位数和平均值直方图由三套制服的10,000个样本构成。如您所见,它们具有不同的分布形状,但显然不再是均匀的。值集中在中间,并且在范围(0,1)的端点处逐渐稀少。

histograms of median and avg of 3 U's

uniform distribution has maximum entropy for continuous distributions on a closed interval,因此这两种选择都是不均匀的,显然熵较低,也更容易预测。

© www.soinside.com 2019 - 2024. All rights reserved.