【发布时间】:2025-12-12 16:35:01
【问题描述】:
我需要在不同的机器上并行运行 MonteCarlo 模拟。代码是用 c++ 编写的,但程序是使用 python 脚本设置和启动的,该脚本设置了很多东西,尤其是随机种子。函数 setseed 是一个 4 字节的无符号整数
使用简单的
import time
setseed(int(time.time()))
不是很好,因为我将作业提交到集群上的队列,它们保持等待几分钟然后它们开始,但是开始时间是不可预测的,可能是两个作业同时开始(秒) ,所以我切换到:
setseet(int(time.time()*100))
但我不开心。什么是最好的解决方案?也许我可以结合以下信息:时间、机器 ID、进程 ID。或者最好的解决方案是从 /dev/random (linux 机器)读取?
如何从 /dev/random 读取 4 个字节?
f = open("/dev/random","rb")
f.read(4)
给我一个字符串,我要一个整数!
【问题讨论】:
-
你还没有真正说出什么是“最好的”。我认为您正在尝试确保每个实例使用不同的种子。但是,它们是否应该在一次运行中的不同作业之间是唯一的,或者您是否需要一些接近(或保证是)全局唯一性(所有运行和所有作业)的东西。其次,您是否需要能够使用相同的种子重复运行(有时有助于间歇性调试)。并且可能还有其他并发症。
-
我想要每个实例的随机种子,所以如果种子是从 0 到 2^(8*4)-1,那么每个实例的种子很可能是不同的。我不强迫种子不同,即使它们不同可能会更好。我认为这不是一个很大的问题。我不需要用同一个种子重复运行。
-
嗯,这很简单,您已经有了很好的答案。干杯。
标签: python random parallel-processing seed montecarlo