gpt4 book ai didi

python - 使用 random.seed(seed) 重现过去的模拟,但由于值不同而出现问题

转载 作者:太空宇宙 更新时间:2023-11-03 15:13:09 26 4
gpt4 key购买 nike

我正在尝试重现我之前运行的模拟,以便在文本文件中记录当前日期时间的种子,然后使用记录的日期时间种子来获取与之前获得的相同的值

但是,我不确定为什么得出的值与我在之前的模拟中运行的值不相似。

这是我尝试运行该程序时得到的结果:

=================== RESTART: /Users/ivanteong/Desktop/e.py ===================
Choose 1 to run simulation based on random seed of current time, or choose 2 to reproduce past simulation: 1
2017-05-20 18:55:51
0.902032491409618
0.33535058732344564
>>>
=================== RESTART: /Users/ivanteong/Desktop/e.py ===================
Choose 1 to run simulation based on random seed of current time, or choose 2 to reproduce past simulation: 2
Enter the seed of current time recorded: 2017-05-20-18-55-51
2017-05-20 18:55:51
0.759062526352241
0.058976331409061576
>>>

代码如下。

import math
import random
from datetime import datetime

# reproducibility
reproduce = int(input("Choose 1 to run simulation based on random seed of current time, or choose 2 to reproduce past simulation: "))
if reproduce == 1:
# seeding random based on current time and writing into text file for reproducibility
string_seed = datetime.strftime(datetime.now(), '%Y-%m-%d-%H-%M-%S')
f = open('seed.txt', 'a')
f.write(str(string_seed))
f.write('\n')
f.close()
seed = datetime.strptime(string_seed, '%Y-%m-%d-%H-%M-%S')
print(seed)
elif reproduce == 2:
stored_seed = str(input("Enter the seed of current time recorded: "))
seed = datetime.strptime(stored_seed, '%Y-%m-%d-%H-%M-%S')
print(seed)

def randExponential(rateLambda):
random.seed(seed)
print(random.random())
return -math.log(1.0 - random.random()) / rateLambda

print(randExponential(5))

当我尝试仅使用数字在控制台中测试这一点时,似乎没问题,所以不确定为什么我在使用日期时间库时遇到问题。

>>> random.seed(3)
>>> random.random()
0.23796462709189137
>>> random.seed(3)
>>> random.random()
0.23796462709189137
>>>

最佳答案

您的变量 seed 不是全局变量,因此当您在 randExponential 函数中使用 random.seed(seed) 时,它会被传递尚未初始化的种子变量,因此它只传递 None ,这是默认值并使用当前时间。只需在调用 randExponential 之前调用 random.seed(seed) 并删除函数中的调用即可,它应该可以工作,或者您可以将种子传递到函数中

编辑:

出于某种原因,我无法找出, datetime.strptime() 函数似乎每次调用时都会稍微更改字符串,创建不同的随机生成,而删除这些使它起作用

这是我的代码:

import math
import random
from datetime import datetime


reproduce = int(input("Choose 1 to run simulation based on random seed of current time, or choose 2 to reproduce past simulation: "))
if reproduce == 1:
seed = datetime.strftime(datetime.now(), '%Y-%m-%d-%H-%M-%S')
print(seed)
f = open('seed.txt', 'a')
f.write(str(seed))
f.write('\n')
f.close()

elif reproduce == 2:
seed = str(input("Enter the seed of current time recorded :"))
print(seed)

def randExponential(rateLambda, seed):
random.seed(seed)
print(random.random())
return -math.log(1.0 - random.random()) / rateLambda

关于python - 使用 random.seed(seed) 重现过去的模拟,但由于值不同而出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44083960/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com