StdAir Logo  1.00.0
C++ Standard Airline IT Object Library
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
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 >= 103500
10 #include <boost/math/distributions/normal.hpp>
11 #endif // BOOST_VERSION >= 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 >= 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 >= 103500
77  // TODO: rely on GSL when Boost version smaller than 1.35
78  const RealNumber_T lRealNumberOfRequestsToBeGenerated = 0.0;
79 #endif // BOOST_VERSION >= 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 }