Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 一个引擎(boost::mt19937)多个分布(随机质量)_C++ - Fatal编程技术网

C++ 一个引擎(boost::mt19937)多个分布(随机质量)

C++ 一个引擎(boost::mt19937)多个分布(随机质量),c++,C++,我正在使用boost_1_31_0,我正在尝试创建beta分布随机数(我正在使用beta(alpha,beta)=gamma(alpha)/(gamma(alpha)+gamma(beta))) 我每次用这个(见下文)创建16个随机数:问题是随机生成的不遵守大数定律:对于每个分布,当我计算生成数的平均值时,它与分布的平均值不同。结论是我们不能在很多发行版中使用相同的引擎吗? 我的代码如下: //this engine is created in the top of my code. boost

我正在使用boost_1_31_0,我正在尝试创建beta分布随机数(我正在使用beta(alpha,beta)=gamma(alpha)/(gamma(alpha)+gamma(beta))) 我每次用这个(见下文)创建16个随机数:问题是随机生成的不遵守大数定律:对于每个分布,当我计算生成数的平均值时,它与分布的平均值不同。结论是我们不能在很多发行版中使用相同的引擎吗? 我的代码如下:

//this engine is created in the top of my code.
boost::mt19937 eng;

//MyVector.size() is equal to 8, this boucle is called 100 000 times

for (int i = 0; i<MyVector.size(); i++)
{
    MyObject seedPtr = MyVector[i];
alpha = m_map_alpha.find(seedPtr)->second ;
boost::gamma_distribution<> gamma_alpha(alpha);
boost::variate_generator< boost::mt19937&,boost::gamma_distribution<>> generator_gamma_alpha(eng, gamma_alpha);
alpha_random = generator_gamma_alpha();
boost::gamma_distribution<> gamma_beta(beta);
boost::variate_generator< boost::mt19937&, boost::gamma_distribution<>> generator_gamma_beta(eng, gamma_beta);
beta_random = generator_gamma_beta();   
random = alpha_random / (alpha_random + beta_random ) ;
pair<myObject, double> graine(seedPtr, random);
mapRandoms.insert(graine);
}
//此引擎是在我的代码顶部创建的。
增压:mt19937发动机;
//如果MyVector.size()等于8,则此边界被调用100000次
对于(int i=0;等秒;
boost::γ分布γα(α);
boost::variate_generatorgenerator_gamma_alpha(eng,gamma_alpha);
alpha_random=生成器_gamma_alpha();
boost::伽马分布伽马分布(beta);
boost::variate_generatorgenerator_gamma_beta(eng,gamma_beta);
beta_random=生成器_gamma_beta();
随机=阿尔法随机/(阿尔法随机+贝塔随机);
成对颗粒(种子,随机);
mapRandoms.insert(graine);
}

Boost 1.31.0?真的吗?1.50.0是当前版本。您在生成每个随机数后重新播种引擎,其输出不遵守分布规律(包括大数定律)我不会感到惊讶不,我只在代码顶部创建了一次,没有重新设定种子,因为我希望每次都有相同的随机数。我想我将使用boost::mt19937创建统一的随机数,并应用此算法创建gamma随机数:(gamma(S,1):if 01…)你知道gays使用分布boost::gamma_分布创建gamma随机数的算法是什么吗?事实上,你每次迭代都在重新播种rng。当你创建变量_生成器时,它会复制一个URNG,在你的循环中,它每一次都复制相同的rng状态