何时停止随机数生成器中的循环



我不确定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 次,它们为特定种子返回相同的值。它根本不是随机的>_<</p>

有人可以解释一下我在这里错过了什么吗?任何帮助将不胜感激。谢谢大家

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

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

当我说"简单的应用程序"时,我排除了密码学。 (不仅如此,尤其是这样。

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

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

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

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

最新更新