【问题标题】:Uniform random number generated was repeated重复生成的均匀随机数
【发布时间】:2015-03-19 15:54:35
【问题描述】:

我试图生成 100 个从 0.0 到 1.0 的均匀随机变量。 我使用基于时间的种子来生成它,但生成的数字在更改为另一个之前似乎重复了几次。有没有更好的方法来模拟而不重复?

输出如下: 0.33456, 0.33456, 0.33456, 0.11256, 0.11256, 0.11256, 0.94092, 0.94092, ...

Real UniformDistributionGenerator(double range_from, double range_to) {
    Real uniform_r_v = 0.0;
    unsigned seed = std::chrono::high_resolution_clock::now().time_since_epoch().count();
    std::mt19937 generator(seed);
    std::uniform_real_distribution<double> distribution(range_from, range_to);
    uniform_r_v = distribution(generator);
    return uniform_r_v;
}

【问题讨论】:

  • 您正在重新播种具有相同时钟值的确定性 RNG(time_since_epoch 仅具有毫秒分辨率)。您应该在 UniformDistributionGenerator 函数的 outside 中保持 RNG 状态。还可以考虑使用better random number generator,以及比毫秒时间更好的种子。

标签: c++ visual-studio random


【解决方案1】:

最简单的解决方案:static std::mt19937 generator(seed); 应该在每个程序运行时播种一次。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-07
    • 2010-12-04
    • 1970-01-01
    • 2012-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多