Random 不同伪随机数流

Random 不同伪随机数流,random,Random,我有一个关于运行模拟的家庭作业问题,我生成100个随机数,并对每个结果进行计算。下一个问题要求我重复上一个问题,但使用不同的伪随机数流。旁注告诉我在对程序的一次调用中执行两次计算,因为任意更改种子/状态会导致流重叠 有人能给我解释一下这是什么意思吗?为什么我必须通过1个循环来完成? 为什么我不能每次使用不同的种子调用相同的代码两次呢?伪随机数生成器(PRNG)的工作原理是对一些内部信息(称为生成器的状态)进行确定性计算,然后返回一个基于状态的值。有限的状态信息决定了下一个状态以及下一个结果。由于

我有一个关于运行模拟的家庭作业问题,我生成100个随机数,并对每个结果进行计算。下一个问题要求我重复上一个问题,但使用不同的伪随机数流。旁注告诉我在对程序的一次调用中执行两次计算,因为任意更改种子/状态会导致流重叠

有人能给我解释一下这是什么意思吗?为什么我必须通过1个循环来完成?
为什么我不能每次使用不同的种子调用相同的代码两次呢?

伪随机数生成器(PRNG)的工作原理是对一些内部信息(称为生成器的状态)进行确定性计算,然后返回一个基于状态的值。有限的状态信息决定了下一个状态以及下一个结果。由于它是有限的,最终生成器将重新访问它以前使用过的状态,从那时起,所有值都将与您已经看到的序列完全相同。据说PRNG已经循环。“播种”随机数生成器设置状态的起点,因此它有效地对应于选择循环的入口点

如果人类通过任意改变种子进行干预,则有可能他们会过早地将状态恢复到输出序列重复的某些部分。这被称为重叠流。解决办法是给你的PRNG播一次种子,然后不要弄乱它,这样它就可以实现它的完整周期


在您的情况下,这意味着第一组100个数字的值和顺序与第二组100个数字的值和顺序不同。

这个周期有多长?设定种子(n)是一个自然数,对于不同的n值,设定种子(n)总是不同的吗?播种的周期和细节100%取决于PRNG。对于很多人来说,周期大约是2^31。对于Java的内置
Random
,大约是2^48。因为,它是2^19937-1。