【问题标题】:Getting seed's value from boost random mt19937 generator从 boost 随机 mt19937 生成器获取种子值
【发布时间】:2014-08-24 16:59:55
【问题描述】:

我正在使用 boost::random::mt19937 生成器,我需要打印它的种子以进行调试(为了重现我的测试) 如何获得种子?

【问题讨论】:

    标签: boost random seed


    【解决方案1】:

    使用 C++11 功能。

    std::random_device rd;
    unsigned long seed = rd();
    std::cout << "seed = " << seed << std::endl;
    
    std::mt19937 engine(seed);
    

    【讨论】:

    • 我认为我的旧 GNU 编译器(我认为是 4.4.4)不支持 C++11 功能...
    【解决方案2】:

    与其尝试从 mt19937 中提取您认为的种子,不如在两次运行中明确设置种子以实现可重复性。请参阅 boost 的 random_demo.cpp,大约 20 行到 main 中,以获取设置种子的示例。评论指出,使用std::time(0) 可能会在不经意间导致来自两个生成器的相关结果,如果它们基于时间快速连续播种。在您的情况下,您实际上想要相同的流,因此您希望将种子设置为显式值,例如54321,而不是使用std::time(0)。相同的播种从生成器产生相同的输出。

    【讨论】:

    • “你认为的来自 mt19937 的种子”——为了完整性,这将是生成器的内部状态
    • Tnx 不存在这样的 API 很烦人,但我会振作起来:)
    猜你喜欢
    • 2012-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-23
    • 1970-01-01
    • 2011-01-16
    • 2014-09-13
    • 2021-03-23
    相关资源
    最近更新 更多