StdAir Logo  1.00.10
C++ Standard Airline IT Object Library
RandomGeneration.cpp
Go to the documentation of this file.
1 // //////////////////////////////////////////////////////////////////////
2 // Import section
3 // //////////////////////////////////////////////////////////////////////
4 // STL
5 #include <cassert>
6 #include <sstream>
7 // Boost
8 #include <boost/version.hpp>
9 #if BOOST_VERSION_MACRO >= 103500
10 #include <boost/math/distributions/normal.hpp>
11 #endif // BOOST_VERSION_MACRO >= 103500
12 // StdAir
14 
15 namespace stdair {
16 
22  // //////////////////////////////////////////////////////////////////////
24  }
25 
26  // //////////////////////////////////////////////////////////////////////
28  : _generator (iSeed) {
29  }
30 
31  // //////////////////////////////////////////////////////////////////////
32  RandomGeneration::RandomGeneration (const RandomGeneration& iRandomGeneration)
33  : _generator (iRandomGeneration._generator) {
34  }
35 
36  // //////////////////////////////////////////////////////////////////////
38  }
39 
40  // //////////////////////////////////////////////////////////////////////
41  void RandomGeneration::init (const RandomSeed_T& iSeed) {
42  _generator.seed (iSeed);
43  }
44 
45  // //////////////////////////////////////////////////////////////////////
46  const std::string RandomGeneration::describe() const {
47  std::ostringstream oStr;
48  oStr << _generator;
49  return oStr.str();
50  }
51 
52  // //////////////////////////////////////////////////////////////////////
54  UniformGenerator_T lGenerator (_generator, boost::uniform_real<>(0, 1));
55  return lGenerator();
56  }
57 
58  // //////////////////////////////////////////////////////////////////////
60  const RealNumber_T& iMaxValue) {
61  const Probability_T lVariateUnif01 = generateUniform01();
62  const RealNumber_T lVariateUnif =
63  iMinValue + lVariateUnif01 * (iMaxValue - iMinValue);
64  return lVariateUnif;
65  }
66 
67  // //////////////////////////////////////////////////////////////////////
69  const RealNumber_T& sigma) {
70 
71 #if BOOST_VERSION_MACRO >= 103500
72  const Probability_T lVariateUnif = generateUniform01();
73  const boost::math::normal lNormal (mu, sigma);
74  const RealNumber_T lRealNumberOfRequestsToBeGenerated =
75  boost::math::quantile (lNormal, lVariateUnif);
76 #else // BOOST_VERSION_MACRO >= 103500
77  // TODO: rely on GSL when Boost version smaller than 1.35
78  const RealNumber_T lRealNumberOfRequestsToBeGenerated = 0.0;
79 #endif // BOOST_VERSION_MACRO >= 103500
80 
81  return lRealNumberOfRequestsToBeGenerated;
82 
83  }
84 
85  // //////////////////////////////////////////////////////////////////////
91  ExponentialDistribution_T lExponentialDistribution (lambda);
92 
94  ExponentialGenerator_T lExponentialDistributionGenerator (_generator,
95  lExponentialDistribution);
96 
97  // Generate a random variate, expressed in (fractional) day
98  const RealNumber_T lExponentialVariateInDays =
99  lExponentialDistributionGenerator();
100 
101  return lExponentialVariateInDays;
102  }
103 
104 }
stdair::RandomGeneration::generateExponential
RealNumber_T generateExponential(const RealNumber_T &)
Definition: RandomGeneration.cpp:86
stdair::ExponentialDistribution_T
boost::exponential_distribution ExponentialDistribution_T
Definition: stdair_maths_types.hpp:69
stdair::RandomGeneration::describe
const std::string describe() const
Definition: RandomGeneration.cpp:46
stdair::RandomGeneration::generateNormal
RealNumber_T generateNormal(const RealNumber_T &, const RealNumber_T &)
Definition: RandomGeneration.cpp:68
RandomGeneration.hpp
stdair::RandomGeneration::generateUniform
RealNumber_T generateUniform(const RealNumber_T &, const RealNumber_T &)
Definition: RandomGeneration.cpp:59
stdair
Handle on the StdAir library context.
Definition: BasChronometer.cpp:9
stdair::RandomGeneration::generateUniform01
RealNumber_T generateUniform01()
Definition: RandomGeneration.cpp:53
stdair::ExponentialGenerator_T
boost::variate_generator< BaseGenerator_T &, ExponentialDistribution_T > ExponentialGenerator_T
Definition: stdair_maths_types.hpp:74
stdair::RandomSeed_T
unsigned long int RandomSeed_T
Definition: stdair_maths_types.hpp:39
stdair::RealNumber_T
double RealNumber_T
Definition: stdair_basic_types.hpp:70
stdair::RandomGeneration::~RandomGeneration
~RandomGeneration()
Definition: RandomGeneration.cpp:37
stdair::UniformGenerator_T
boost::variate_generator< BaseGenerator_T &, UniformDistribution_T > UniformGenerator_T
Definition: stdair_maths_types.hpp:55
stdair::RandomGeneration::_generator
BaseGenerator_T _generator
Definition: RandomGeneration.hpp:112
stdair::Probability_T
float Probability_T
Definition: stdair_maths_types.hpp:99
stdair::RandomGeneration::RandomGeneration
RandomGeneration()
Definition: RandomGeneration.cpp:23
stdair::RandomGeneration::init
void init(const RandomSeed_T &)
Definition: RandomGeneration.cpp:41
stdair::RandomGeneration
Class holding a random generator.
Definition: RandomGeneration.hpp:17