aGrUM
0.20.2
a C++ library for (probabilistic) graphical models
simpleCPTDisturber_tpl.h
Go to the documentation of this file.
1
/**
2
*
3
* Copyright 2005-2020 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
/** @file
23
* @brief Source implementation of SimpleCPTDisturber.
24
*
25
* @author Pierre-Henri WUILLEMIN(@LIP6) and Ariele-Paolo MAESANO
26
*
27
*/
28
#
include
<
agrum
/
BN
/
generator
/
simpleCPTDisturber
.
h
>
29
30
namespace
gum
{
31
32
// Default constructor.
33
template
<
typename
GUM_SCALAR >
34
INLINE SimpleCPTDisturber<
GUM_SCALAR
>::
SimpleCPTDisturber
() :
35
ICPTDisturber
<
GUM_SCALAR
>() {
36
GUM_CONSTRUCTOR
(
SimpleCPTDisturber
);
37
}
38
39
// Destructor.
40
template
<
typename
GUM_SCALAR
>
41
INLINE
SimpleCPTDisturber
<
GUM_SCALAR
>::~
SimpleCPTDisturber
() {
42
GUM_DESTRUCTOR
(
SimpleCPTDisturber
);
43
}
44
45
// Generates a CPT using GUM_SCALAR.
46
// @param varID The variable id of the CPT owner.
47
// @param cpt A reference on the CPT to fill.
48
49
template
<
typename
GUM_SCALAR
>
50
void
SimpleCPTDisturber
<
GUM_SCALAR
>::
disturbReducCPT
(
51
NodeId
node
,
52
BayesNet
<
GUM_SCALAR
>&
bayesNet
,
53
Potential
<
GUM_SCALAR
>&
src
,
54
Potential
<
GUM_SCALAR
>&
marg
) {
55
Instantiation
i_src
(
src
);
56
Instantiation
i_dest
(
bayesNet
.
cpt
(
node
));
57
Instantiation
i_marg
(
marg
);
58
59
for
(
i_dest
.
setFirst
(); !
i_dest
.
end
(); ++
i_dest
) {
60
GUM_SCALAR
potval
= 0;
61
62
i_src
.
setVals
(
i_dest
);
63
for
(
i_marg
.
setFirst
(); !
i_marg
.
end
(); ++
i_marg
) {
64
i_src
.
setVals
(
i_marg
);
65
potval
+=
src
.
get
(
i_src
) *
marg
.
get
(
i_marg
);
66
}
67
68
bayesNet
.
cpt
(
node
).
set
(
i_dest
,
potval
);
69
}
70
71
bayesNet
.
cpt
(
node
).
normalizeAsCPT
();
72
}
73
74
template
<
typename
GUM_SCALAR
>
75
void
SimpleCPTDisturber
<
GUM_SCALAR
>::
disturbAugmCPT
(
76
NodeId
node
,
77
BayesNet
<
GUM_SCALAR
>&
bayesNet
,
78
Potential
<
GUM_SCALAR
>&
src
,
79
GUM_SCALAR
variation
) {
80
Instantiation
i
(
bayesNet
.
cpt
(
node
));
81
82
for
(
i
.
setFirst
(); !
i
.
end
(); ++
i
)
83
bayesNet
.
cpt
(
node
).
set
(
i
,
84
src
.
get
(
i
) +
GUM_SCALAR
(
randomProba
()) *
variation
);
85
86
bayesNet
.
cpt
(
node
).
normalizeAsCPT
();
87
}
88
89
}
/* namespace gum */
gum::Set::emplace
INLINE void emplace(Args &&... args)
Definition:
set_tpl.h:669