R语言中如何查找生成指定伪随机数序列的对应随机种子?
R语言定位生成指定伪随机数对应随机种子的方法
- R默认使用Mersenne-Twister伪随机数生成器,随机种子合法取值范围为1到2^31-1的整数,只要种子值、随机数生成器版本、执行的随机操作完全一致,随机代码的输出就会完全固定,因此确实可以定位到匹配指定输出的种子值。
- 最通用的定位逻辑是遍历合法种子区间,逐个运行目标抽样代码,将输出和指定结果做比对,完全匹配时对应的就是目标种子。
针对你给出的示例的操作说明
你需要匹配的抽样代码如下:
sample(1:300, 10)
目标匹配输出为:
58 235 243 42 281 137 2 219 284 184
- 注意R 3.6.0版本调整了
sample()函数的随机数生成规则,同一种子在3.6.0前后的版本输出结果存在差异,查找时要和你实际使用的R版本对应。 - 全范围遍历20余亿个种子单线程运行耗时极长,普通设备可以先从常用的小种子区间开始测试,多数场景下用户手动设置的种子不会取特别大的数值,也可以通过并行计算拆分遍历任务提速。
你可以直接用下面的脚本执行查找,根据自己设备的计算能力调整测试的种子上限即可:
# 配置查找参数 target <- c(58, 235, 243, 42, 281, 137, 2, 219, 284, 184) test_limit <- 1000000 # 可自行调大测试的种子上限 match_seed <- NA # 开始遍历匹配 for (s in 1:test_limit) { set.seed(s) res <- sample(1:300, 10) if (all(res == target)) { match_seed <- s break } # 打印进度 if (s %% 100000 == 0) { cat("已完成测试种子数:", s, "\n") } } # 输出结果 if (!is.na(match_seed)) { cat("匹配成功,对应随机种子为:", match_seed, "\n") # 结果验证 set.seed(match_seed) print(sample(1:300, 10)) } else { cat("当前测试区间内未找到匹配种子,可调大test_limit参数继续查找\n") }
内容的提问来源于stack exchange,提问作者Casper
相关产品推荐
相关产品推荐

