Changeset 69 in pacpusframework for trunk/include/Pacpus/PacpusTools/math/rng.hpp
- Timestamp:
- Jan 10, 2013, 12:04:42 AM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/Pacpus/PacpusTools/math/rng.hpp
r66 r69 7 7 /// @version $Id$ 8 8 /// @copyright Copyright (c) UTC/CNRS Heudiasyc 2006 - 2013. All rights reserved. 9 /// @brief Brief description.9 /// @brief Random number generators. 10 10 /// 11 11 /// Detailed description. … … 22 22 namespace rng { 23 23 24 /*! 25 * \class normal_generator 26 * \brief This class is basic normal random number generator \n 27 * template id RealType describe number precision (float double ....)\n 28 * template id PRNG describe pseudo random number generator ( see boost random) 29 */ 30 template < class RealType , class PRNG > class normal_generator { 31 public : 32 /*! 33 * Default construtor 34 */ 35 normal_generator(): 36 engine(time(NULL)), 37 generator(engine,boost::normal_distribution<RealType>(0,1)) 38 {} 39 /*! 40 * Construtor 41 * \param dist : a normal distribution (see boost distributions) 42 */ 43 normal_generator(const boost::math::normal_distribution<RealType> & dist): 44 engine(time(NULL)), 45 generator(engine,boost::normal_distribution<RealType>(dist.mean(),dist.sigma())) 46 {} 47 /*! 48 * Construtor 49 * \param mean : mean of the normal distribution 50 * \param sigma : satndard deviation of the normal distribution 51 */ 52 normal_generator(const RealType & mean ,const RealType & sigma): 53 engine(time(NULL)), 54 generator(engine,boost::normal_distribution<RealType>(mean(),sigma())) 55 {} 56 57 /*! 58 * Get a random number 59 */ 60 RealType operator()() {return generator();} 61 62 /*! 63 * Set normal distribution 64 * \param dist : a normal distribution (see boost distributions) 65 */ 66 void distribution( const boost::math::normal_distribution<RealType> & dist) { 67 generator.dist= boost::normal_distribution<RealType>(dist.mean(),dist.standard_deviation()); 68 } 69 70 /*! 71 * Set normal distrubution 72 * \param mean : mean of the normal distribution 73 * \param sigma : satndard deviation of the normal distribution 74 */ 75 void distribution( const RealType & mean ,const RealType & sigma) { 76 generator.distribution()= boost::normal_distribution<RealType>(mean,sigma); 77 } 78 79 private : 80 81 /*! 82 * \brief pseudo random number generator 83 */ 84 PRNG engine; 85 86 /*! 87 * \brief the normal random number generator 88 */ 89 boost::variate_generator<PRNG, boost::normal_distribution<RealType> > generator; 24 /// This class is basic normal random number generator 25 /// 26 /// @tparam RealType describe number precision, e.g. @c float, @c double 27 /// @tparam PRNG describe pseudo random number generator 28 /// @see boost::random 29 template <class RealType, class PRNG> 30 class normal_generator 31 { 32 public: 33 /// Default construtor 34 normal_generator() 35 : engine(time(NULL)) 36 , generator(engine,boost::normal_distribution<RealType>(0,1)) 37 {} 38 39 /// Construtor 40 /// 41 /// @param dist a normal distribution 42 /// @see boost::distributions 43 normal_generator(const boost::math::normal_distribution<RealType> & dist) 44 : engine(time(NULL)) 45 , generator(engine,boost::normal_distribution<RealType>(dist.mean(),dist.sigma())) 46 {} 47 48 /// Constructor 49 /// 50 /// @param mean mean of the normal distribution 51 /// @param sigma standard deviation of the normal distribution 52 normal_generator(const RealType & mean ,const RealType & sigma) 53 : engine(time(NULL)) 54 , generator(engine,boost::normal_distribution<RealType>(mean(),sigma())) 55 {} 56 57 /// Get a random number 58 RealType operator()() 59 { 60 return generator(); 61 } 62 63 /// Set normal distribution 64 /// 65 /// @param dist : a normal distribution 66 /// @see boost::distributions 67 void distribution( const boost::math::normal_distribution<RealType> & dist) 68 { 69 generator.dist= boost::normal_distribution<RealType>(dist.mean(),dist.standard_deviation()); 70 } 71 72 /// Set normal distrubution 73 /// 74 /// @param mean : mean of the normal distribution 75 /// @param sigma : satndard deviation of the normal distribution 76 void distribution( const RealType & mean ,const RealType & sigma) { 77 generator.distribution()= boost::normal_distribution<RealType>(mean,sigma); 78 } 79 80 private: 81 /// pseudorandom number generator 82 PRNG engine; 83 84 /// the normal random number generator 85 boost::variate_generator<PRNG, boost::normal_distribution<RealType> > generator; 90 86 }; 91 87 92 typedef class normal_generator<double,boost::mt19937> normal_rng; 93 94 95 96 /*! 97 * \class uniform_generator 98 * \brief This class is basic uniform random number generator \n 99 * template id RealType describe number precision (float double ....)\n 100 * template id PRNG describe pseudo random number generator ( see boost random) 101 */ 102 template < class RealType , class PRNG > class uniform_generator { 103 104 public : 105 /*! 106 * Default construtor 107 */ 108 uniform_generator(): 109 engine(time(NULL)), 110 generator(engine, boost::uniform_real<RealType>(0,1)) 111 {} 112 /*! 113 * Construtor 114 * \param dist : a uniform distribution (see boost distributions) 115 */ 116 uniform_generator(const boost::math::uniform_distribution<RealType> & dist): 117 engine(time(NULL)), 118 generator(engine, boost::uniform_real<RealType>(dist.lower(),dist.upper())) 119 {} 120 /*! 121 * Construtor 122 * \param lower : the lower value of the uniform distribution 123 * \param upper : the upper value of the uniform distribution 124 */ 125 uniform_generator(const RealType & lower , const RealType & upper): 126 engine(time(NULL)), 127 generator(engine, boost::uniform_real<RealType>(lower,upper)) 128 {} 129 130 /*! 131 * Get a random number 132 */ 133 RealType operator()() {return generator();} 134 /*! 135 * Set uniform distribution 136 * \param dist : a normal distribution (see boost distributions) 137 */ 138 void distribution( const boost::math::uniform_distribution<RealType> & dist) { 139 generator.dist()= boost::uniform_real<RealType>(dist.lower(),dist.upper()); 140 } 141 /*! 142 * Set uniform distribution 143 * \param lower : the lower value of the uniform distribution 144 * \param upper : the upper value of the uniform distribution 145 */ 146 void distribution( const RealType & lower , const RealType & upper) { 147 generator.dist()= boost::uniform_real<RealType>(lower,upper); 148 } 149 150 private : 151 /*! 152 * \brief pseudo random number generator 153 */ 154 PRNG engine; 155 /*! 156 * \brief the uniform random number generator 157 */ 158 boost::variate_generator<PRNG, boost::uniform_real<RealType> > generator; 88 /// Defines normal random number generator as a Mersenne Twister 19937 with double-precision numbers 89 typedef class normal_generator<double, boost::mt19937> normal_rng; 90 91 /// This class is basic uniform random number generator. 92 /// 93 /// @tparam RealType describe number precision, e.g. @c float, @c double 94 /// @tparam PRNG describe pseudo random number generator 95 /// @see boost::random 96 template <class RealType, class PRNG> 97 class uniform_generator 98 { 99 public: 100 /// Default construtor 101 uniform_generator() 102 : engine(time(NULL)) 103 , generator(engine, boost::uniform_real<RealType>(0,1)) 104 {} 105 106 /// Construtor 107 /// @param dist a uniform distribution 108 /// @see boost::distributions 109 uniform_generator(const boost::math::uniform_distribution<RealType> & dist) 110 : engine(time(NULL)) 111 , generator(engine, boost::uniform_real<RealType>(dist.lower(),dist.upper())) 112 {} 113 114 /// Constructor 115 /// 116 /// @param lower the lower value of the uniform distribution 117 /// @param upper the upper value of the uniform distribution 118 uniform_generator(const RealType & lower , const RealType & upper) 119 : engine(time(NULL)) 120 , generator(engine, boost::uniform_real<RealType>(lower,upper)) 121 {} 122 123 /// Get a random number 124 RealType operator()() 125 { 126 return generator(); 127 } 128 129 /// Set uniform distribution 130 /// 131 /// @param dist a normal distribution 132 /// @see boost::distributions 133 void distribution( const boost::math::uniform_distribution<RealType> & dist) 134 { 135 generator.dist()= boost::uniform_real<RealType>(dist.lower(),dist.upper()); 136 } 137 138 /// Set uniform distribution 139 /// 140 /// @param lower the lower value of the uniform distribution 141 /// @param upper the upper value of the uniform distribution 142 void distribution( const RealType & lower , const RealType & upper) 143 { 144 generator.dist()= boost::uniform_real<RealType>(lower,upper); 145 } 146 147 private: 148 /// @brief pseudo random number generator 149 PRNG engine; 150 /// @brief the uniform random number generator 151 boost::variate_generator<PRNG, boost::uniform_real<RealType> > generator; 159 152 }; 160 153 161 typedef class uniform_generator<double,boost::mt19937> uniform_rng; 162 163 164 /*! 165 * \class traingle_generator 166 * \brief This class is basic triangular random number generator \n 167 * template id RealType describe number precision (float double ....)\n 168 * template id PRNG describe pseudo random number generator ( see boost random) 169 */ 170 template < class RealType , class PRNG > class triangle_generator { 171 172 public : 173 /*! 174 * Default construtor 175 */ 176 triangle_generator(): 177 engine(time(NULL)), 178 generator(engine, boost::triangle_distribution<RealType>(-1,0,1)) 179 {} 180 /*! 181 * Construtor 182 * \param dist : a traingle distribution (see boost distributions) 183 */ 184 triangle_generator(const boost::math::triangular_distribution<RealType> & dist): 185 engine(time(NULL)), 186 generator(engine, boost::triangle_distribution<RealType>(dist.lower(),dist.upper())) 187 {} 188 /*! 189 * Constructor : 190 * \param lower : the lower value of the uniform distribution 191 * \param mode : the mode value of the uniform distribution 192 * \param upper : the upper value of the uniform distribution 193 */ 194 triangle_generator(const RealType & lower , const RealType & mode ,const RealType & upper): 195 engine(time(NULL)), 196 generator(engine, boost::triangle_distribution<RealType>(lower,mode,upper)) 197 {} 198 /*! 199 * Get a random number 200 */ 201 RealType operator()() {return generator();} 202 /*! 203 * Set triangle distribution 204 * \param dist : a normal distribution (see boost distributions) 205 */ 206 void distribution( const boost::math::triangular_distribution<RealType> & dist) { 207 generator.dist()= boost::triangle_distribution<RealType>(dist.lower(),dist.mode(),dist.upper()); 208 } 209 /*! 210 * Set triangle distribution 211 * \param lower : the lower value of the uniform distribution 212 * \param mode : the mode value of the uniform distribution 213 * \param upper : the upper value of the uniform distribution 214 */ 215 void distribution( const RealType & lower ,const RealType & mode ,const RealType & upper) { 216 generator.dist()= boost::triangle_distribution<RealType>(lower,mode,upper); 217 } 218 219 private : 220 /*! 221 * \brief pseudo random number generator 222 */ 223 PRNG engine; 224 /*! 225 * \brief the triangle random number generator 226 */ 227 boost::variate_generator<PRNG, boost::triangle_distribution<RealType> > generator; 154 /// Defines uniform random number generator as a Mersenne Twister 19937 with double-precision numbers 155 typedef class uniform_generator<double, boost::mt19937> uniform_rng; 156 157 /// This class is basic triangular random number generator 158 /// 159 /// @tparam RealType describe number precision, e.g. @c float, @c double 160 /// @tparam PRNG describe pseudo random number generator ( see boost random) 161 template <class RealType, class PRNG> 162 class triangle_generator 163 { 164 public: 165 /// Default construtor 166 triangle_generator() 167 : engine(time(NULL)) 168 , generator(engine, boost::triangle_distribution<RealType>(-1,0,1)) 169 {} 170 171 /// Construtor 172 /// 173 /// @param dist : a traingle distribution 174 /// @see boost distributions 175 triangle_generator(const boost::math::triangular_distribution<RealType> & dist) 176 : engine(time(NULL)) 177 ,generator(engine, boost::triangle_distribution<RealType>(dist.lower(),dist.upper())) 178 {} 179 180 /// Constructor 181 /// 182 /// @param lower the lower value of the uniform distribution 183 /// @param mode the mode value of the uniform distribution 184 /// @param upper the upper value of the uniform distribution 185 triangle_generator(const RealType & lower, const RealType & mode ,const RealType & upper) 186 : engine(time(NULL)) 187 , generator(engine, boost::triangle_distribution<RealType>(lower,mode,upper)) 188 {} 189 190 /// Get a random number 191 RealType operator()() 192 { 193 return generator(); 194 } 195 196 /// Set triangle distribution 197 /// @param dist a normal distribution 198 /// @see boost::distributions 199 void distribution( const boost::math::triangular_distribution<RealType> & dist) 200 { 201 generator.dist()= boost::triangle_distribution<RealType>(dist.lower(),dist.mode(),dist.upper()); 202 } 203 204 /// Set triangle distribution 205 /// @param lower the lower value of the uniform distribution 206 /// @param mode the mode value of the uniform distribution 207 /// @param upper the upper value of the uniform distribution 208 void distribution( const RealType & lower, const RealType & mode ,const RealType & upper) 209 { 210 generator.dist()= boost::triangle_distribution<RealType>(lower,mode,upper); 211 } 212 213 private : 214 /// pseudorandom number generator 215 PRNG engine; 216 /// the triangle random number generator 217 boost::variate_generator<PRNG, boost::triangle_distribution<RealType> > generator; 228 218 }; 229 219 230 typedef class triangle_generator<double, boost::mt19937> triangle_rng;220 typedef class triangle_generator<double, boost::mt19937> triangle_rng; 231 221 232 222 } // namespace rng
Note:
See TracChangeset
for help on using the changeset viewer.