1.00.26
C++ Standard Airline IT Object Library
Toggle main menu visibility
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
13
#include <
stdair/basic/RandomGeneration.hpp
>
14
15
namespace
stdair
{
16
22
// //////////////////////////////////////////////////////////////////////
23
RandomGeneration::RandomGeneration
() :
_generator
(1) {
24
}
25
26
// //////////////////////////////////////////////////////////////////////
27
RandomGeneration::RandomGeneration
(
const
RandomSeed_T
& iSeed)
28
:
_generator
(iSeed) {
29
}
30
31
// //////////////////////////////////////////////////////////////////////
32
RandomGeneration::RandomGeneration
(
const
RandomGeneration
& iRandomGeneration)
33
: _generator (iRandomGeneration._generator) {
34
}
35
36
// //////////////////////////////////////////////////////////////////////
37
RandomGeneration::~RandomGeneration
() {
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
// //////////////////////////////////////////////////////////////////////
53
RealNumber_T
RandomGeneration::generateUniform01
() {
54
UniformGenerator_T
lGenerator (
_generator
, boost::uniform_real<>(0, 1));
55
return
lGenerator();
56
}
57
58
// //////////////////////////////////////////////////////////////////////
59
RealNumber_T
RandomGeneration::generateUniform
(
const
RealNumber_T
& iMinValue,
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
// //////////////////////////////////////////////////////////////////////
68
RealNumber_T
RandomGeneration::generateNormal
(
const
RealNumber_T
& mu,
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
// //////////////////////////////////////////////////////////////////////
86
RealNumber_T
RandomGeneration::generateExponential
(
const
RealNumber_T
& lambda) {
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
}
RandomGeneration.hpp
stdair
Handle on the StdAir library context.
Definition
BasChronometer.cpp:9
stdair::UniformGenerator_T
boost::variate_generator< BaseGenerator_T &, UniformDistribution_T > UniformGenerator_T
Definition
stdair_maths_types.hpp:55
stdair::RandomSeed_T
unsigned long int RandomSeed_T
Definition
stdair_maths_types.hpp:39
stdair::Probability_T
float Probability_T
Definition
stdair_maths_types.hpp:99
stdair::ExponentialGenerator_T
boost::variate_generator< BaseGenerator_T &, ExponentialDistribution_T > ExponentialGenerator_T
Definition
stdair_maths_types.hpp:74
stdair::RealNumber_T
double RealNumber_T
Definition
stdair_basic_types.hpp:70
stdair::ExponentialDistribution_T
boost::exponential_distribution ExponentialDistribution_T
Definition
stdair_maths_types.hpp:69
stdair::RandomGeneration
Class holding a random generator.
Definition
RandomGeneration.hpp:17
stdair::RandomGeneration::generateExponential
RealNumber_T generateExponential(const RealNumber_T &)
Definition
RandomGeneration.cpp:86
stdair::RandomGeneration::init
void init(const RandomSeed_T &)
Definition
RandomGeneration.cpp:41
stdair::RandomGeneration::~RandomGeneration
~RandomGeneration()
Definition
RandomGeneration.cpp:37
stdair::RandomGeneration::_generator
BaseGenerator_T _generator
Definition
RandomGeneration.hpp:112
stdair::RandomGeneration::generateUniform
RealNumber_T generateUniform(const RealNumber_T &, const RealNumber_T &)
Definition
RandomGeneration.cpp:59
stdair::RandomGeneration::generateNormal
RealNumber_T generateNormal(const RealNumber_T &, const RealNumber_T &)
Definition
RandomGeneration.cpp:68
stdair::RandomGeneration::generateUniform01
RealNumber_T generateUniform01()
Definition
RandomGeneration.cpp:53
stdair::RandomGeneration::describe
const std::string describe() const
Definition
RandomGeneration.cpp:46
stdair::RandomGeneration::RandomGeneration
RandomGeneration()
Definition
RandomGeneration.cpp:23
Generated for StdAir by
1.17.0