Java MersenneTwister没有给出随机数?

Java MersenneTwister没有给出随机数?,java,random,mersenne-twister,Java,Random,Mersenne Twister,我想知道为什么下面的代码,使用Mersenne Twister(java),无论我运行多少次,总是给出相同的99个数字。本质上它不是随机的 MersenneTwister mt = new MersenneTwister(); for(int i = 0; i<=99; i++ ) { System.out.println("Next "+mt.nextDouble()); } MersenneTwister mt=new MersenneTwis

我想知道为什么下面的代码,使用Mersenne Twister(java),无论我运行多少次,总是给出相同的99个数字。本质上它不是随机的

    MersenneTwister mt = new MersenneTwister();
    for(int i = 0; i<=99; i++ ) {
        System.out.println("Next "+mt.nextDouble());
    }
MersenneTwister mt=new MersenneTwister();

对于(int i=0;itl;dr):将您的
new MersenneTwister()
更改为
new MersenneTwister(new Date())

伪随机数生成器使用种子来确定产生的数字序列。如果未设置种子,则生成器将默认设置种子。某些生成器每次默认使用不同的种子,例如使用计算机时钟,或通过读取
/dev/uradom
。其他生成器默认使用固定种子

听起来您的生成器默认使用的是固定种子(
MersenneTwister()
)的文档中说“构造并返回一个带有默认种子的随机数生成器,默认种子是一个常量”“[原始强调])。当然,这将导致相同的数字流


您应该使用
MersenneTwister(Date)
构造函数(只需使用
new MersenneTwister(new Date())
),或者
MersenneTwister(int)
构造函数(尽管这似乎不太理想,因为
int
只有32位宽)。

tl;dr:将
new MersenneTwister()
更改为
new MersenneTwister()(新日期())

伪随机数生成器使用种子来确定产生的数字序列。如果未设置种子,则生成器将默认设置种子。某些生成器每次默认使用不同的种子,例如使用计算机时钟,或通过读取
/dev/uradom
。其他生成器默认使用固定种子

听起来您的生成器默认使用的是固定种子(
MersenneTwister()
)的文档中说“构造并返回一个带有默认种子的随机数生成器,默认种子是一个常量”“[原始强调])。当然,这将导致相同的数字流


您应该使用
MersenneTwister(Date)
构造函数(只需使用
new MersenneTwister(new Date())
),或者
MersenneTwister(int)
构造函数(尽管这似乎不太理想,因为
int
只有32位宽).

Mersenne Twister是一种从种子创建可预测、随机、均匀分布的数字的算法。在您的情况下,您需要向Twister提供一个种子,比如系统时间或更好的底层操作系统提供的随机性源


Mersenne Twister只混合了大约字节,因此您总是可以从同一种子中获得相同的结果。例如,在游戏中创建虚拟世界时,您可以使用一个小种子重新创建千兆字节的数据。这不是一种创建随机性的方法,而是一种创建随机性的方法omly从种子中分配的值(可以是随机值,也可以是日期之类的可预测值).

Mersenne Twister是一种从种子创建可预测、随机、均匀分布的数字的算法。在您的情况下,您需要向Twister提供一个种子,比如系统时间或更好的底层操作系统提供的随机性源


Mersenne Twister只混合了大约字节,因此您总是可以从同一种子中获得相同的结果。例如,在游戏中创建虚拟世界时,您可以使用一个小种子重新创建千兆字节的数据。这不是一种创建随机性的方法,而是一种创建随机性的方法omly从种子中分配的值(可以是随机值,也可以是日期之类的可预测值).

这不是一个标准Java类。哪个库提供了它?我猜它每次都是用相同的值播种的。这不是一个标准Java类。哪个库提供了它?我猜它每次都是用相同的值播种的。所以首先我认为MT只是用32位序列扭曲,所以是32“宽”键也很好。第二,取决于日期的“精细程度”,两个并行运行的进程可能会得到相同的数字。因此,首先,我认为MT只使用32位序列,所以32“宽”键也很好。第二,取决于“精细程度”日期是,对于并行运行的两个进程,您可能会得到相同的数字。