如何播种 pcg 随机数生成器?

How to seed the pcg random number generator?

samples for PCG 他们只播种一种方式,我认为是 best/preferred 实践:

pcg32 rng(pcg_extras::seed_seq_from<std::random_device>{});

// Seed with a real random value, if available
pcg_extras::seed_seq_from<std::random_device> seed_source;

// Make a random number engine 
pcg32 rng(seed_source);

但是 运行 我的机器上的这个每次都产生相同的种子。如果我只是输入一些整数作为我自己的种子,那也好不到哪儿去。如果以这种方式尝试不起作用,什么是播种的好方法?

pcg_extras::seed_seq_from 应该是推荐的方式,但它将实际种子生成委托给模板参数中指定的生成器。

MinGW 的 std::random_device 实现有问题。所以此时如果要针对MinGW,一定不能使用std::random_device.

一些潜在的替代方案:

  • boost::random_device
  • randutils,作者 PCG,M.E。奥尼尔
  • seed11::seed_device,直接替换 std::random_device(免责声明:这是我自己的图书馆)

this blog post by M.E. O'Neill 中有关播种的更多信息。