40 #include "Configurable.hpp"
41 #include "shared_ptr.hpp"
54 static void seed(
unsigned int value);
57 static int uniform_integer(
int a,
int b);
60 static long uniform_long(
long a,
long b);
63 static double uniform_real(
double a,
double b);
66 static double uniform_01();
69 static int bernoulli(
double p = .5);
72 static std::vector<size_t> random_indices_without_replacement(
size_t population_size,
size_t sample_size);
77 typedef shared_ptr<Distribution> DistributionPtr;
79 static DistributionPtr create_constant_distribution(
const std::string&
id,
82 static DistributionPtr create_uniform_real_distribution(
const std::string&
id,
83 double min = 0,
double max = 1);
85 static DistributionPtr create_normal_distribution(
const std::string&
id,
86 double mean = 0,
double variance = 1);
88 static DistributionPtr create_exponential_distribution(
const std::string&
id,
91 static DistributionPtr create_poisson_distribution(
const std::string&
id,
94 static DistributionPtr create_discrete_distribution(
const std::string&
id,
95 std::vector<double> frequencies = std::vector<double>(),
96 std::vector<double> values = std::vector<double>());
98 static DistributionPtr create_neutral_frequency_distribution(
const std::string&
id,
99 unsigned int sample_size = 0);
126 virtual double random_value()
const = 0;
130 virtual std::string class_name()
const;
131 virtual Parameters parameters()
const;
132 virtual void configure(
const Parameters& parameters,
const Registry& registry);
136 #endif // _RANDOM_HPP_