aGrUM  0.20.3
a C++ library for (probabilistic) graphical models
multiDimNoisyORCompound.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 class for multiDimNoisyORCompound
25  *
26  * @author Pierre-Henri WUILLEMIN(@LIP6) & Christophe GONZALES(@AMU)
27  */
28 
29 #ifndef GUM_MULTI_DIM_NOISY_OR_COMPOUND_H
30 #define GUM_MULTI_DIM_NOISY_OR_COMPOUND_H
31 
32 #include <agrum/tools/multidim/ICIModels/multiDimICIModel.h>
33 
34 namespace gum {
35 
36  // ===========================================================================
37  // === GUM_MULTI_DIM_NOISYOR_COMPOU ===
38  // ===========================================================================
39  // clang-format off
40  /**
41  * @class MultiDimNoisyORCompound
42  * @headerfile multiDimNoisyORCompound.h <agrum/tools/multidim/ICIModels/multiDimNoisyORCompound.h>
43  * @ingroup multidim_group
44  *
45  * @brief Noisy OR representation
46  *
47  * Noisy-OR as described by Henrion (UAI-3, 1989, pp161-173)
48  *
49  * @warning
50  * - The first variable is assumed to be the NOISY-OR. The latter are
51  * the causes.
52  * - This code give probabilities for BINARY VARIABLES (other values are
53  * assumed to be of probability 0). But for optimization reason, we will
54  * never check if it is the case.
55  */
56  // clang-format on
57  template < typename GUM_SCALAR >
58 
60  public:
61  // ============================================================================
62  /// @name Constructors / Destructors
63  // ============================================================================
64  /// @{
65 
66  /// Default constructor.
67  MultiDimNoisyORCompound(GUM_SCALAR external_weight,
68  GUM_SCALAR default_weight = (GUM_SCALAR)1.0);
69 
70  MultiDimNoisyORCompound(const MultiDimNoisyORCompound< GUM_SCALAR >& from);
71 
72  /**
73  * Copy constructor using a bijection to swap variables from source.
74  *
75  * @param bij First variables are new variables, seconds are in from.
76  * @param from the copied instance
77  */
79  const Bijection< const DiscreteVariable*, const DiscreteVariable* >& bij,
80  const MultiDimNoisyORCompound< GUM_SCALAR >& from);
81 
82  /// Destructor.
83  virtual ~MultiDimNoisyORCompound();
84 
85  /// @}
86 
87  /**
88  * This method creates a clone of this object, withouth its content
89  * (including variable), you must use this method if you want to ensure
90  * that the generated object has the same type than the object containing
91  * the called newFactory()
92  * For example :
93  * MultiDimArray<double> y;
94  * MultiDimContainer<double>* x = y.newFactory();
95  * Then x is a MultiDimArray<double>*
96  *
97  * @warning you must desallocate by yourself the memory
98  * @return an empty clone of this object with the same type
99  */
100  virtual MultiDimContainer< GUM_SCALAR >* newFactory() const;
101 
102  // ############################################################################
103  /// @name Accessors / Modifiers
104  // ############################################################################
105  /// @{
106 
107  public:
108  virtual GUM_SCALAR get(const Instantiation& i) const;
109 
110  std::string toString() const;
111 
112  /// returns the real name of the multiDimArray
113  /** In aGrUM, all the types of multi-dimensional arrays/functionals have a
114  * name that describes what they are in reality. For instance, a table
115  * stored
116  * in extension is a "MultiDimArray", one that stores only non zero elements
117  * is a "MultiDimSparseArray", and so on. These names are unique for each
118  * type
119  * of implementation and is used by the system to determine which is the
120  * best
121  * functions to use, say, when we wish to use operators such as operator+ on
122  * two MultiDimImplementations */
123  virtual const std::string& name() const;
124 
125  /// @}
126  };
127 
128 
129 #ifndef GUM_NO_EXTERN_TEMPLATE_CLASS
130  extern template class MultiDimNoisyORCompound< double >;
131 #endif
132 
133  /// For friendly displaying the content of the array.
134  template < typename GUM_SCALAR >
136 
137 } /* namespace gum */
138 
139 #include <agrum/tools/multidim/ICIModels/multiDimNoisyORCompound_tpl.h>
140 
141 #endif /* GUM_MULTI_DIM_NOISY_OR_COMPOUND_H */
virtual const std::string & name() const
returns the real name of the multiDimArray
INLINE void emplace(Args &&... args)
Definition: set_tpl.h:643
MultiDimNoisyORCompound(const Bijection< const DiscreteVariable *, const DiscreteVariable * > &bij, const MultiDimNoisyORCompound< GUM_SCALAR > &from)
Copy constructor using a bijection to swap variables from source.
MultiDimNoisyORCompound(const MultiDimNoisyORCompound< GUM_SCALAR > &from)
Default constructor.
virtual MultiDimContainer< GUM_SCALAR > * newFactory() const
This method creates a clone of this object, withouth its content (including variable), you must use this method if you want to ensure that the generated object has the same type than the object containing the called newFactory() For example : MultiDimArray<double> y; MultiDimContainer<double>* x = y.newFactory(); Then x is a MultiDimArray<double>*.
std::string toString() const
returns the real name of the multiDimArray
std::ostream & operator<<(std::ostream &s, const MultiDimNoisyORCompound< GUM_SCALAR > &ag)
For friendly displaying the content of the array.
virtual ~MultiDimNoisyORCompound()
Destructor.
MultiDimNoisyORCompound(GUM_SCALAR external_weight, GUM_SCALAR default_weight=(GUM_SCALAR) 1.0)
Default constructor.
virtual GUM_SCALAR get(const Instantiation &i) const
returns the real name of the multiDimArray