34 #ifndef RGROUP_RANDOM_SAMPLE_H
35 #define RGROUP_RANDOM_SAMPLE_H
38 #include <boost/random.hpp>
39 #include <boost/random/uniform_int_distribution.hpp>
67 boost::uint64_t m_numPermutationsProcessed;
68 boost::minstd_rand m_rng;
69 std::vector<boost::random::uniform_int_distribution<>> m_distributions;
74 m_numPermutationsProcessed(),
77 for (
size_t i = 0; i < m_permutation.size(); ++i) {
78 m_distributions.push_back(
79 boost::random::uniform_int_distribution<>(0, m_permutation[i] - 1));
87 m_distributions.clear();
88 for (
size_t i = 0; i < m_permutationSizes.size(); ++i) {
89 m_distributions.push_back(boost::random::uniform_int_distribution<>(
90 0, m_permutationSizes[i] - 1));
93 m_numPermutationsProcessed = 0;
96 virtual const char *
type()
const {
return "RandomSampleStrategy"; }
100 for (
size_t i = 0; i < m_permutation.size(); ++i) {
101 m_permutation[i] = m_distributions[i](m_rng);
104 ++m_numPermutationsProcessed;
106 return m_permutation;
110 return m_numPermutationsProcessed;
113 virtual operator bool()
const {
return true; }
120 #ifdef RDK_USE_BOOST_SERIALIZATION
121 friend class boost::serialization::access;
123 template <
class Archive>
124 void save(Archive &ar,
const unsigned int )
const {
126 ar << boost::serialization::base_object<const EnumerationStrategyBase>(
128 ar << m_numPermutationsProcessed;
130 std::stringstream random;
132 std::string s = random.str();
136 template <
class Archive>
137 void load(Archive &ar,
const unsigned int ) {
139 ar >> boost::serialization::base_object<EnumerationStrategyBase>(*
this);
140 ar >> m_numPermutationsProcessed;
143 std::stringstream random(s);
147 m_distributions.clear();
148 for (
size_t i = 0; i < m_permutationSizes.size(); ++i) {
149 m_distributions.push_back(boost::random::uniform_int_distribution<>(
150 0, m_permutationSizes[i] - 1));
154 template <
class Archive>
155 void serialize(Archive &ar,
const unsigned int file_version) {
156 boost::serialization::split_member(ar, *
this, file_version);
162 #ifdef RDK_USE_BOOST_SERIALIZATION