Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Random 随机种子需要有多大的不同?_Random - Fatal编程技术网

Random 随机种子需要有多大的不同?

Random 随机种子需要有多大的不同?,random,Random,考虑这样的代码(Python): 我想确保每个电话的号码都有很大的不同。我是否需要确保后续呼叫之间的种子号码存在显著差异,或者种子不同(无论如何)就足够了 对于学究们:请意识到上面的代码过于简化了一般来说,当您每次都需要以相同的方式生成随机数时,您只需要为随机数生成器添加种子。当您的处理中有一个随机组件,但需要对其进行测试,因此希望在测试之间保持一致时,这非常有用。否则,将让系统为生成器本身设定种子 换句话说,通过在随机数生成器中植入特定的预定义种子,实际上可以减少整个系统的随机性。使用1种子时

考虑这样的代码(Python):

我想确保每个电话的号码都有很大的不同。我是否需要确保后续呼叫之间的种子号码存在显著差异,或者种子不同(无论如何)就足够了


对于学究们:请意识到上面的代码过于简化了

一般来说,当您每次都需要以相同的方式生成随机数时,您只需要为随机数生成器添加种子。当您的处理中有一个随机组件,但需要对其进行测试,因此希望在测试之间保持一致时,这非常有用。否则,将让系统为生成器本身设定种子


换句话说,通过在随机数生成器中植入特定的预定义种子,实际上可以减少整个系统的随机性。使用1种子时生成的随机数确实与使用2种子时生成的随机数不同,但硬编码种子将导致程序每次运行时重复出现随机序列。

简短回答:避免重新播种,因为这不会给您带来任何好处。下面的答案很长


这取决于你到底需要什么。文中概述了线性相关种子(其中1、2、3、4肯定是)对于初始化多个PRNG是一个不好的选择,至少在用于模拟和期望不相关结果时是如此

如果你所做的只是掷几个骰子,或者为一些不重要的东西生成一些伪随机输入,那么这很可能无关紧要


还请注意,使用PRNG本身的某些类来生成种子在生成线性相关数(LCG)方面存在相同的问题。

种子本身应该是随机的,因此输出是不可预测的。如果种子仅在一个或两个位上不同(如所示),则可能会出现问题。

这取决于使用PRNG的应用程序。如果您使用的是需要加密可靠的东西,那么种子通常需要非常难以根据输出进行推断,每次应用程序运行时都会有所不同,很难简单地猜测,并且无法通过反向工程应用程序来确定(即,它们不能硬编码)


如果你的目标是一场游戏,你的要求可能会有所不同。例如,如果您控制计算机策略,但计算机的策略在游戏的所有运行中都保持不变,那么您可能拥有一个容易击败的游戏。同样,您可能希望在“轻松”模式下使用该选项。

您似乎希望使用非伪随机的伪随机数,连续数与伪随机性要求的“显著”不同的概率更高。我怀疑任何普通的prng都能做到这一点,不管你的播种策略是什么。

如果你的随机数生成器是高质量的,那么你如何播种就不重要了。事实上,最好的做法是只播一次种子。随机数生成器被设计为在启动后具有特定的统计行为。频繁地重新播种会有效地创建一个不同的随机数生成器,一个可能不太好的生成器


随机选择种子听起来是个好主意,但事实并非如此。事实上,由于“生日悖论”,您将两次拾取同一种子的概率非常高。

手动播种通常意味着输出不需要不可预测。种子之间的差异在很大程度上取决于PRNG的算法。这意味着输出不需要不可预测,但这也假设提问者实际上意识到种子生成器产生相同的数字序列。@Johannes:绝对,但是如果你真的想要不可预测的结果,那么你就不希望有人能够猜出种子。因此,最好种子本身是完全不可预测的(例如从/dev/random)。如果这与加密有关,那么MT19937一开始就是一个非常错误的生成器。不过,在随机数生成器的上下文中,“显著不同”可能意味着许多不同的事情。是否有具体的随机性测试,你正在寻找通过,目前没有?典型的PRNG的周期比100个数字长很多。通常可以从系统时钟中看到单个种子事件。每次使用相同的种子值都会生成相同的伪随机序列。请您解释一下为什么您希望伪随机数显著不同?如果你需要一个偏差,那么这不是违背了随机数的目的吗?从统计学的角度来看,你很可能会得到两个相距很远的数字(如果它们是真正随机的),那么线性相关种子是什么意思?种子是一维的,因此至少两个种子的任何集合都是线性相关的。
import random

for i in [1, 2, 3, 4]:
    random.seed(i)
    randNumbers = [random.rand() for i in range(100)] # initialize a list with 100 random numbers
    doStuff(randNumbers)