【发布时间】:2010-10-11 21:05:05
【问题描述】:
是否可以通过物理过程模拟生成随机数?
如果我模拟骰子的物理掷骰(即你捡起它,在手中摇晃它,将它释放到桌子上并记录哪一面最终“向上”......)会产生“随机”数字或者我只是有一个复杂的模拟,它真的什么都做不了。
【问题讨论】:
标签: simulation prng random
是否可以通过物理过程模拟生成随机数?
如果我模拟骰子的物理掷骰(即你捡起它,在手中摇晃它,将它释放到桌子上并记录哪一面最终“向上”......)会产生“随机”数字或者我只是有一个复杂的模拟,它真的什么都做不了。
【问题讨论】:
标签: simulation prng random
我不同意一般的反应。
如果您添加一个 (i) “能量”组件来模拟您“投掷”骰子的力,(ii) 一个“扭矩”组件来模拟骰子如何“旋转”,以及 (iii) 一个“延迟” ' 模拟骰子和桌子之间的“摩擦”的组件,那么您应该能够全面地建模该过程。
不过,这个过程在现实中并不是完全随机的,如果你以相同的力量掷骰子并旋转,那么你一定会得到相同的面朝上。假设骰子的形状/大小不变,桌面摩擦力保持不变,则可以模拟“掷骰子”的过程。
需要注意的是 - 您需要一个随机数生成器来选择您输入到模拟模型的“能量”、“扭矩”、“摩擦”的随机值,否则您将重复之前的模式。但这不是所描述的模拟模型的限制,初始条件相当有缺陷 - 掷骰子的过程不是完全随机的,因此不会给你一个“随机数”。如果您保持相同的“力”、“旋转”和“摩擦”,您将始终以同一面朝上结束。
【讨论】:
你会有一个复杂的模拟,它真的什么都做不了。
(除了每次都返回相同的值,或者给现有的 PRNG 增加不必要的复杂性)
除非您使用“随机”变量(即依赖于生成随机数的不同方法)为模拟环境播种,否则您将始终获得相同的值,因为过程中的每一步每次都会以相同的方式发生。
假设您确实使用了基础伪随机数生成器 (PRNG):
由于您的模拟只会与您使用的其他 PRNG 一样随机,因此您也可以直接使用其他 PRNG,而无需进行所有额外工作! (事实上,您的模拟可能不会做任何事情,除了使输出比您的基础 PRNG 中的值更随机)
【讨论】:
除非你准备好模拟两个完整芯片的量子态,否则你不会有任何随机...
【讨论】:
首先您需要定义“随机”。当然,您可以通过使用一组奇怪的计算来生成难以预测的数字。但是你不会得到有用的随机性或数字的均匀分布。
像您描述的物理模拟实际上需要在计算中的某个点使用某种随机数生成器。幸运的是,random() 很容易使用。
【讨论】:
您的算法将是一个伪随机数生成器,也就是说,它会接收一个随机种子并生成可能看起来相当随机的大量字符串。
但是,我们无法保证您的随机输出将达到加密或其他目的所需的质量。我倾向于认为您的输出中会有不受欢迎的重复模式,并且过多的工作将涉及问题的物理,而不足以产生伪随机性。 (很抱歉,有点虚伪,但简而言之就是这样。)存在有效的伪数生成器,我会使用其中一个。
也就是说,对于您自己的目的,这可能是一个有趣且信息丰富的实验。
【讨论】:
是的,你会“只是有一个复杂的模拟,实际上什么都做不了”。
既然可以实际使用真实的物理过程,为什么还要模拟随机物理过程?
关于 SO 上的随机数生成器有很多问题。这里只是一些:
Do stateless random number generators exist?
What Type of Random Number Generator is Used in the Casino Gaming Industry?
【讨论】:
它仍然是一个伪随机数,因为大概您将使用一个伪随机数生成器来模拟您手中骰子的所有弹跳。
【讨论】:
后来者。
除非您注入一些随机(或伪随机)因子,否则模拟每次都会产生相同的结果。
【讨论】: