并行过程的最佳种子

2024-01-16

我需要在不同的机器上并行运行蒙特卡洛模拟。代码是用 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)

给我一个字符串,我想要一个整数!


读自/dev/random是个好主意。只需将 4 字节字符串转换为整数即可:

f = open("/dev/random","rb")
rnd_str = f.read(4)

要么使用结构:

import struct
rand_int = struct.unpack('I', rnd_string)[0]

Update需要大写 I。

或者乘法和加法:

rand_int = 0
for c in rnd_str:
    rand_int <<= 8
    rand_int += ord(c)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

并行过程的最佳种子 的相关文章

随机推荐