【发布时间】:2020-04-25 01:57:51
【问题描述】:
我想更准确地知道当您在 Matlab 中选择自定义种子时会发生什么,例如:
rng(101)
根据我对伪随机数生成器如何工作的(有限的,但仍然存在的)理解,可以从概念上将种子视为在“非常长的伪列表中选择一个位置 - 随机数"。
问题:假设,(在我的 Matlab 脚本中),我选择 rng(100) 进行第一次计算(一系列指令),然后选择 rng(1e6) 进行第二次计算。请注意,每次我进行一些计算时,都会产生多达 30 万个随机数(每次)。
->这是否意味着我确保“列表”中从 100 开始到 300k 左右结束的序列与从 1e6 开始到 1'300'000 结束的序列之间没有重叠? (“不重叠”的想法来自于 rng(100) 和 rng(1e6) 相隔超过 300k 的事实)
即这些是 2 个“独立”序列,(据我所知,这个“长列表”将由特殊的 PRNG 算法生成,很可能涉及模运算..?)
【问题讨论】:
-
最好不要设置种子。 MATLAB 总是以相同的序列开始,但如果您在同一个 MATLAB 会话中运行两个计算,第二个计算将使用从第一个停止的地方开始的随机数序列,因此将保证不同且独立。除非您需要确保相同的随机数序列,否则根本不要使用种子。
-
我不会使用同一个会话。它们是在后台和未知时间单独运行的脚本(可能使用 nohup nodesktop nosplash 等)。
-
那么您可能想改用
rng shuffle。使用它或多或少不可能两次获得相同的序列。
标签: matlab random random-seed