![]() |
Rosetta Utilities
2014.35
|
Classes | |
class | DistributionSampler |
class | mt19937_RG |
class | RandomGenerator |
Random number generator system. More... | |
class | ReservoirSampler |
Simple container for keeping K random values. More... | |
class | standard_RG |
Generator based on rand() < clib > function. More... | |
class | uniform_RG |
Uniform random number generator. More... | |
class | WeightedReservoirItem |
class | WeightedReservoirSampler |
class | WeightedSampler |
Typedefs | |
typedef platform::Size | Size |
typedef utility::pointer::owning_ptr < uniform_RG > | uniform_RG_OP |
typedef utility::pointer::owning_ptr < uniform_RG const > | uniform_RG_COP |
Enumerations | |
enum | RND_RunType { _RND_NormalRun_, _RND_TestRun_ } |
Different type of initialization scheme: RND_NormalRun - all instances of RandomGenerator will be pointing to just one generator. This is main production mode. We do not use multiple generators here because putting many generators will effectively produce long-range correlations between random numbers obtained from different places of program. (By using N generators instead of one we effectively reducing dimensionality of random generator by at least N. Now take in to account number of nodes in computer cluster and its look like we can quickly run in to trouble even with 600 dimensional Mersenne twister.) Somewhat helpful presentation on this topic: "Don't Trust Parallel Monte Carlo!" by Peter Hellekalek, available online at: http://random.mat.sbg.ac.at/~peter/pads98.ps. More... | |
Functions | |
static void | lshift128 (w128_t *out, const w128_t *in, int shift) |
static uint32_t | ini_func1 (uint32_t x) |
static uint32_t | ini_func2 (uint32_t x) |
static int | sformat_idxof (int i) |
static void | do_recursion (w128_t *r, w128_t *a, w128_t *b, w128_t *c, w128_t *lung) |
double | uniform (void) |
double | gaussian (void) |
int | random_range (int low, int high) |
uniform_RG * | createRG (string const &type) |
uniform_RG factory More... | |
template<typename T > | |
xyzVector< T > | random_point_on_unit_sphere (RandomGenerator &RG) |
template<typename T > | |
T | random_rotation_angle (T rot_mag, RandomGenerator &RG) |
gamma-distribution-like random angle generation, rot_mag makes exactly the same sense as in gaussian_move More... | |
template<typename T > | |
xyzVector< T > | random_translation (T trans_mag, RandomGenerator &RG) |
produce a random translation in xyz space More... | |
template<typename T > | |
platform::Size | binary_search_cdf (utility::vector1< T > const &cdf, T urn) |
Return the index in the CDF array such that it is smaller than or equal to the uniform-random-number (urn) and that the next entry in the array is larger than urn. The CDF ought to represent the exclusive cumulative sum of the probabilities of some discrete set so that the width for entry i – the gap between entry i and entry i+1 should be the probability of entry i. More... | |
template<typename T > | |
platform::Size | pick_random_index_from_cdf (utility::vector1< T > const &cdf, RandomGenerator &RG) |
Choose an element from an array of positions representing the cumulative distribution function for some target distribution. This uses binary search to quickly find the target index. If any position has the same probability as the preceeding position, then its index won't be returned. More... | |
template<class T > | |
void | random_permutation (utility::vector1< T > &vect, RandomGenerator &rg) |
template<class T > | |
void | random_permutation (utility::vector0< T > &vect, RandomGenerator &rg) |
template<class T > | |
void | random_permutation (std::vector< T > &vect, RandomGenerator &rg) |
template<typename RandomAccessIterator > | |
void | random_permutation (RandomAccessIterator first, RandomAccessIterator last, RandomGenerator &rg) |
randomly shuffle elements of a sequence More... | |
numeric::Real | reservoir_sample_accept_prob (numeric::Size n_wanted, numeric::Size const n_seen) |
Returns the probability that the Nth value in a sequence should be accepted using the reservoir sampling criterion. More... | |
template<typename T > | |
utility::vector1< T > | reservoir_sample (utility::vector1< T > const &vec, numeric::Size const n_wanted, RandomGenerator &rg) |
Variables | |
RandomGenerator | RG (0) |
Different type of initialization scheme: RND_NormalRun - all instances of RandomGenerator will be pointing to just one generator. This is main production mode. We do not use multiple generators here because putting many generators will effectively produce long-range correlations between random numbers obtained from different places of program. (By using N generators instead of one we effectively reducing dimensionality of random generator by at least N. Now take in to account number of nodes in computer cluster and its look like we can quickly run in to trouble even with 600 dimensional Mersenne twister.) Somewhat helpful presentation on this topic: "Don't Trust Parallel Monte Carlo!" by Peter Hellekalek, available online at: http://random.mat.sbg.ac.at/~peter/pads98.ps.
RND_TestRun - each instance of RandomGenerator will have its own generator with its own seed. We using this approach because we trying to increase stability of unit test / performance tests / scientific test. WARNING: This mode design specifically for testing purpose and SHOULD NOT be used in production environment (see comment above).
Enumerator | |
---|---|
_RND_NormalRun_ | |
_RND_TestRun_ |
platform::Size numeric::random::binary_search_cdf | ( | utility::vector1< T > const & | cdf, |
T | urn | ||
) |
Return the index in the CDF array such that it is smaller than or equal to the uniform-random-number (urn) and that the next entry in the array is larger than urn. The CDF ought to represent the exclusive cumulative sum of the probabilities of some discrete set so that the width for entry i – the gap between entry i and entry i+1 should be the probability of entry i.
References basic::T().
Referenced by pick_random_index_from_cdf().
uniform_RG* numeric::random::createRG | ( | string const & | type | ) |
uniform_RG factory
References utility_exit_with_message.
Referenced by numeric::random::RandomGenerator::initializeRandomGenerators().
|
inlinestatic |
This function represents the recursion formula.
r | output |
a | a 128-bit part of the internal state array |
b | a 128-bit part of the internal state array |
c | a 128-bit part of the internal state array |
lung | a 128-bit part of the internal state array |
References DSFMT_HIGH_CONST, DSFMT_LOW_MASK, DSFMT_MSK1, DSFMT_MSK2, DSFMT_SL1, DSFMT_SL2, DSFMT_SR1, DSFMT_SR2, lshift128(), and W128_T::u.
Referenced by numeric::random::mt19937_RG::gen_rand_all().
double numeric::random::gaussian | ( | void | ) |
References numeric::random::RandomGenerator::gaussian(), and RG.
This function represents a function used in the initialization by init_by_array
x | 32-bit integer |
Referenced by numeric::random::mt19937_RG::init_by_array().
This function represents a function used in the initialization by init_by_array
x | 32-bit integer |
Referenced by numeric::random::mt19937_RG::init_by_array().
This function simulates SIMD 128-bit left shift by the standard C. The 128-bit integer given in in is shifted by (shift * 8) bits. This function simulates the LITTLE ENDIAN SIMD.
out | the output of this function |
in | the 128-bit data to be shifted |
shift | the shift value |
References W128_T::u.
Referenced by do_recursion().
platform::Size numeric::random::pick_random_index_from_cdf | ( | utility::vector1< T > const & | cdf, |
RandomGenerator & | RG | ||
) |
Choose an element from an array of positions representing the cumulative distribution function for some target distribution. This uses binary search to quickly find the target index. If any position has the same probability as the preceeding position, then its index won't be returned.
References binary_search_cdf(), basic::T(), and numeric::random::RandomGenerator::uniform().
void numeric::random::random_permutation | ( | utility::vector1< T > & | vect, |
RandomGenerator & | rg | ||
) |
References basic::T(), and numeric::random::RandomGenerator::uniform().
void numeric::random::random_permutation | ( | utility::vector0< T > & | vect, |
RandomGenerator & | rg | ||
) |
References basic::T(), and numeric::random::RandomGenerator::uniform().
void numeric::random::random_permutation | ( | std::vector< T > & | vect, |
RandomGenerator & | rg | ||
) |
References basic::T(), and numeric::random::RandomGenerator::uniform().
void numeric::random::random_permutation | ( | RandomAccessIterator | first, |
RandomAccessIterator | last, | ||
RandomGenerator & | rg | ||
) |
randomly shuffle elements of a sequence
References numeric::random::RandomGenerator::uniform().
|
inline |
generate uniformly distributed vector on the unit sphere
References numeric::NumericTraits< T >::pi_2(), numeric::sin_cos_range(), numeric::spherical_to_xyz(), basic::T(), and numeric::random::RandomGenerator::uniform().
References numeric::random::RandomGenerator::random_range(), and RG.
Referenced by numeric::random::ReservoirSampler< T >::add_value().
|
inline |
gamma-distribution-like random angle generation, rot_mag makes exactly the same sense as in gaussian_move
generate axis and angle for axis-angle rotation for random rotation move in R/RT degrees of freedom. rotation axis: uniformly distributed on unit sphere, rotation angle: chosen to mimic the distribution of rotation angles obtained from gaussian distrbuted Euler angles (core/kinematics/Jump.cc), which is a gamma-distribution-like distribution
References numeric::random::RandomGenerator::gaussian(), numeric::rotation_axis(), basic::T(), numeric::x_rotation_matrix_degrees(), numeric::y_rotation_matrix_degrees(), and numeric::z_rotation_matrix_degrees().
|
inline |
produce a random translation in xyz space
References numeric::random::RandomGenerator::gaussian().
utility::vector1< T > numeric::random::reservoir_sample | ( | utility::vector1< T > const & | vec, |
numeric::Size const | n_wanted, | ||
RandomGenerator & | rg | ||
) |
|
inline |
Returns the probability that the Nth value in a sequence should be accepted using the reservoir sampling criterion.
References min().
Referenced by numeric::random::ReservoirSampler< T >::add_value(), and reservoir_sample().
This function simulate a 32-bit array index overlapped to 64-bit array of LITTLE ENDIAN in BIG ENDIAN machine.
Referenced by numeric::random::mt19937_RG::init_by_array(), and numeric::random::mt19937_RG::setSeed().
double numeric::random::uniform | ( | void | ) |
References RG, and numeric::random::RandomGenerator::uniform().
Referenced by numeric::random::ReservoirSampler< T >::add_value(), numeric::random::WeightedReservoirSampler< T >::consider_sample(), numeric::random::RandomGenerator::random_range(), and numeric::random::DistributionSampler< T >::sample().
RandomGenerator numeric::random::RG |
Referenced by gaussian(), numeric::random::RandomGenerator::initializeRandomGenerators(), random_range(), and uniform().