gpt4 book ai didi

C++ RNG (Mersenne Twister) 需要种子

转载 作者:太空宇宙 更新时间:2023-11-04 12:16:08 26 4
gpt4 key购买 nike

我编写了一个包含不同算法的 RNG 类,但它没有按预期工作。除了我想使用正常(而不是均匀)分布这一事实之外,我的代码总是返回相同的数字(最大值)或仅返回区间 [min,max] 中的 2 个数字:

std::function<int(int, int)> mt19937 =
[](int min, int max) -> int {
std::uniform_int_distribution<int> distribution(min, max);
std::mt19937 engine;
engine.seed(time(null));
auto generator = std::bind(distribution, engine);
return generator();
};

任何人都可以向我解释解决这个难题所缺少的东西吗?此外,我如何实现正态分布?上次我尝试 std::normal_distribution 我无法进入边界!

编辑:当我谈到正态分布时,我的意思是 RNG 在两个边界附近的结果不应像两者的平均值那样频繁地生成。例如。查看标准高斯分布的图形表示。我指的是它,因为它可视化了我想以这种方式实现/使用的结果值的概率,如果你理解的话。

最佳答案

正态分布就是这样(x 是随机均匀数):

Normal

但我看到了一些可能有问题的地方:

std::uniform_int_distribution<int> distribution(min, max);

这不是给你的数字生成器一个 int 类型吗?


要解决播种问题,请在 lambda 之外创建您的引擎,并在创建时对其进行播种。

随机数生成器使用一种算法生成看似随机的数字,但重复周期非常长(梅森 Tornado 的亮点)。当你播种时,你给 RNG 一个初始值来开始这个过程。每次你要求另一个数字时,它都会吐出另一次算法迭代。

当您为每次迭代播种时:

time(NULL)

此代码每秒仅更改一次,因此当您请求一个新的随机数时,它只会每秒更改一次。

关于C++ RNG (Mersenne Twister) 需要种子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7623055/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com