小编Mat*_*200的帖子

为蒙特卡罗模拟种子mt19937_64的最佳方法

我正在研究一个运行蒙特卡罗模拟的程序; 具体来说,我正在使用Metropolis算法.该程序需要产生数十亿的"随机"数字.我知道梅森捻线机在蒙特卡罗模拟中非常受欢迎,但我想确保以最佳方式播种发电机.

目前我正在使用以下方法计算32位种子:

mt19937_64 prng; //pseudo random number generator
unsigned long seed; //store seed so that every run can follow the same sequence
unsigned char seed_count; //to help keep seeds from repeating because of temporal proximity

unsigned long genSeed() {
    return (  static_cast<unsigned long>(time(NULL))      << 16 )
         | ( (static_cast<unsigned long>(clock()) & 0xFF) << 8  )
         | ( (static_cast<unsigned long>(seed_count++) & 0xFF) );
}

//...

seed = genSeed();
prng.seed(seed);
Run Code Online (Sandbox Code Playgroud)

我有一种感觉,有更好的方法来确保不重复的新种子,我很确定mt19937_64可以播种超过32位.有没有人有什么建议?

c++ random mersenne-twister c++11 random-seed

30
推荐指数
2
解决办法
6268
查看次数

标签 统计

c++ ×1

c++11 ×1

mersenne-twister ×1

random ×1

random-seed ×1