Random number generation class, uses various types of random generators depending on the implementation.
More...
|
| static void | init (unsigned long seed) |
| | Initialize the random generator's seed. More...
|
| |
| static void | free () |
| | Memory de-allocation. More...
|
| |
| static double | Uniform () |
| | Generates a random number from [0.0, 1.0[ uniformly distributed. More...
|
| |
| static unsigned int | Uniform (unsigned int max) |
| | Returns a uniformly distributed random number from [0.0, max[. More...
|
| |
| static bool | RandBool () |
| | Returns a random boolean. More...
|
| |
| static unsigned long | RandULong () |
| | Return a random unsigned long, from uniform distribution. More...
|
| |
| static double | gammln (double xx) |
| | From the Numerical Recieps. More...
|
| |
| static double | Poisson (double mean) |
| | From the Numerical Recieps. More...
|
| |
| static double | Gaussian (double sigma) |
| |
| static void | BivariateGaussian (double sigma1, double sigma2, double rho, double *out1, double *out2) |
| |
| static double | LogNormal (double zeta, double sigma) |
| |
| static double | Gamma (double a, double b) |
| |
| static double | Bernoulli (double p) |
| |
| static double | Exponential (double mu) |
| |
| static double | Binomial (double p, unsigned int n) |
| |
| static double | Beta (const double a, const double b) |
| |
| static unsigned int | Binomial2 (double p, unsigned int n) |
| |
| static void | Multinomial (size_t K, unsigned int N, const double p[], unsigned int n[]) |
| |
| static void | MultinomialOnNormalizedValarray (size_t K, unsigned int N, const std::valarray< double > &p, unsigned int n[]) |
| | Multinomial draw assuming the probabilities sum to 1.0 and are all > 0. More...
|
| |
| static void | MultinomialOnNormalizedValarray_expandedOut (size_t K, unsigned int N, const std::valarray< double > &p, unsigned int n[]) |
| | Multinomial draw assuming the probabilities sum to 1.0 and are all > 0, the output is an array of size N. More...
|
| |
| static void | MultinomialOnNormalizedValarray_scrambleOut (size_t K, unsigned int N, const std::valarray< double > &p, unsigned int n[]) |
| | Multinomial draw assuming the probabilities sum to 1.0 and are all > 0, the output is an array of size N. More...
|
| |
| static void | MultinomialOnNormalizedValarrayZipper_scrambleOut (size_t K, unsigned int N, const std::valarray< double > &p, unsigned int n[]) |
| | Multinomial draw assuming the probabilities sum to 1.0 and are all > 0, the output is an array of size N. More...
|
| |
| static void | ScrambleArrayUInt (const int length, unsigned int *array) |
| | Randomize the elements within an array. More...
|
| |
| static void | Sample (const int from, const int to, const unsigned int num, int *result, bool replace) |
| | Creates a sample of integers within range [from, to), with or without replacement. More...
|
| |
| static void | SampleSeq (int from, int to, int by, unsigned int num, int *result, bool replace=false) |
| |
| static void | SampleSeqWithReciprocal (int from, int to, int by, unsigned int num1, int *result1, unsigned int num2, int *result2) |
| |
| static size_t | Discrete (const gsl_ran_discrete_t *g) |
| | Calling the GSL ran_discrete function. More...
|
| |
Random number generation class, uses various types of random generators depending on the implementation.
| static bool RAND::RandBool |
( |
| ) |
|
|
inlinestatic |
Returns a random boolean.
One bit is consumed per call from a cached random word, which is redrawn once its bits are exhausted. The shift must be done on an unsigned long: with the former 1 << num the shift count wrapped at 32, so bits 32-63 returned the same values as bits 0-31 of the same draw and the sequence repeated every 32 calls. This must stay consistent with RandULong() below: while RandULong() filled only the lower 32 bits, that same wrap was what kept these reads on the random half of the word, so fixing either one alone biases the result (see the CHANGELOG for 2.4.2).
173 static const unsigned int NBITS = 31;
174 static unsigned long intrand = (
unsigned long)stream->isprng();
176 static const unsigned int NBITS = (
unsigned int)(CHAR_BIT *
sizeof(
unsigned long));
177 static unsigned long intrand =
RandULong();
179 static unsigned int num = 0;
182 if ( num == NBITS ) {
186 intrand = (
unsigned long)stream->isprng();
192 return ( intrand >> num++ ) & 1UL;
static unsigned long RandULong()
Return a random unsigned long, from uniform distribution.
Definition: Uniform.h:200
References RandULong().
Referenced by LCE_Patch_Extinction::do_remove(), TProtoQuanti::getMutationEffectBivariateDiallelic(), LCE_Breed_base::getOffsprgSexFixed(), LCE_Breed_base::getOffsprgSexRandom(), TTDispersal::inherit(), TTNeutralGenes_bitstring::inherit(), TProtoBDMI::inherit_free(), TProtoDeletMutations_bitstring::inherit_free(), TProtoQuanti::inherit_free(), TProtoNeutralGenes::inherit_free(), TTNeutralGenes_bitstring::init_sequence(), TTQuanti_continuous_full_pleio::init_sequence(), TTQuanti_continuous_var_pleio::init_sequence(), TTQuanti_continuous_no_pleio::init_sequence(), TTQuanti_diallelic_no_pleio::init_sequence(), TTQuanti_diallelic_full_pleio::init_sequence(), TTQuanti_diallelic_var_pleio::init_sequence(), TTQuanti_diallelic_bitstring_no_pleio::init_sequence(), TTQuanti_diallelic_bitstring_full_pleio::init_sequence(), TTQuanti_diallelic_bitstring_var_pleio::init_sequence(), TTQuanti_continuous_full_pleio_epistasis::init_sequence(), TTQuanti_diallelic_full_pleio_epistasis::init_sequence(), TTQuanti_continuous_no_pleio_epistasis::init_sequence(), TTQuanti_diallelic_no_pleio_epistasis::init_sequence(), TTQuanti_diallelic_bitstring_no_pleio_epistasis::init_sequence(), TTQuanti_diallelic_bitstring_full_pleio_epistasis::init_sequence(), LCE_Disperse_EvolDisp::Migrate_SteppingStone1D(), TTDispersal::mutate(), TTNeutralGenes_bitstring::mutate(), TTNeutralGenes_byte::mutate_2all(), TProtoQuanti::mutate_diallelic_no_pleio(), TProtoQuanti::mutate_diallelic_pleio(), TProtoQuanti::mutate_diallelic_var_pleio(), TT_BDMI::mutate_diplo(), TProtoQuanti::mutate_full_pleio(), TProtoQuanti::mutate_inplace_full_pleio(), TProtoQuanti::mutate_inplace_no_pleio(), TProtoQuanti::mutate_inplace_var_pleio(), TTNeutralGenes_byte::mutate_KAM(), TProtoQuanti::mutate_no_pleio(), TTDeletMutations_bitstring::mutate_noredraw(), TTDeletMutations_bitstring::mutate_noredraw_noBackMutation(), TTDeletMutations_bitstring::mutate_redraw(), TTNeutralGenes_byte::mutate_SSM(), TProtoQuanti::mutate_var_pleio(), GeneticMap::recombine(), LCE_Breed_Wolbachia::wolbachia_model_1(), and LCE_Breed_Wolbachia::wolbachia_model_2().
| static double RAND::Uniform |
( |
| ) |
|
|
inlinestatic |
Generates a random number from [0.0, 1.0[ uniformly distributed.
If SPRNG or GSL libraries are not used, implement a random generator from: L'Ecuyer, 1988, "Efficient and Portable Combined Random Number Generators", Communication of the ACM, 31(6):742-774.
128 return stream->sprng();
129 #elif defined(HAS_GSL)
130 return gsl_rng_uniform(r);
137 Seed1 = 40014 * (
Seed1 - w * 53668) - w * 12211;
143 Seed2 = 40692 * (
Seed2 - w * 52774) - w * 3791;
149 if (z < 1) z += 2147483562;
151 }
while (!((z * 4.656613e-10) < 1.0));
153 return (z * 4.656613e-10);
static long Seed2
Definition: Uniform.h:76
References Seed1, and Seed2.
Referenced by Bernoulli(), Binomial(), BivariateGaussian(), LCE_Breed_base::checkPolygyny(), LCE_Cross::create_individual_ancestors(), Discrete(), LCE_Patch_Extinction::do_remove(), LCE_Selection_base::doViabilitySelection(), LCE_Disperse_EvolDisp::evoldisp(), LCE_BreedAssortativeMating::execute(), LCE_Aging::execute(), LCE_Patch_Extinction::execute(), Exponential(), BinaryDataLoader::extractPop(), Metapop::fillPopulationFromSource(), LCE_Disperse_EvolDisp::fixdisp(), LCE_Breed_base::fullPolyginy_manyMales(), Gamma(), Gaussian(), LCE_Breed_Disperse::get_parent(), LCE_Disperse_base::getMigrationIndex(), LCE_Disperse_base::getMigrationPatchBackward(), LCE_Disperse_base::getMigrationPatchForward(), TProtoQuanti::getMutationEffectBivariateDiallelic(), LCE_QuantiInit::init_allele_freq(), TT_BDMI::init_sequence(), TTDeletMutations_bitstring::init_sequence(), TTDispersal::init_sequence(), TTNeutralGenes_byte::init_sequence(), LogNormal(), LCE_Breed_Selection::makeOffspringWithSelection(), LCE_Breed_Disperse::mate_selfing(), LCE_Disperse_EvolDisp::Migrate_Island(), LCE_Disperse_EvolDisp::Migrate_Island_Propagule(), LCE_Disperse_EvolDisp::Migrate_Lattice(), LCE_Disperse_ConstDisp::MigratePatchByNumber(), MultinomialOnNormalizedValarrayZipper_scrambleOut(), TTDispersal::mutate(), TTNeutralGenes_bitstring::mutate(), TTWolbachia::mutate(), TTNeutralGenes_byte::mutate_2all(), TProtoQuanti::mutate_diallelic_no_pleio(), TProtoQuanti::mutate_diallelic_pleio(), TProtoQuanti::mutate_diallelic_var_pleio(), TT_BDMI::mutate_diplo(), TProtoQuanti::mutate_full_pleio(), TT_BDMI::mutate_haplo(), TProtoQuanti::mutate_inplace_full_pleio(), TProtoQuanti::mutate_inplace_no_pleio(), TProtoQuanti::mutate_inplace_var_pleio(), TTNeutralGenes_byte::mutate_KAM(), TProtoQuanti::mutate_no_pleio(), TTDeletMutations_bitstring::mutate_noredraw(), TTDeletMutations_bitstring::mutate_noredraw_noBackMutation(), TTDeletMutations_bitstring::mutate_redraw(), TTNeutralGenes_byte::mutate_SSM(), TProtoQuanti::mutate_var_pleio(), LCE_Breed_base::partialMonoginy(), LCE_Breed_base::partialPolyginy(), LCE_Breed_base::partialPolyginy_manyMales(), LCE_Breed_base::partialSelfing(), Poisson(), LCE_Patch_Extinction::rand_exp(), LCE_Patch_Extinction::rand_uniform(), LCE_Breed_base::random_hermaphrodite(), LCE_Breed_base::RandomMating(), RandULong(), GeneticMap::recombine(), LCE_Resize::regulateAgeClassNoBackup(), LCE_Resize::regulateAgeClassWithBackup(), LCE_Regulation::regulatePatch(), ParamsParser::runif(), Sample(), ParamsParser::sample(), LCE_Cross::sampleAmongPop(), SampleSeq(), SampleSeqWithReciprocal(), LCE_Cross::sampleWithinPop(), ScrambleArrayUInt(), LCE_BreedAssortativeMating::ScrambleContainer(), LCE_Disperse_base::setPropaguleTargets(), TTProtoWithMap::setRecombinationMapRandom(), setSpatialMatrix(), LCE_Breed_Disperse::stochasticFecundityGrowth(), Uniform(), LCE_Breed_Wolbachia::wolbachia_model_1(), LCE_Breed_base::WrightFisherPopulation(), and LCE_Breed_Quanti::WrightFisherPopulation().