aGrUM
0.20.3
a C++ library for (probabilistic) graphical models
simpleCPTDisturber_tpl.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
/** @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
() :
ICPTDisturber
<
GUM_SCALAR
>() {
35
GUM_CONSTRUCTOR
(
SimpleCPTDisturber
);
36
}
37
38
// Destructor.
39
template
<
typename
GUM_SCALAR
>
40
INLINE
SimpleCPTDisturber
<
GUM_SCALAR
>::~
SimpleCPTDisturber
() {
41
GUM_DESTRUCTOR
(
SimpleCPTDisturber
);
42
}
43
44
// Generates a CPT using GUM_SCALAR.
45
// @param varID The variable id of the CPT owner.
46
// @param cpt A reference on the CPT to fill.
47
48
template
<
typename
GUM_SCALAR
>
49
void
SimpleCPTDisturber
<
GUM_SCALAR
>::
disturbReducCPT
(
NodeId
node
,
50
BayesNet
<
GUM_SCALAR
>&
bayesNet
,
51
Potential
<
GUM_SCALAR
>&
src
,
52
Potential
<
GUM_SCALAR
>&
marg
) {
53
Instantiation
i_src
(
src
);
54
Instantiation
i_dest
(
bayesNet
.
cpt
(
node
));
55
Instantiation
i_marg
(
marg
);
56
57
for
(
i_dest
.
setFirst
(); !
i_dest
.
end
(); ++
i_dest
) {
58
GUM_SCALAR
potval
= 0;
59
60
i_src
.
setVals
(
i_dest
);
61
for
(
i_marg
.
setFirst
(); !
i_marg
.
end
(); ++
i_marg
) {
62
i_src
.
setVals
(
i_marg
);
63
potval
+=
src
.
get
(
i_src
) *
marg
.
get
(
i_marg
);
64
}
65
66
bayesNet
.
cpt
(
node
).
set
(
i_dest
,
potval
);
67
}
68
69
bayesNet
.
cpt
(
node
).
normalizeAsCPT
();
70
}
71
72
template
<
typename
GUM_SCALAR
>
73
void
SimpleCPTDisturber
<
GUM_SCALAR
>::
disturbAugmCPT
(
NodeId
node
,
74
BayesNet
<
GUM_SCALAR
>&
bayesNet
,
75
Potential
<
GUM_SCALAR
>&
src
,
76
GUM_SCALAR
variation
) {
77
Instantiation
i
(
bayesNet
.
cpt
(
node
));
78
79
for
(
i
.
setFirst
(); !
i
.
end
(); ++
i
)
80
bayesNet
.
cpt
(
node
).
set
(
i
,
src
.
get
(
i
) +
GUM_SCALAR
(
randomProba
()) *
variation
);
81
82
bayesNet
.
cpt
(
node
).
normalizeAsCPT
();
83
}
84
85
}
/* namespace gum */
gum::Set::emplace
INLINE void emplace(Args &&... args)
Definition:
set_tpl.h:643