aGrUM  0.20.3
a C++ library for (probabilistic) graphical models
importanceSampling.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 This file contains Importance sampling class definition.
25  *
26  * @author Paul ALAM & Pierre-Henri WUILLEMIN(@LIP6)
27  */
28 
29 
30 #ifndef GUM_IMPORTANCE_INFERENCE_H
31 #define GUM_IMPORTANCE_INFERENCE_H
32 
33 #include <agrum/BN/inference/tools/samplingInference.h>
34 
35 namespace gum {
36 
37  /**
38  * @class ImportanceInference importanceInference.h
39  *<agrum/BN/inference/importanceInference.h>
40  * @brief class for making Importance sampling inference in Bayesian networks.
41  * @ingroup bn_approximation
42  *
43  * This class overrides pure function declared in the inherited class
44  *ApproximateInference.
45  * It defines the way Importance sampling draws a sample.
46  *
47  */
48 
49 
50  template < typename GUM_SCALAR >
52  public:
53  /**
54  * Default constructor
55  */
56  explicit ImportanceSampling(const IBayesNet< GUM_SCALAR >* bn);
57 
58 
59  /**
60  * Destructor
61  */
63 
64  protected:
65  /// draws a defined number of samples without updating the estimators
66  Instantiation burnIn_() override;
67 
68 
69  /// draws a sample according to Importance sampling
70  /**
71  * @param w the weight of sample being generated
72  * @param prev the previous sample generated
73  * @param bn the Bayesian network containing the evidence
74  * @param hardEvNodes hard evidence nodes
75  * @param hardEv hard evidences values
76  *
77  * uses the Importance sampling method to generate a new sample using an
78  * evidence-mutilated Bayesian network.
79  * Each node added to the sample (in a topological order) has a weight.
80  * The sample's weight is the product of all weights.
81  */
83 
84 
85  /// modifies the cpts of a BN in order to tend to uniform distributions
86  /**
87  * @param bn a BN fragment on which we wish to modify CPTs
88  * @param epsilon a default parameter used to scale the modification of the
89  * distributions
90  *
91  * For every CPT in the BN, epsilon is added to each potential value before
92  * normalizing
93  *
94  */
95  void unsharpenBN_(BayesNetFragment< GUM_SCALAR >* bn, float epsilon);
96 
97  /// fired when Bayesian network is contextualized
98  /**
99  * @param bn the contextualized BayesNetFragment
100  * @param targets inference target variables
101  * @param hardEvNodes hard evidence nodes
102  * @param hardEv hard evidences values
103  *
104  * Adds the target variables, erases the evidence variables and unsharpens the
105  * BN.
106  *
107  */
108  void onContextualize_(BayesNetFragment< GUM_SCALAR >* bn) override;
109  };
110 
111 
112 #ifndef GUM_NO_EXTERN_TEMPLATE_CLASS
113  extern template class ImportanceSampling< double >;
114 #endif
115 } // namespace gum
116 
117 #include <agrum/BN/inference/importanceSampling_tpl.h>
118 
119 #endif
~ImportanceSampling() override
Destructor.
ImportanceSampling(const IBayesNet< GUM_SCALAR > *bn)
Default constructor.
INLINE void emplace(Args &&... args)
Definition: set_tpl.h:643
void unsharpenBN_(BayesNetFragment< GUM_SCALAR > *bn, float epsilon)
modifies the cpts of a BN in order to tend to uniform distributions
Instantiation draw_(GUM_SCALAR *w, Instantiation prev) override
draws a sample according to Importance sampling
void onContextualize_(BayesNetFragment< GUM_SCALAR > *bn) override
fired when Bayesian network is contextualized
Instantiation burnIn_() override
draws a defined number of samples without updating the estimators