犰狳生成相同的随机数

时间:2016-08-17 14:46:36

标签: random armadillo

我使用cygwin64(或minGW)下的Armadillo软件包(v.7.300.1)生成带有randoms的矩阵:

#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 个答案:

答案 0 :(得分:8)

您忘记设置种子以引入随机性。回想一下,所有(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。其余的仍然是:通过播种随机数生成器(充分)随机位,我们会得到预期的不同答案。