14 #ifndef PROB_SAMPLE_H_INCLUDED
15 #define PROB_SAMPLE_H_INCLUDED
35 #include <boost/random.hpp>
66 typedef boost::uniform_real<> Distribution_type;
67 typedef boost::variate_generator<Base_generator_type&, Distribution_type> Rng;
68 Rng rng(
basic_rnd_gen, Distribution_type(dist.lower(), dist.upper()));
84 template<
class Distro>
89 return quantile(dist, u);
97 typedef boost::bernoulli_distribution<> Distribution_type;
98 typedef boost::variate_generator<Base_generator_type&, Distribution_type> Rng;
100 Rng rng(
basic_rnd_gen, Distribution_type(dist.success_fraction()));
109 typedef boost::binomial_distribution<> Distribution_type;
110 typedef boost::variate_generator<Base_generator_type&, Distribution_type> Rng;
112 Rng rng(
basic_rnd_gen, Distribution_type(dist.trials(), dist.success_fraction()));
121 typedef boost::exponential_distribution<> Distribution_type;
122 typedef boost::variate_generator<Base_generator_type&, Distribution_type> Rng;
133 typedef boost::normal_distribution<> Distribution_type;
134 typedef boost::variate_generator<Base_generator_type&, Distribution_type> Rng;
136 Rng rng(
basic_rnd_gen, Distribution_type(dist.mean(), dist.standard_deviation()));
145 typedef boost::poisson_distribution<> Distribution_type;
146 typedef boost::variate_generator<Base_generator_type&, Distribution_type> Rng;
152 #if BOOST_VERSION < 103400
155 #warning "sample(Geometric_distribution) not implemented in Boost prior to 1.034"
159 inline double sample(
const Geometric_distribution&
dist)
163 #if BOOST_VERSION >= 104700
164 double dist_param = dist.success_fraction();
166 KJB(UNTESTED_CODE());
167 double dist_param = 1.0-dist.success_fraction();
170 typedef boost::geometric_distribution<> Distribution_type;
171 typedef boost::variate_generator<Base_generator_type&, Distribution_type> Rng;
191 using namespace boost;
193 if(dist.cdf_.empty())
198 assert(dist.cdf_.size() == dist.db.size());
199 double total_weight = dist.cdf_.back().second;
203 typedef typename Cd::Cdf_pair Cdf_pair;
204 typedef typename std::vector<Cdf_pair>::const_iterator Const_iterator;
212 typename Cd::cdf_pair_less_than_scalar());
214 assert(
r != dist.cdf_.end());
226 template<
class Iterator,
class distance_type>
232 std::advance(p, dist);
240 Vector
sample(
const MV_gaussian_distribution& dist);
244 return exp(
sample(dist.dist_));
250 template<
class Distribution>
252 typename Distribution_traits<Mixture_distribution<Distribution> >::type
255 size_t i =
sample(dist.coeffs);
256 return sample(dist.dists[i - 1]);
269 for(
size_t d = 0; d <
D; ++d)
283 template <
size_t D,
class Vector_d_iterator>
291 double kappa_ = dist.
kappa();
302 double b = (-2*kappa_ + sqrt(4*kappa_*kappa_ + (m-1)*(m-1)))/(m-1);
303 double x0 = (1-b)/(1+b);
304 double c = kappa_*x0 + (m-1)*log(1-x0*x0);
307 for(
size_t i = 0;
i < n; ++
i)
317 W = (1-(1+b)*Z)/(1-(1-b)*Z);
319 }
while(kappa_*W + (m-1)*log(1-x0*W) - c < log(U));
323 subdir *= sqrt(1- W*W);
326 std::copy(subdir.begin(), subdir.end(), dir.begin());
Definition: gr_opengl.h:41
Base_generator_type basic_rnd_gen
const kjb::Vector_d< D > & mu() const
Definition: prob_distribution.h:996
boost::math::bernoulli Bernoulli_distribution
Definition: prob_distribution.h:60
boost::mt19937 Base_generator_type
Definition: prob_sample.h:46
Definition of various standard probability distributions.
double kappa() const
Definition: prob_distribution.h:998
std::vector< std::vector< size_t > > Type
Definition: prob_distribution.h:1019
This class implements a mixture distribution. In other words, it is the sum of a finite number of fra...
Definition: prob_distribution.h:867
void seed_sampling_rand(unsigned int x0)
Seed random number generator.
Definition: prob_sample.h:55
#define KJB(x)
Definition: l_util.h:9
boost::math::poisson Poisson_distribution
Definition: prob_distribution.h:69
Log-normal distribution.
Definition: prob_distribution.h:827
boost::math::normal Gaussian_distribution
Definition: prob_distribution.h:66
r
Definition: APPgetLargeConnectedEdges.m:127
Definition: prob_distribution.h:984
#define KJB_THROW(ex)
Definition: l_exception.h:46
Vector sample(const MV_gaussian_distribution &dist)
Sample from a multivariate normal distribution.
Definition: prob_sample.cpp:42
A categorical distribution.
Definition: prob_distribution.h:131
const unsigned int DEFAULT_SEED
Random seed used to initialize the random number generator.
Definition: prob_sample.cpp:34
double dist(const pt a, const pt b)
compute approx. Great Circle distance between two UTM points
Definition: layer.cpp:45
boost::math::beta_distribution Beta_distribution
Definition: prob_distribution.h:61
boost::math::exponential Exponential_distribution
Definition: prob_distribution.h:64
PDFs and CDFs for the different distributions defined in "prob_distribution.h".
Definition: prob_distribution.h:79
Vector_d< D > & normalize()
normalize this vector to have l2-norm of 1.0
Definition: m_vector_d.impl.h:376
boost::math::binomial Binomial_distribution
Definition: prob_distribution.h:62
#define KJB_THROW_2(ex, msg)
Definition: l_exception.h:48
#define W(X)
Definition: Wide.h:45
Iterator element_uar(Iterator first, distance_type size)
Pick an element uniformly at random (UAR) from a sequence, represented by a beginning iterator and a ...
Definition: prob_sample.h:228
Object thrown when attempting to use unimplemented functionality.
Definition: l_exception.h:281
Definition: g_quaternion.h:37
get the indices of edges in each direction for i
Definition: APPgetLargeConnectedEdges.m:48
Matrix get_rotation_matrix(double theta)
Creates a (2D) rotation matrix from the given angle.
Definition: g_util.cpp:41
boost::math::uniform Uniform_distribution
Definition: prob_distribution.h:70
for m
Definition: APPgetLargeConnectedEdges.m:64
D
Definition: APPgetLargeConnectedEdges.m:106
size_t sample_occupied_tables(const Chinese_restaurant_process &crp)
Sample the number of occupied tables from a CRP (don't store the actual partition).
Definition: prob_sample.cpp:107
Definition for the Vector class, a thin wrapper on the KJB Vector struct and its related functionalit...
Object thrown when computation fails somehow during execution.
Definition: l_exception.h:321