相关疑难解决方法(0)

为蒙特卡罗模拟种子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
查看次数

如何以跨平台的方式获取(几乎)唯一的系统标识符?

我正在寻找一种方法来获得一个在不同机器上运行代码几乎肯定会改变的数字,并且几乎肯定在同一台机器上的两次运行之间保持不变.

如果我在Linux中作为shell脚本执行此操作,我会使用以下内容:

{ uname -n ; cat /proc/meminfo | head -n1 ; cat /proc/cpuinfo ; } | md5sum
Run Code Online (Sandbox Code Playgroud)

但我需要用C++(带升级版),至少在Windows,Linux和Mac上.

c++ cross-platform uniqueidentifier

25
推荐指数
2
解决办法
3万
查看次数