【发布时间】:2015-11-04 13:07:10
【问题描述】:
我在相同的情况下运行我的项目(即当然除了随机数)。有时实验运行顺利,有时则不然。我怀疑随机生成器的实现方式。这是我使用标准 STL 的解决方案
#include <random>
#include <iostream>
class Foo
{
public:
Foo(){
generator.seed(seeder);
}
double Normalized_Gaussain_Noise_Generator(){
return distribution(generator);
}
private:
std::random_device seeder;
std::default_random_engine generator;
std::normal_distribution<double> distribution;
};
int main()
{
Foo fo;
for (int i = 0; i < 10; ++i)
{
std::cout << fo.Normalized_Gaussain_Noise_Generator() << std::endl;
}
}
我也尝试过 boost,一般来说响应比我使用 STL 的方法更好,这就是代码。
#include <iostream>
#include <ctime>
#include <boost/random.hpp>
#include <boost/random/normal_distribution.hpp>
class Foo
{
public:
Foo() : generator(time(0)), var_nor(generator, boost::normal_distribution<double>() )
{
}
double Normalized_Gaussain_Noise_Generator(){
return var_nor();
}
private:
// Boost Case:
boost::mt19937 generator;
boost::variate_generator<boost::mt19937&, boost::normal_distribution<double> > var_nor;
};
int main()
{
Foo fo;
for (int i = 0; i < 10; ++i)
{
std::cout << fo.Normalized_Gaussain_Noise_Generator() << std::endl;
}
}
我的第一个问题是我的方法有什么问题吗?如果是这样,在类中实现正态分布的最有效方法是什么?
【问题讨论】:
-
运行不“流畅”是什么意思?
-
@Pradhan,我没有从假设噪声为高斯的随机方法得到预期结果。
-
好的。只是为了确认一下,您是否打算将高斯噪声设为标准正态?因为这就是你在default construct an
std::normal_distribution时得到的结果。 -
@Pradhan,确实如此。
-
好的,在这种情况下,我认为差异可以归结为您的
std库的default_random_engine不如boost::mt19337作为PRNG。要进行苹果与苹果之间的比较,您能否尝试在第一个示例中使用std::mt19337作为生成器,而不是std::default_random_engine?
标签: c++ boost random normal-distribution