aGrUM  0.16.0
clusteredLayerGenerator.h
Go to the documentation of this file.
1 
30 #ifndef GUM_CLUSTERED_LAYER_GENERATOR_H
31 #define GUM_CLUSTERED_LAYER_GENERATOR_H
32 
33 #include <cstdlib>
34 #include <ctime>
35 #include <list>
36 #include <sstream>
37 #include <string>
38 #include <vector>
39 
41 
42 #include <agrum/PRM/PRMFactory.h>
45 
46 namespace gum {
47  namespace prm {
48 
56  template < typename GUM_SCALAR >
57  class ClusteredLayerGenerator : public PRMGenerator< GUM_SCALAR > {
58  public:
59  // ========================================================================
61  // ========================================================================
63 
71  virtual ~ClusteredLayerGenerator();
72 
74  // ========================================================================
76  // ========================================================================
78 
80  Size getDomainSize() const;
81 
83  void setDomainSize(Size s);
84 
87  Size getMaxParents() const;
88 
91  void setMaxParents(Size s);
92 
94  double getClusterRatio() const;
95 
97  void setClusterRatio(double ratio);
98 
106  void setLayers(
107  const std::vector< typename LayerGenerator< GUM_SCALAR >::LayerData >& v);
108 
109  std::vector< typename LayerGenerator< GUM_SCALAR >::LayerData >& getLayer();
110  const std::vector< typename LayerGenerator< GUM_SCALAR >::LayerData >&
111  getLayer() const;
112 
114  virtual PRM< GUM_SCALAR >* generate();
115 
117  private:
118  std::vector< typename LayerGenerator< GUM_SCALAR >::LayerData > __layers;
123 
124  struct MyData {
125  // interface name
126  std::string i;
127  std::vector< std::string > a;
128  std::vector< std::string > g;
129  std::string r;
130  std::vector< std::string > c;
131  };
132 
134 
136  const std::string& type,
137  std::vector< MyData >& l);
138 
139  void __generateClasses(
141  const std::string& type,
142  std::vector< typename ClusteredLayerGenerator::MyData >& l);
143 
144  void __generateCluster(
146  const std::string& type,
147  std::vector< typename ClusteredLayerGenerator::MyData >& l,
148  Size lvl,
150 
151  void __generateClass(
153  const std::string& type,
154  std::vector< typename ClusteredLayerGenerator::MyData >& l,
155  Size lvl,
157 
158  void __generateClassDag(
159  Size lvl,
160  DAG& dag,
162  std::vector< typename ClusteredLayerGenerator::MyData >& l);
163 
164  void __generateSystem(
165  PRMFactory< GUM_SCALAR >& factory,
166  std::vector< typename ClusteredLayerGenerator::MyData >& l);
167  };
168 
169  } /* namespace prm */
170 } /* namespace gum */
171 
173 
174 #endif /* GUM_CLUSTERED_LAYER_GENERATOR_H */
This class is the base class to all PRM generators.
Definition: PRMGenerator.h:49
HashTable< std::string, std::vector< std::string > *> __cluster_map
Copyright 2005-2019 Pierre-Henri WUILLEMIN et Christophe GONZALES (LIP6) {prenom.nom}_at_lip6.fr.
Size getMaxParents() const
Returns the max number of parents allowed for any attribute or aggregator.
<agrum/PRM/generator/clusteredLayerGenerator.h>
Copyright 2005-2019 Pierre-Henri WUILLEMIN et Christophe GONZALES (LIP6) {prenom.nom}_at_lip6.fr.
std::string __generateType(PRMFactory< GUM_SCALAR > &f)
void __generateSystem(PRMFactory< GUM_SCALAR > &factory, std::vector< typename ClusteredLayerGenerator::MyData > &l)
void setLayers(const std::vector< typename LayerGenerator< GUM_SCALAR >::LayerData > &v)
Defines the structure of each layers.
Copyright 2005-2019 Pierre-Henri WUILLEMIN et Christophe GONZALES (LIP6) {prenom.nom}_at_lip6.fr.
std::vector< typename LayerGenerator< GUM_SCALAR >::LayerData > & getLayer()
Getters and setters.
Copyright 2005-2019 Pierre-Henri WUILLEMIN et Christophe GONZALES (LIP6) {prenom.nom}_at_lip6.fr.
Definition: agrum.h:25
double getClusterRatio() const
Returns the odds of a given class to be replaced by a cluster.
The class for generic Hash Tables.
Definition: hashTable.h:679
ClusteredLayerGenerator & operator=(const ClusteredLayerGenerator &source)
Copy operator.
void __generateInterfaces(PRMFactory< GUM_SCALAR > &f, const std::string &type, std::vector< MyData > &l)
Copyright 2005-2019 Pierre-Henri WUILLEMIN et Christophe GONZALES (LIP6) {prenom.nom}_at_lip6.fr.
std::vector< typename LayerGenerator< GUM_SCALAR >::LayerData > __layers
Factory which builds a PRM<GUM_SCALAR>.
Definition: PRMType.h:50
void __generateClassDag(Size lvl, DAG &dag, Bijection< std::string, NodeId > &names, std::vector< typename ClusteredLayerGenerator::MyData > &l)
void __generateClasses(PRMFactory< GUM_SCALAR > &f, const std::string &type, std::vector< typename ClusteredLayerGenerator::MyData > &l)
virtual PRM< GUM_SCALAR > * generate()
Proceeds with the generation of the PRM<GUM_SCALAR>.
This class represents a Probabilistic Relational PRMSystem<GUM_SCALAR>.
Definition: PRM.h:66
void __generateClass(PRMFactory< GUM_SCALAR > &f, const std::string &type, std::vector< typename ClusteredLayerGenerator::MyData > &l, Size lvl, Set< std::string > &i)
void setClusterRatio(double ratio)
Define the odds of a given class to be replaced by a cluster.
void setDomainSize(Size s)
Set the domain size of generated types.
void setMaxParents(Size s)
Returns the max number of parents allowed for any attribute or aggregator.
std::size_t Size
In aGrUM, hashed values are unsigned long int.
Definition: types.h:48
void __generateCluster(PRMFactory< GUM_SCALAR > &f, const std::string &type, std::vector< typename ClusteredLayerGenerator::MyData > &l, Size lvl, Set< std::string > &i)
Base class for dag.
Definition: DAG.h:102
Size getDomainSize() const
Getters and setters.
Copyright 2005-2019 Pierre-Henri WUILLEMIN et Christophe GONZALES (LIP6) {prenom.nom}_at_lip6.fr.