不同计算机上的不同随机数序列

Kla*_*sos 2 java random seed

如果为随机数生成定义种子数,是否可能在不同的计算机上实现不同的随机数序列?如果是这样,如何实现相同的序列?

    private static final long seed = 1;

    Random generator = new Random(seed);

    for (int i = 0; i < nchrom; i++) {
        val = (int) Math.round(generater.nextDouble()*(nchrom-1));
        //...
    }
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 6

是的,使用相同的种子,你应该得到相同的数字序列.该算法在文档中指定:

该类的实例用于生成伪随机数流.该类使用48位种子,使用线性同余公式进行修改.(参见Donald Knuth,计算机程序设计的艺术,第2卷,第3.2.1节.)

如果Random使用相同的种子创建了两个实例,并且为每个实例创建了相同的方法调用序列,则它们将生成并返回相同的数字序列.为了保证此属性,为类指定了特定的算法Random.为了Java代码的绝对可移植性,Java实现必须使用此处显示的所有算法用于Random类.但是,Random类的子类允许使用其他算法,只要它们遵守所有方法的一般合同即可.

我唯一担心的是,如果你使用的nextDouble()话可能会遇到一些浮点单位差异的文物.我怀疑你不会,但这将是我的担忧.nextInt无论如何我建议您使用:

val = generator.nextInt(nchrom); // Exclusive upper bound
Run Code Online (Sandbox Code Playgroud)