1

我不确定 StackOverflow 是否适合问这个问题,因为这个问题是半编程半数学的。如果我的问题很愚蠢,也很抱歉^_^

我正在通过“蒙特卡洛方法”一书研究蒙特卡洛模拟。我必须学习的第一件事是关于随机数生成器。RNG 的基本算法是:
1. 初始化:从 S 上的分布 µ 中画出种子 S0。设置 t = 1。
2. 转移:设置 St = f(St−1)。
3. 输出:设置 Ut = g(St)。
4. 重复:设置 t = t+ 1 并返回步骤 2。

(μ 是有限状态集 S 上的概率分布,输入是 S0,我们希望它是输出 Ut 的随机数)

这不难理解,但这里的问题是我没有看到重复次数中的随机因素。我们如何决定何时停止 RNG 的循环?我读到的所有实现 RNG 的示例都循环了 100 次,它们为特定的种子返回相同的值。一点都不随机>_<

有人可以解释我在这里缺少什么吗?任何帮助将不胜感激。感谢大家

4

2 回答 2

2

如果没有专门的硬件,您无法在计算机上获得真正的随机数序列。(这种专用硬件相当于使用物理学来提供随机性的初始掷骰子。电子硬件通常使用恒温下专用二极管的电子噪声;其他硬件则使用放射性衰变事件。)

如果没有专门的硬件,您可以生成的是伪随机数,正如您所观察到的,它们总是为相同的初始种子生成相同的数字序列。对于简单的应用程序,您通常可以避免从调用时生成初始种子,这实际上是随机的。

当我说“简单的应用程序”时,我将密码学排除在外。 (不仅如此,而且尤其如此。)

于 2012-04-09T05:47:57.337 回答
1

有时,当您尝试调试模拟时,您实际上希望有一个可重现的“随机”数字流,因此您可能会专门发送一个流以从特定种子开始。

例如在答案中使用 ggplot2 在每个绘图 rcs 中使用不同的注释创建 facet_wrap 图通过使用 R 代码创建可重现的数据集来开始答案

set.seed(1)
df <- data.frame(x=rnorm(300), y=rnorm(300), cl=gl(3,100))   # create test data

在继续演示如何回答实际问题之前。

于 2012-05-10T05:42:49.053 回答