多次运行代码得到随机结果后,能否找到对应的random.seed取值?
关于反向推导random.seed参数的解答
- 理论上可以实现,但实际操作门槛极高,不推荐采用这种方式达到固定输出的目的。
- Python内置
random模块采用梅森旋转伪随机数生成器,相同种子输入一定会输出完全一致的随机数序列,只要能找到和你最后一次运行时生成器初始状态匹配的种子X,确实可以复现当时random.choice返回的结果。 - 如果你没有提前记录运行时的种子,反向推导
X的成本极高:梅森旋转算法的种子空间量级达到2^19937-1,暴力枚举所有可能的X几乎不可能完成。 - 仅当你可以拿到最后一次运行时连续输出的624个32位随机数时,才可以通过专门的算法反向还原生成器的内部状态,进而复现后续所有随机输出、匹配到对应种子值。如果只有少数几个
random.choice的输出结果,样本量不足以支撑反向推导。
更可行的替代方案:如果需要后续可以复现随机输出,每次运行代码前主动显式设置固定种子,比如
random.seed(1234),自行记录设置的种子值和对应生成的结果,后续复用同一个种子即可得到完全一致的输出,无需反向推导。
内容的提问来源于stack exchange,提问作者subham kumar singh
相关产品推荐
相关产品推荐

