真正的随机性是什么


23

我是计算机科学专业的学生,​​目前正在参加系统仿真与建模课程。它涉及处理我们周围的日常系统,并通过在不同的分布曲线(例如IID,高斯等)中生成随机数来模拟不同情况下的日常系统。我一直在从事boids项目,一个问题让我惊讶的是,“随机”到底是什么?我的意思是,例如,我们生成的每个随机数,即使是通过Math.random()Java中的方法(例如通过Java中的方法)在编程语言中,本质上都是按照“算法”生成的。

我们如何真正知道我们产生的数字序列实际上是随机的,这对我们尽可能准确地模拟某个模型有帮助吗?



Answers:


18

简短的答案是没有人知道真正的随机性是什么,或者是否存在这样的事情。如果要量化或测量离散对象的随机性,通常应使用Kolmogorov复杂度。在Kolmogorov复杂性出现之前,如果不考虑产生数字的过程,我们就无法量化数字序列的随机性。

这是一个直观的示例,确实使人们回味无穷。考虑抛硬币的顺序。一次扔的结果是头()或尾(T)。假设我们进行了两个实验,我们将硬币扔了10次。第一个实验E 1给我们H H H H H H H H H H。第二个实验E 2给出了T T H T H HTE1H,H,H,H,H,H,H,H,H,HE2。在看到结果之后,您可能会倾向于声称 E 1中的硬币有问题,或者至少出于某些奇怪的原因,您得到的不是随机的。但是,如果你假定既 ħ Ť是为可能的(硬币是公平的),或者获得的概率 ë 1 ë 2是等于1 / 2 10。实际上,获得任何特定序列与任何序列都一样!尽管如此, E 2仍感觉T,T,H,T,H,T,T,H,T,HE1HTE1E2(1/2)10E2 随机,而没有。E1

通常,由于Kolmogorov复杂度是不可计算的,因此无论产生什么样的“完全随机”过程,都无法计算出数字序列的随机性。


对于无限序列,我们拥有更多的工具来定义随机性,例如正态性。
丹尼斯(

1
@dkuper请注意,根据Kolmogorov复杂度定义,其初始段的无限序列都是随机的,这是正常的,但正常的程度不足以视为真正的随机。例如,有一些正常数字,其所有初始段的1大于0。
奎因·卡尔弗

@Quinn Culver是的,我同意,正态性只是我们(以及其他)无限序列的附加工具的一个示例。Kolmogorov的复杂性以及其他仍然有用。
丹尼斯(Denis)2013年

8

对于Java(或类似语言),我们知道用于创建随机数的算法。如果用一个单一的种子开始,数字是不是在所有随机的,也就是说,如果我们知道在一个序列中一个0... ñ,我们知道一个+ 1,或者表述为条件概率: ķ P 一个+ 1 = ķ | 一个 = { 0 aia0,,anai+1

k,l,i:P(ai+1=kai=l){0,1}

尽管如此,那些序列可能满足随机数所具有的属性(例如,参见WP:Autocorrelation),并且这些属性通常足以完成任务,而我们希望使用“实数”(例如,由某些物理过程生成的)随机数,但可以努力。


3

无法肯定地知道给定序列是否是随机的。但是,您可以查看序列的特征(或参数),并根据给定的分布来计算此类序列的概率。

(μ=0,σ=1)1

您可以添加感兴趣的分布的其他矩(例如偏度)以进行进一步验证。对于IID编号,您还可以尝试训练机器学习算法来预测序列的即将出现的元素,然后测试历史改善性能的零假设。但是,这些方法都不能证明序列是真正随机的,并且充其量只能识别序列不是随机的(在某种程度上可以肯定)。


3

现代的计算答案理论是“随机源是对您喜欢的算法类别而言是随机的源”。这是一种功利主义的观点:如果随机性的来源在您关心的所有算法中看起来都像是真正的随机性,那么其他任何事情都不重要。您可以对算法进行分析,就好像它们被给予了真正的随机抛硬币一样,您的分析将给出正确的答案。

AA

  • 所有总是停机的图灵机
  • 所有多项式大小的电路族
  • 所有多项式时间图灵机
  • 所有logspace图灵机

A(Xn)Xn{0,1}nϵAAA

|Pr[A(Xn)=1]Pr[A(Un)=1]|ϵ,
Un{0,1}n

这个思想是伪随机性的任何现代形式概念的背后。


2

这是另外两个美分。

考虑随机算法的一种方法是给一个盒子画一个图像,该盒子接受一些输入,对该输入进行神秘的处理,并产生一些(“不可预测的”)输出。

但是,取而代之的是,将它们视为采用两种输入的确定性算法可能会有所帮助:“真实”输入和我们从诸如之类的函数获得的某些“随机”输入Math.Random()

[0,1]nlogn

[0,1]nlogn

正如乔纳森(Jonathan)和弗拉夫(frafl)所提到的,有一些方法可以检查随机源是否表现为“随机”。但是他们所做的只是影响您对来自这种随机来源的未来信息的看法。如果您认为每一位都可能为零或一,而与先前的位无关,那么就您所知和所信,该来源是统一且独立地随机的,因此,就您所知和所信,它会快速运行或正确运行等等。无论如何,这是我的哲学观点。


-2

我们不能生成真正的随机数。使用指定的方程式和特定的种子值可以使用多种方法生成伪随机数。因此,数字的随机序列取决于种子值。一旦知道种子值,我们就可以预测序列将是什么。除此之外,还有其他生成随机数的方法。人们现在正在使用某些方法来生成真正的随机数,例如使用磁盘磁头移动时间以及可以结合到计算机中的其他物理方法。请参阅:http : //en.wikipedia.org/wiki/Random_number_generation#Generation_methods



-3

通过给定的方法,就像您在Java Randomize中所说的
Math.random()一样;随机(n); 在德尔斐

您可以实现自己的结构和逻辑来生成随机数,
其中这种“算法”可以按照给定的规范执行,以获得更好的随机结果。
并以此为基础。

谢谢。


2
这如何回答“如何知道一个序列是随机的”问题?
Juho 2013年

正如我已经说过的那样。只是……“随机”可以看作是作弊,但不影响它的随机效果。然后使它骄傲并建立自己的逻辑。简单。
昵称

-4

其他答案很好,以下是关于这个非常重要/无意的深层问题的其他角度。计算机科学家已经研究随机性数十年了,并且有可能继续研究随机性。它在整个领域中有着许多深厚的联系和最重要的开放性问题。这里有一些提示。

  • “真实/真实随机性”发生在低水平的物理过程和“噪声”中,例如齐纳二极管,量子力学等,可以在基于硬件的RNG中利用

  • 计算机领域中生成的其他数字是所谓的“伪随机”,它是模拟的,永远无法匹配“真实随机性”。这些就是所谓的PRNG

  • 存在“随机数生成器的加密硬度”的重要含义,从某种意义上说,可以衡量它们的“质量”或“安全性”,例如参见加密安全的PRNG。基本上,“弱”生成器没有“硬”生成器那么多的计算复杂性,而“弱”生成器则更容易破解。

  • O(n)O(n2)=?NP证明必须具有一定的“复杂性”,否则可以使用相同的分析技术来破坏PRNG,而且,令人惊讶的是,该日期(或以后甚至到目前为止)已知的大多数或所有复杂性类别分离/技术确实可以做到。没有足够的复杂性。

  • TCS的一个重要研究课题是随机和非随机算法。这个想法大概是研究通过用PRNG代替“真正的随机性”来改变算法多少,并且在这个问题上有各种各样的深定理。这是一个高级的cstheory.se问题,提供了该领域的一些研究风格:难以确定性的高效且简单的随机算法

  • TCS的另一个关键相关主题是信息,它是很早以前在物理学中引入的,它研究了一个紧密相关的“信息无序”概念,并且像(T)CS中的其他一些重要概念一样,它也是横切的关键思想之一应用分析和理论分析之间的界限,甚至某些公式也相同

  • 再次证明了积极研究的现状,在cstheory.se上还有其他与此问题相关的高级问题。这是一个几乎相同的近似值是一个真正的随机数生成器,图灵可计算


当然,不仅计算机科学家会对“随机性”感兴趣。从宗教和哲学的角度考虑,这可能是一个永恒的问题。
Juho 2013年

物理学家也同意,这是QM发明和Bohr-Einstein辩论的重要概念,Bells thm,并且仍然激发了“隐变量理论”再次成为活跃的研究领域。就像您说的那样,也许没人知道这是什么,但是在我们发言时,许多人仍在努力寻找更明确的答案。
vzn13 2013年

关于随机性与P与NP角之间的关系的更多信息,它表现在可满足性和集团“过渡点”中,例如本文所述Rossman
vzn

重新打破随机数生成器,请参见RNG攻击,维基百科
vzn

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.