StdAir Logo  1.00.19
C++ Standard Airline IT Object Library
Loading...
Searching...
No Matches
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
15namespace stdair {
16
22 // //////////////////////////////////////////////////////////////////////
25
26 // //////////////////////////////////////////////////////////////////////
30
31 // //////////////////////////////////////////////////////////////////////
33 : _generator (iRandomGeneration._generator) {
34 }
35
36 // //////////////////////////////////////////////////////////////////////
39
40 // //////////////////////////////////////////////////////////////////////
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}
Handle on the StdAir library context.
boost::variate_generator< BaseGenerator_T &, UniformDistribution_T > UniformGenerator_T
unsigned long int RandomSeed_T
boost::variate_generator< BaseGenerator_T &, ExponentialDistribution_T > ExponentialGenerator_T
double RealNumber_T
boost::exponential_distribution ExponentialDistribution_T
Class holding a random generator.
RealNumber_T generateExponential(const RealNumber_T &)
void init(const RandomSeed_T &)
RealNumber_T generateUniform(const RealNumber_T &, const RealNumber_T &)
RealNumber_T generateNormal(const RealNumber_T &, const RealNumber_T &)
const std::string describe() const