我不确定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次,并且它们返回特定种子的相同值。它根本不是随机的> _<
有人可以解释我在这里缺少的东西吗?任何帮助将不胜感激。谢谢大家
答案 0 :(得分:2)
如果没有专门的硬件,您无法在计算机上获得真正的随机数序列。 (这种专用硬件使用物理技术执行相当于骰子的初始滚动以提供随机性。电子hardware通常在恒定温度下使用专用二极管的电子噪声;其他人使用放射性衰变事件。)
如果没有专门的硬件,你可以生成的是伪随机数,正如你所观察到的那样,它总是为同一个初始种子生成相同的数字序列。对于简单的应用程序,您通常可以从调用时生成初始种子,这种方法实际上是随机的。
当我说“简单的应用程序”时,我不包括加密。(不仅如此,尤其是那个。)
答案 1 :(得分:1)
有时,当您尝试调试模拟时,实际上希望具有可重现的“随机”数字流,因此您可以专门发送一个流以特定种子开始。
例如在答案Creating a facet_wrap plot with ggplot2 with different annotations in each plot中,rcs通过使用R代码创建可重现的数据集来启动答案
set.seed(1)
df <- data.frame(x=rnorm(300), y=rnorm(300), cl=gl(3,100)) # create test data
在继续演示如何回答实际问题之前。