aGrUM  0.20.3
a C++ library for (probabilistic) graphical models
utils_prm.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 #ifndef GUM_UTILS_PRM_H
23 #define GUM_UTILS_PRM_H
24 
25 #include <string>
26 #include <vector>
27 
28 #include <agrum/agrum.h>
29 
30 #include <agrum/tools/multidim/ICIModels/multiDimNoisyORCompound.h>
31 #include <agrum/tools/multidim/ICIModels/multiDimNoisyORNet.h>
32 #include <agrum/tools/multidim/aggregators/multiDimAggregator.h>
33 #include <agrum/tools/multidim/implementations/multiDimBijArray.h>
34 #include <agrum/tools/multidim/implementations/multiDimBucket.h>
35 #include <agrum/tools/multidim/implementations/multiDimSparse.h>
36 #include <agrum/tools/multidim/potential.h>
37 #include <agrum/tools/multidim/utils/operators/multiDimCombinationDefault.h>
38 #include <agrum/tools/multidim/utils/operators/projections4MultiDim.h>
39 
40 #include <agrum/PRM/elements/PRMObject.h>
41 
42 namespace gum {
43  namespace prm {
44 
45  /// PRMType for real numbers
46  typedef float prm_float;
47 
48  /// Decompose a string in a vector of strings using "." as separators.
49  void decomposePath(const std::string& path, std::vector< std::string >& v);
50 
51  /**
52  * @brief Returns a copy of a Potential after applying a bijection over the
53  *variables in source.
54  * This copies the Potential source in a new Potential by permuting all
55  *variables in source with respect to bij.
56  *
57  * @warning This method in most case creates the new Potential using a
58  *gum::MultiDimBijArray, this means that the created Potential holds a
59  *reference over source, so do not delete source if you still need the created
60  *potential.
61  *
62  * @param bij A Bijection of DiscreteVariable where firsts are variables in
63  *source and seconds variables added in the returned Potential.
64  * @param source The copied Potential.
65  * @return a pointer over a Potential which is a copy of source.
66  * @throw FatalError raised if an unknown MultiDimImplementation is
67  *encountered.
68  */
69  template < typename GUM_SCALAR >
72  const Potential< GUM_SCALAR >& source);
73 
74  template < typename GUM_SCALAR >
76  const Potential< GUM_SCALAR >& t2);
77  /**
78  * @brief Proceeds with the elimination of var in pool.
79  * @param var The variable eliminated from every potentials in pool.
80  * @param pool A pool of potentials in which the elimination of var is done.
81  * @param trash All create potentials are inserted in this set, useful to
82  * delete later.
83  */
84  template < typename GUM_SCALAR >
85  void eliminateNode(const DiscreteVariable* var,
86  Set< Potential< GUM_SCALAR >* >& pool,
87  Set< Potential< GUM_SCALAR >* >& trash);
88 
89  template < typename GUM_SCALAR >
90  void eliminateNodes(const std::vector< const DiscreteVariable* >& elim_order,
91  Set< Potential< GUM_SCALAR >* >& pool,
92  Set< Potential< GUM_SCALAR >* >& trash);
93 
94  /**
95  * @brief Returns the next value of an unique counter for PRM's node id.
96  * @return Returns the next value of an unique counter for PRM's node id.
97  */
99 
100  } /* namespace prm */
101 } /* namespace gum */
102 
103 #include <agrum/PRM/utils_prm_tpl.h>
104 
105 #endif // GUM_UTILS_PRM_H
INLINE void emplace(Args &&... args)
Definition: set_tpl.h:643
float prm_float
PRMType for real numbers.
Definition: utils_prm.h:46
ParamScopeData(const std::string &s, const PRMReferenceSlot< GUM_SCALAR > &ref, Idx d)
Potential< GUM_SCALAR > * copyPotential(const Bijection< const DiscreteVariable *, const DiscreteVariable * > &bij, const Potential< GUM_SCALAR > &source)
Returns a copy of a Potential after applying a bijection over the variables in source.
Definition: utils_prm_tpl.h:29
void eliminateNode(const DiscreteVariable *var, Set< Potential< GUM_SCALAR > * > &pool, Set< Potential< GUM_SCALAR > * > &trash)
Proceeds with the elimination of var in pool.
void eliminateNodes(const std::vector< const DiscreteVariable * > &elim_order, Set< Potential< GUM_SCALAR > * > &pool, Set< Potential< GUM_SCALAR > * > &trash)
NodeId nextNodeId()
Returns the next value of an unique counter for PRM&#39;s node id.
Definition: utils_prm.cpp:64
Potential< GUM_SCALAR > * multPotential(const Potential< GUM_SCALAR > &t1, const Potential< GUM_SCALAR > &t2)
Definition: utils_prm_tpl.h:96