MachineIntelligenceCore:Algorithms
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
RandomGenerator.hpp
Go to the documentation of this file.
1 
23 #ifndef SRC_DATA_UTILS_RANDOMGENERATOR_HPP_
24 #define SRC_DATA_UTILS_RANDOMGENERATOR_HPP_
25 
26 #include <boost/atomic.hpp>
27 #include <boost/thread/mutex.hpp>
28 
29 #include <random>
30 
31 namespace mic {
32 namespace utils {
33 
39 public:
40 
45  static RandomGenerator* getInstance();
46 
47 
52  uint64_t uniRandInt(int min = 0, int max = RAND_MAX);
53 
60  double uniRandReal(double min = 0, double max = 1);
61 
68  double normRandReal(double mean = 0, double variance = 1);
69 
70 private:
74  static boost::atomic<RandomGenerator*> instance_;
75 
79  static boost::mutex instantiation_mutex;
80 
85 
89  std::random_device rd;
90 
94  std::mt19937_64 rng_mt19937_64;
95 
97  std::uniform_int_distribution<> uniform_int_dist;
98 
100  std::uniform_real_distribution<> uniform_real_dist;
101 
103  std::normal_distribution<> normal_real_dist;
104 
105 };
106 
111 #define RAN_GEN mic::utils::RandomGenerator::getInstance()
112 
113 
114 } /* namespace utils */
115 } /* namespace mic */
116 
117 #endif /* SRC_DATA_UTILS_RANDOMGENERATOR_HPP_ */
double uniRandReal(double min=0, double max=1)
Random generator - defined in the form of a singleton, with double-checked locking pattern (DCLP) bas...
std::uniform_real_distribution uniform_real_dist
Uniform distribution from 0 to 1 (real values).
static boost::atomic< RandomGenerator * > instance_
std::uniform_int_distribution uniform_int_dist
Uniform distribution from 0 to RAND_MAX (integers).
uint64_t uniRandInt(int min=0, int max=RAND_MAX)
static RandomGenerator * getInstance()
static boost::mutex instantiation_mutex
double normRandReal(double mean=0, double variance=1)
std::normal_distribution normal_real_dist
Normal distribution from 0 to 1 (real values).