aGrUM
0.20.3
a C++ library for (probabilistic) graphical models
utils_random.h
Go to the documentation of this file.
1
/**
2
*
3
* Copyright (c) 2005-2021 by Pierre-Henri WUILLEMIN(@LIP6) & Christophe GONZALES(@AMU)
4
* info_at_agrum_dot_org
5
*
6
* This library is free software: you can redistribute it and/or modify
7
* it under the terms of the GNU Lesser General Public License as published by
8
* the Free Software Foundation, either version 3 of the License, or
9
* (at your option) any later version.
10
*
11
* This library is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
* GNU Lesser General Public License for more details.
15
*
16
* You should have received a copy of the GNU Lesser General Public License
17
* along with this library. If not, see <http://www.gnu.org/licenses/>.
18
*
19
*/
20
21
22
/**
23
* @file
24
* @brief Contains usefull methods for random stuff.
25
*
26
* @author Vincent RENAUDINEAU and Pierre-Henri WUILLEMIN(@LIP6)
27
*/
28
29
#
ifndef
GUM_UTILS_RANDOM_H
30
#
define
GUM_UTILS_RANDOM_H
31
32
#
include
<
chrono
>
33
#
include
<
cstdlib
>
34
#
include
<
ctime
>
35
#
include
<
iostream
>
36
#
include
<
numeric
>
37
#
include
<
random
>
38
#
include
<
utility
>
39
#
include
<
vector
>
40
41
#
include
<
agrum
/
agrum
.
h
>
42
43
namespace
gum {
44
45
/// @ingroup utilities_group
46
/// @{
47
48
/**
49
* @brief Returns a random Idx between 0 and max-1 included.
50
* @return Returns a random Odxbetween 0 and max-1 included (i.e. a proba).
51
* By default, max=2
52
*/
53
Idx randomValue(
const
Size max = 2);
54
55
/**
56
* @brief Returns a random double between 0 and 1 included (i.e. a proba).
57
* @return Returns a random double between 0 and 1 included (i.e. a proba).
58
*/
59
double
randomProba();
60
61
/**
62
* @brief Return a random discrete distribution.
63
* @param n The number of modalities for the ditribution.
64
* @return Return a random discrete distribution.
65
* @tparam GUM_SCALAR The type used for representing probabilities.
66
*/
67
template
<
typename
GUM_SCALAR >
68
std::vector< GUM_SCALAR > randomDistribution(Size n);
69
70
/**
71
* @brief Returns the aGrUM's seed used by the std::generators.
72
* @return Returns the aGrUM's seed used by the std::generators.
73
*/
74
unsigned
int
randomGeneratorSeed();
75
76
/**
77
* @brief Initialize random generator seed.
78
*/
79
void
initRandom(
unsigned
int
seed = 0);
80
81
/**
82
* define a random_engine with correct seed
83
*/
84
std::default_random_engine getRandomGenerator(
unsigned
int
seed = 0);
85
86
/// @}
87
}
/* namespace gum */
88
89
#
ifndef
GUM_NO_INLINE
90
#
include
<
agrum
/
tools
/
core
/
utils_random_inl
.
h
>
91
#
endif
// GUM_NO_INLINE
92
93
// always include the template implementations
94
#
include
<
agrum
/
tools
/
core
/
utils_random_tpl
.
h
>
95
96
#
endif
/* GUM_UTILS_RANDOM_H */