gpt4 book ai didi

c++ - Boost 与 .Net 随机数生成器

转载 作者:搜寻专家 更新时间:2023-10-31 01:10:09 26 4
gpt4 key购买 nike

我在 F# (.Net) 和 C++ 中开发了相同的算法(Baum-Welch 用于估计隐马尔可夫模型的参数)。在这两种情况下,我都开发了相同的测试,该测试生成具有已知分布的随机测试数据,然后使用该算法来估计参数,并确保它收敛到已知的正确答案。

问题是测试在 F# 情况下工作正常,但在 C++ 实现中无法收敛。我在一些真实世界的数据上比较了这两种算法,它们给出了相同的结果,所以我的猜测是测试数据的生成在 C++ 案例中被破坏了。因此我的问题是:.Net 4 附带的随机数生成器是什么(我认为这是 VS2010 的默认版本)?

在 F# 中我使用:

let random = new Random()
let randomNormal () = //for a standard normal random variable
let u1 = random.NextDouble()
let u2 = random.NextDouble()
let r = sqrt (-2. * (log u1))
let theta = 2. * System.Math.PI * u2
r * (sin theta)
//random.NextDouble() for uniform random variable on [0-1]

在 C++ 中,我使用标准的 Boost 类:

class HmmGenerator
{
public:
HmmGenerator() :
rng(37), //the seed does change the result, but it doesn't make it work
normalGenerator(rng, boost::normal_distribution<>(0.0, 1.0)),
uniformGenerator(rng, boost::uniform_01<>()) {}//other stuff here as well
private:
boost::mt19937 rng;
boost::variate_generator<boost::mt19937&,
boost::normal_distribution<> > normalGenerator;
boost::variate_generator<boost::mt19937&,
boost::uniform_01<> > uniformGenerator;
};

使用这两种生成随机数的方法,我是否应该期望得到不同的结果?

编辑:此外,.Net 中使用的生成器在 Boost 中是否可用(理想情况下具有相同的参数),因此我可以在 C++ 中运行它并比较结果?

最佳答案

Hence my question: What is the random number generator that comes with .Net 4 (I think this is the default version with VS2010)?

来自 the documentation on Random

The current implementation of the Random class is based on Donald E. Knuth's subtractive random number generator algorithm. For more information, see D. E. Knuth. "The Art of Computer Programming, volume 2: Seminumerical Algorithms". Addison-Wesley, Reading, MA, second edition, 1981.

.

Should I expect different results using these two ways of generating random numbers?

与其他现成的随机生成器相比,您在 C++ 中使用的 Mersenne-Twister 算法被认为是非常值得尊敬的。

我怀疑您的代码中存在任何差异。

关于c++ - Boost 与 .Net 随机数生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16218544/

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