7 #include <boost/random/mersenne_twister.hpp>
8 #include <boost/random/seed_seq.hpp>
9 #include <boost/random/uniform_int_distribution.hpp>
10 #include <boost/random/uniform_real_distribution.hpp>
27 : generator(initialize_boost_generator(seeds)){}
29 : generator(initialize_std_generator(seeds))
35 size_t sample_int(
size_t n)
38 boost::random::uniform_int_distribution<size_t> distribution(0, n - 1);
40 std::uniform_int_distribution<size_t> distribution(0, n - 1);
42 return distribution(generator);
46 double sample_double()
49 boost::random::uniform_real_distribution<double> distribution(0.0, 1.0);
51 std::uniform_real_distribution<double> distribution(0.0, 1.0);
53 return distribution(generator);
58 boost::random::mt19937 generator;
61 boost::random::mt19937 initialize_boost_generator(std::vector<int>& seeds)
64 seeds = generate_random_seeds();
66 boost::random::seed_seq seq(seeds.begin(), seeds.end());
67 return boost::random::mt19937(seq);
70 std::default_random_engine generator;
73 std::default_random_engine initialize_std_generator(std::vector<int>& seeds)
76 seeds = generate_random_seeds();
78 std::seed_seq seq(seeds.begin(), seeds.end());
79 return std::default_random_engine(seq);
84 static std::vector<int> generate_random_seeds()
86 std::random_device rd{};
87 std::vector<int> seeds(5);
89 seeds.begin(), seeds.end(), [&]() { return static_cast<int>(rd()); });
99 for (
size_t i = vec.size() - 1; i > 0; --i) {
100 size_t j = rand_gen.sample_int(i + 1);
101 std::swap(vec[i], vec[j]);
Random-number generator used for reproducible randomized tie breaking.
Definition: random.hpp:22
Weighted dependence measures.
Definition: wdm.hpp:19