示例#1
0
inline float sample_beta (
        rng_t & rng,
        float alpha,
        float beta)
{
    float x = sample_gamma(rng, alpha);
    float y = sample_gamma(rng, beta);
    return x / (x + y);
}
示例#2
0
 void init(
         const Shared & shared,
         const Group & group,
         rng_t & rng) {
     Shared post = shared.plus_group(group);
     mean = sample_gamma(rng, post.alpha, 1.f / post.inv_beta);
 }
double LogNormalHyperPrior::init() {
    
	boost::random::lognormal_distribution<> lognormal_dist(location, scale);
	boost::random::variate_generator<boost::random::mt19937*, boost::random::lognormal_distribution<> > sample_gamma(mt_rng_pt, lognormal_dist);
    
	double gamma = sample_gamma();
	
	return gamma;
}
double GammaHyperPrior::init() {
	
	boost::random::gamma_distribution<> gamma_dist(shape, scale);
	boost::random::variate_generator<boost::random::mt19937*, boost::random::gamma_distribution<> > sample_gamma(mt_rng_pt, gamma_dist);
	
	double gamma = sample_gamma();
	
	return gamma;
}