在 python 3.7 中,将迭代延迟一秒是否会改进基于系统时钟的 RNG?
In python 3.7, would delaying iterations by a second improve my RNG that is based on the system clock?
我正在使用以下代码为我的 RNG 播种。
结果看起来太接近了,在统计上是不合理的(边缘案例连续出现的频率太高了)。
这个RNG不一定是完美的,但我希望它是合理的。在迭代之间将整个例程休眠一秒钟(或更短)会改善播种吗?时间并不是什么大问题。如果整个程序跑20秒或者2秒都不是问题。
seed_clock = time.time()
seed(seed_clock)
value = randint(1, 100)
随机性的有趣之处在于,您可以使用不同的种子获得两个非常相似的结果,但可能性很小。拖秒对你没有帮助:
种子“启动”随机数生成器 - 从中提取随机数的每种方式都会以可预测的方式改变内部状态,因此如果您使用相同的种子和相同的种子,您会从中获得相同的“数字”行动顺序。
import random
random.seed(42)
print( random.getrandbits(20))
print( random.getrandbits(30))
print( random.getrandbits(40))
random.seed(42)
print( random.getrandbits(20))
print( random.getrandbits(40))
print( random.getrandbits(30))
random.seed(42)
print( random.getrandbits(40))
print( random.getrandbits(30))
print( random.getrandbits(20))
20、30、40 个随机数的输出顺序不同:
670487 # 20 based off of seed(42)
119540831 # 30
811856239313 # 40
670487 # 20 same based off of seed(42)
26247967103 # 40 different
796233790 # 30 different
123005401501 # 40 based off of seed(42)
26855092 # 30 different
777572 # 20 different
如果你想要可预测性,你只能播种,只有当你使用完全相同的 state-mutating 动作序列时,你才能获得可预测性 - 任何其他“相似性”只是 - 随机性。
如果你想以某种方式获得“更多”随机性——你可以切换到一些加密使用的随机性生成器——比如 https://docs.python.org/3/library/secrets.html 但即便如此你可能会得到 看起来 的东西你的眼睛不是很随意。
这个 Williams - Why Are People Bad at Detecting Randomness? A Statistical Argument 或这个 为什么人们不善于检测随机性?因为它很难。
可能是一本有趣的读物 -
也是
Humans are biased. A number of studies so far confirm that humans are not a good source of randomness. A couple to get you started:
W. A. Wagenaar (1972). "Generation of random sequences by human
subjects: a critical survey of the literature". Psychological Bulletin 77: p65–72
Brugger, P. (1997). Variables that influence the generation of random sequences: An update. Perceptual and Motor Skills, 84(2), 627-661.
Persaud, N. (2005). Humans can consciously generate random number sequences: A possible test for artificial intelligence. Medical hypotheses, 65(2), 211-214
(来源:reddit 上的回答 - 线程:https://www.reddit.com/r/askscience/comments/3nm2kp/comment/cvpx3ol/?utm_source=share&utm_medium=web2x&context=3)
我正在使用以下代码为我的 RNG 播种。 结果看起来太接近了,在统计上是不合理的(边缘案例连续出现的频率太高了)。
这个RNG不一定是完美的,但我希望它是合理的。在迭代之间将整个例程休眠一秒钟(或更短)会改善播种吗?时间并不是什么大问题。如果整个程序跑20秒或者2秒都不是问题。
seed_clock = time.time()
seed(seed_clock)
value = randint(1, 100)
随机性的有趣之处在于,您可以使用不同的种子获得两个非常相似的结果,但可能性很小。拖秒对你没有帮助:
种子“启动”随机数生成器 - 从中提取随机数的每种方式都会以可预测的方式改变内部状态,因此如果您使用相同的种子和相同的种子,您会从中获得相同的“数字”行动顺序。
import random
random.seed(42)
print( random.getrandbits(20))
print( random.getrandbits(30))
print( random.getrandbits(40))
random.seed(42)
print( random.getrandbits(20))
print( random.getrandbits(40))
print( random.getrandbits(30))
random.seed(42)
print( random.getrandbits(40))
print( random.getrandbits(30))
print( random.getrandbits(20))
20、30、40 个随机数的输出顺序不同:
670487 # 20 based off of seed(42)
119540831 # 30
811856239313 # 40
670487 # 20 same based off of seed(42)
26247967103 # 40 different
796233790 # 30 different
123005401501 # 40 based off of seed(42)
26855092 # 30 different
777572 # 20 different
如果你想要可预测性,你只能播种,只有当你使用完全相同的 state-mutating 动作序列时,你才能获得可预测性 - 任何其他“相似性”只是 - 随机性。
如果你想以某种方式获得“更多”随机性——你可以切换到一些加密使用的随机性生成器——比如 https://docs.python.org/3/library/secrets.html 但即便如此你可能会得到 看起来 的东西你的眼睛不是很随意。
这个 Williams - Why Are People Bad at Detecting Randomness? A Statistical Argument 或这个 为什么人们不善于检测随机性?因为它很难。 可能是一本有趣的读物 -
也是Humans are biased. A number of studies so far confirm that humans are not a good source of randomness. A couple to get you started:
W. A. Wagenaar (1972). "Generation of random sequences by human subjects: a critical survey of the literature". Psychological Bulletin 77: p65–72
Brugger, P. (1997). Variables that influence the generation of random sequences: An update. Perceptual and Motor Skills, 84(2), 627-661.
Persaud, N. (2005). Humans can consciously generate random number sequences: A possible test for artificial intelligence. Medical hypotheses, 65(2), 211-214
(来源:reddit 上的回答 - 线程:https://www.reddit.com/r/askscience/comments/3nm2kp/comment/cvpx3ol/?utm_source=share&utm_medium=web2x&context=3)