【发布时间】:2014-08-24 16:59:55
【问题描述】:
我正在使用 boost::random::mt19937 生成器,我需要打印它的种子以进行调试(为了重现我的测试) 如何获得种子?
【问题讨论】:
我正在使用 boost::random::mt19937 生成器,我需要打印它的种子以进行调试(为了重现我的测试) 如何获得种子?
【问题讨论】:
使用 C++11 功能。
std::random_device rd;
unsigned long seed = rd();
std::cout << "seed = " << seed << std::endl;
std::mt19937 engine(seed);
【讨论】:
与其尝试从 mt19937 中提取您认为的种子,不如在两次运行中明确设置种子以实现可重复性。请参阅 boost 的 random_demo.cpp,大约 20 行到 main 中,以获取设置种子的示例。评论指出,使用std::time(0) 可能会在不经意间导致来自两个生成器的相关结果,如果它们基于时间快速连续播种。在您的情况下,您实际上想要相同的流,因此您希望将种子设置为显式值,例如54321,而不是使用std::time(0)。相同的播种从生成器产生相同的输出。
【讨论】: