代码之家  ›  专栏  ›  技术社区  ›  Alexander Korovin

犰狳产生相同的随机数

  •  5
  • Alexander Korovin  · 技术社区  · 10 年前

    我在cygwin64(或minGW)下使用Armadillo包(v.7.300.1)生成了一个随机矩阵:

    #include<armadillo>
    
    int main(){
      arma::mat(3,3, arma::fill::randu).print();
      return 0;
    }
    

    程序(重新生成或重新运行后)始终生成:

    0.6900  0.5548  0.2074    
    0.5054  0.3784  0.6263    
    0.5915  0.2577  0.3401
    

    为什么总是一样?发生了什么?

    1 回复  |  直到 10 年前
        1
  •  11
  •   Dirk is no longer here    7 年前

    引入随机性 回想一下,所有(Q)RNG都是确定性的。你在这里看到的,康拉德会称之为特征。

    从文档中:

    要更改RNG种子,请使用 arma_rng::set_seed(value) arma_rng::set_seed_random() 功能。

    演示

    文件的稍微修复版本:

    /tmp$ cat armaRand.cpp 
    #include<armadillo>
    
    int main(){
      arma::arma_rng::set_seed_random();
      arma::mat(3,3, arma::fill::randu).print();
      exit(0);
    }
    /tmp$ g++ -o armaRand armaRand.cpp 
    /tmp$ ./armaRand 
       0.8824   0.4457   0.3589
       0.7134   0.4768   0.8335
       0.0171   0.4119   0.3720
    /tmp$ ./armaRand 
       0.3417   0.3643   0.6865
       0.2814   0.0191   0.6797
       0.9737   0.1593   0.5013
    /tmp$ 
    

    如果你愿意 可重复的结果 您希望使用另一个变体并跟踪种子 价值 .

    编辑: 2018年底,随着新版本的Armadillo,现在似乎需要链接,所以请进行链接 g++ -o armaRand armaRand.cpp -larmadillo 。其余的仍然保留:by 播种 带有(足够)随机位的随机数生成器我们确实得到了预期的不同答案。

    推荐文章