2

是否可以通过物理过程模拟生成随机数?

如果我模拟骰子的物理掷骰(即你拿起它,在手中摇晃它,将它释放到桌子上并记录哪一面最终“向上”......)会产生一个“随机”数字还是会我只是有一个复杂的模拟,它真的什么也没做。

4

8 回答 8

6

你会有一个复杂的模拟,它真的什么也没做。

(除了每次都返回相同的值,或者给现有的 PRNG 增加不必要的复杂性)

除非您使用“随机”变量为模拟环境播种(即依赖于生成随机数的不同方法),否则您将始终获得相同的值,因为过程中的每一步每次都会以相同的方式发生。

假设您确实使用了基本伪随机数生成器 (PRNG):

由于您的模拟只会与您使用的其他 PRNG 一样随机,因此您也可以直接使用其他 PRNG,而无需进行所有额外工作!(实际上,您的模拟可能不会做任何事情,除了使输出随机性低于基础 PRNG 中的值)

于 2009-03-06T23:58:48.250 回答
1

它仍然是一个伪随机数,因为大概您将使用伪随机数生成器来模拟您手中骰子的所有弹跳。

于 2009-03-07T00:00:42.053 回答
1

是的,你会“只是有一个复杂的模拟,它真的什么也没做”。

当您实际上可以使用真实的物理过程时,为什么要模拟随机物理过程?

SO上有很多关于随机数生成器的问题。这里仅仅是少数:

真随机数发生器

是否存在无状态随机数生成器?

赌场游戏行业使用什么类型的随机数生成器?

于 2009-03-07T00:01:03.360 回答
1

您的算法将是一个伪随机数生成器,也就是说,它会接收一个随机种子并生成可能看起来相当随机的大量字符串。

但是,不能保证您的随机输出将具有加密或其他目的所需的质量。我倾向于认为您的输出中会有不受欢迎的重复模式,并且过多的工作将涉及问题的物理学,而不足以产生伪随机性。(很抱歉,有点虚弱,但简而言之就是这样。)存在有效的伪数生成器,我会使用其中一个架子。

也就是说,对于您自己的目的,这可能是一个有趣且内容丰富的实验。

于 2009-03-07T00:01:21.473 回答
1

我不同意普遍的反应。

如果您添加(i)“能量”组件来模拟您“投掷”骰子的力,(ii)模拟骰子如何“旋转”的“扭矩”组件,以及(iii)“延迟”组件模拟骰子和桌子之间的“摩擦”,那么您应该能够全面地模拟该过程。

然而,这个过程在现实中并不是完全随机的,如果你以相同的力量掷骰子并旋转,那么你一定会得到相同的面朝上。假设骰子的形状/大小没有变化并且桌子上的摩擦力保持不变,则可以完成模拟“掷骰子”的过程。

需要注意的是 - 您需要一个随机数生成器来选择您输入到模拟模型中的“能量”、“扭矩”、“摩擦”的随机值,否则您将重复前面的模式。但这不是所描述的模拟模型的限制,初始条件相当有缺陷 - 掷骰子的过程不是完全随机的,因此不会给你一个“随机数”。如果您保持相同的“力”、“旋转”和“摩擦”,您将始终以同一面朝上结束。

于 2021-11-17T00:17:41.897 回答
0

后者。

除非您注入一些随机(或伪随机)因子,否则模拟每次都会产生相同的结果。

于 2009-03-06T23:59:25.487 回答
0

首先,您需要定义“随机”。当然,您可以通过使用一组奇怪的计算来生成难以预测的数字。但是你不会得到有用的随机性或数字的均匀分布。

像您描述的物理模拟实际上需要在计算中的某个点使用某种随机数生成器。幸运的是,random() 很容易使用。

于 2009-03-07T00:01:40.753 回答
0

除非您准备好模拟两个完整芯片的量子态,否则您将没有任何随机...

于 2009-03-07T00:04:59.373 回答