Rosetta Utilities  2014.35
Classes | Typedefs | Enumerations | Functions | Variables
numeric::random Namespace Reference

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_RGcreateRG (string const &type)
 uniform_RG factory More...
 
template<typename T >
xyzVector< T > random_point_on_unit_sphere (RandomGenerator &RG)
 
template<typename 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)
 

Typedef Documentation

Enumeration Type Documentation

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_ 

Function Documentation

template<typename T >
platform::Size numeric::random::binary_search_cdf ( utility::vector1< T > const &  cdf,
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)
static void numeric::random::do_recursion ( w128_t r,
w128_t a,
w128_t b,
w128_t c,
w128_t lung 
)
inlinestatic

This function represents the recursion formula.

Parameters
routput
aa 128-bit part of the internal state array
ba 128-bit part of the internal state array
ca 128-bit part of the internal state array
lunga 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  )
static uint32_t numeric::random::ini_func1 ( uint32_t  x)
inlinestatic

This function represents a function used in the initialization by init_by_array

Parameters
x32-bit integer
Returns
32-bit integer

Referenced by numeric::random::mt19937_RG::init_by_array().

static uint32_t numeric::random::ini_func2 ( uint32_t  x)
inlinestatic

This function represents a function used in the initialization by init_by_array

Parameters
x32-bit integer
Returns
32-bit integer

Referenced by numeric::random::mt19937_RG::init_by_array().

static void numeric::random::lshift128 ( w128_t out,
const w128_t in,
int  shift 
)
inlinestatic

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.

Parameters
outthe output of this function
inthe 128-bit data to be shifted
shiftthe shift value

References W128_T::u.

Referenced by do_recursion().

template<typename T >
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().

template<class T >
void numeric::random::random_permutation ( utility::vector1< T > &  vect,
RandomGenerator &  rg 
)
template<class T >
void numeric::random::random_permutation ( utility::vector0< T > &  vect,
RandomGenerator &  rg 
)
template<class T >
void numeric::random::random_permutation ( std::vector< T > &  vect,
RandomGenerator &  rg 
)
template<typename RandomAccessIterator >
void numeric::random::random_permutation ( RandomAccessIterator  first,
RandomAccessIterator  last,
RandomGenerator &  rg 
)

randomly shuffle elements of a sequence

References numeric::random::RandomGenerator::uniform().

template<typename T >
xyzVector< T > numeric::random::random_point_on_unit_sphere ( RandomGenerator &  RG)
inline

generate uniformly distributed vector on the unit sphere

Author
Zhe Zhang
Justin R. Porter

References numeric::NumericTraits< T >::pi_2(), numeric::sin_cos_range(), numeric::spherical_to_xyz(), basic::T(), and numeric::random::RandomGenerator::uniform().

int numeric::random::random_range ( int  low,
int  high 
)
template<typename T >
T numeric::random::random_rotation_angle ( rot_mag,
RandomGenerator &  RG 
)
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

Note
gaussian distributed Euler angles do not give unbiased sampling in rotational space by applying this angle to a uniformly chosen rotation axis unbiased rotational sampling is achieved
Author
Zhe Zhang Justin R. Porter

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().

template<typename T >
xyzVector< T > numeric::random::random_translation ( trans_mag,
RandomGenerator &  RG 
)
inline

produce a random translation in xyz space

Author
Zhe Zhang
Justin R. Porter

References numeric::random::RandomGenerator::gaussian().

template<typename T >
utility::vector1< T > numeric::random::reservoir_sample ( utility::vector1< T > const &  vec,
numeric::Size const  n_wanted,
RandomGenerator &  rg 
)
numeric::Real numeric::random::reservoir_sample_accept_prob ( numeric::Size  n_wanted,
numeric::Size const  n_seen 
)
inline

Returns the probability that the Nth value in a sequence should be accepted using the reservoir sampling criterion.

Detailed: If we've seen N values and we want to keep K of them,
the probability of the Nth value being accepted is min(K/N,1.0).

References min().

Referenced by numeric::random::ReservoirSampler< T >::add_value(), and reservoir_sample().

static int numeric::random::sformat_idxof ( int  i)
inlinestatic

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  )

Variable Documentation

RandomGenerator numeric::random::RG