Random 犰狳产生相同的随机数

Random 犰狳产生相同的随机数,random,armadillo,Random,Armadillo,我使用Armadillo软件包(v.7.300.1)在cygwin64(或minGW)下生成一个随机矩阵: 为什么总是一样的?怎么了?您忘记设置种子以引入随机性。回想一下,所有(Q)RNG都是确定性的。你在这里看到的,康拉德称之为特征 从文档中: 要更改RNG种子,请使用arma\u RNG::set\u seed(value)或arma\u RNG::set\u seed\u random()函数 演示 稍微修复的文件版本: /tmp$ cat armaRand.cpp #include&l

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


为什么总是一样的?怎么了?

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

从文档中:

要更改RNG种子,请使用
arma\u RNG::set\u seed(value)
arma\u RNG::set\u seed\u 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$ 
/tmp$cat armaRand.cpp
#包括
int main(){
arma::arma_rng::set_seed_random();
arma::mat(3,3,arma::fill::randu).print();
出口(0);
}
/tmp$g++-o armaRand.cpp
/tmp美元/阿马兰
0.8824   0.4457   0.3589
0.7134   0.4768   0.8335
0.0171   0.4119   0.3720
/tmp美元/阿马兰
0.3417   0.3643   0.6865
0.2814   0.0191   0.6797
0.9737   0.1593   0.5013
/tmp美元
如果希望得到可重复的结果,则需要使用其他变量并跟踪种子值


编辑:2018年末,新版本的犰狳需要链接,因此请将其设置为
g++-o armaRand armaRand.cpp-larmadillo
。其余的仍然适用:通过在随机数生成器中植入(足够多的)随机位,我们确实会得到预期的不同答案。

欢迎您,也欢迎使用StackOverflow。如果答案有帮助,请“向上投票”(点击向上三角形)或者“接受它”(点击勾号,只有你才能看到)。那个这就是这里的工作原理…嘿!当我运行该命令时,我得到以下错误:/tmp/ccw92UPB.o:In function
TLS wrapper function for arma::arma_rng_cx11_instance:test.cpp:(.text.ZTWN4arma23arma_rng_cx11_instanceE[_ZTWN4arma23arma_rng_cx11_instanceE]+0x21):未定义对arma::arma\u rng\u cxx11\u实例“collect2”的引用:错误:ld返回1退出状态我被迫使用Armadillo v3。有没有在那里播种的想法
set\u seed\u random
似乎不存在,而且我找不到V3的文档。我想你必须浏览该版本的标题。
0.6900  0.5548  0.2074    
0.5054  0.3784  0.6263    
0.5915  0.2577  0.3401
/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$