aGrUM  0.20.3
a C++ library for (probabilistic) graphical models
gum::prm::ClusteredLayerGenerator< GUM_SCALAR > Class Template Reference

<agrum/PRM/generator/clusteredLayerGenerator.h> More...

#include <clusteredLayerGenerator.h>

+ Inheritance diagram for gum::prm::ClusteredLayerGenerator< GUM_SCALAR >:
+ Collaboration diagram for gum::prm::ClusteredLayerGenerator< GUM_SCALAR >:

Public Member Functions

Constructors and destructor.
 ClusteredLayerGenerator ()
 Default constructor. More...
 
 ClusteredLayerGenerator (const ClusteredLayerGenerator &source)
 Copy constructor. More...
 
ClusteredLayerGeneratoroperator= (const ClusteredLayerGenerator &source)
 Copy operator. More...
 
virtual ~ClusteredLayerGenerator ()
 Destructor. More...
 
Size getDomainSize () const
 Getters and setters. More...
 
void setDomainSize (Size s)
 Set the domain size of generated types. More...
 
Size getMaxParents () const
 Returns the max number of parents allowed for any attribute or aggregator. More...
 
void setMaxParents (Size s)
 Returns the max number of parents allowed for any attribute or aggregator. More...
 
double getClusterRatio () const
 Returns the odds of a given class to be replaced by a cluster. More...
 
void setClusterRatio (double ratio)
 Define the odds of a given class to be replaced by a cluster. More...
 
void setLayers (const std::vector< typename LayerGenerator< GUM_SCALAR >::LayerData > &v)
 Defines the structure of each layers. More...
 
std::vector< typename LayerGenerator< GUM_SCALAR >::LayerData > & getLayer ()
 Getters and setters. More...
 
const std::vector< typename LayerGenerator< GUM_SCALAR >::LayerData > & getLayer () const
 Getters and setters. More...
 
virtual PRM< GUM_SCALAR > * generate ()
 Proceeds with the generation of the PRM<GUM_SCALAR>. More...
 
void setNameGenerator (const NameGenerator &name_gen)
 Getters and setters. More...
 
const NameGeneratorgetNameGenerator () const
 Returns the NameGenerator used by this generator. More...
 

Protected Attributes

NameGenerator name_gen_
 The name generator used by this class. More...
 

Classes

struct  MyData
 

Detailed Description

template<typename GUM_SCALAR>
class gum::prm::ClusteredLayerGenerator< GUM_SCALAR >

<agrum/PRM/generator/clusteredLayerGenerator.h>

This class generates PRMs with a clustered layer structure.

Definition at line 56 of file clusteredLayerGenerator.h.

Constructor & Destructor Documentation

◆ ClusteredLayerGenerator() [1/2]

template<typename GUM_SCALAR >
INLINE gum::prm::ClusteredLayerGenerator< GUM_SCALAR >::ClusteredLayerGenerator ( )

Default constructor.

Definition at line 502 of file clusteredLayerGenerator_tpl.h.

References gum::prm::ParamScopeData< GUM_SCALAR >::ParamScopeData().

502  :
503  _layers_(), _domain_size_(2), _max_parents_(INT_MAX), _cluster_ratio_(0.0) {
504  GUM_CONSTRUCTOR(ClusteredLayerGenerator);
505  }
std::vector< typename LayerGenerator< GUM_SCALAR >::LayerData > _layers_
+ Here is the call graph for this function:

◆ ClusteredLayerGenerator() [2/2]

template<typename GUM_SCALAR >
INLINE gum::prm::ClusteredLayerGenerator< GUM_SCALAR >::ClusteredLayerGenerator ( const ClusteredLayerGenerator< GUM_SCALAR > &  source)

Copy constructor.

Definition at line 508 of file clusteredLayerGenerator_tpl.h.

References gum::prm::ParamScopeData< GUM_SCALAR >::ParamScopeData().

509  :
510  _layers_(source._layers_),
511  _domain_size_(source._domain_size_), _max_parents_(source._max_parents_) {
512  GUM_CONS_CPY(ClusteredLayerGenerator);
513  }
std::vector< typename LayerGenerator< GUM_SCALAR >::LayerData > _layers_
+ Here is the call graph for this function:

◆ ~ClusteredLayerGenerator()

template<typename GUM_SCALAR >
INLINE gum::prm::ClusteredLayerGenerator< GUM_SCALAR >::~ClusteredLayerGenerator ( )
virtual

Destructor.

Definition at line 516 of file clusteredLayerGenerator_tpl.h.

References gum::prm::ParamScopeData< GUM_SCALAR >::ParamScopeData().

516  {
517  GUM_DESTRUCTOR(ClusteredLayerGenerator);
518  // typedef HashTable<std::string, std::vector<std::string>*>::iterator
519  // Iter;
520  // for (Iter iter = _cluster_map_.begin(); iter != _cluster_map_.end();
521  // ++iter)
522  // {
523  // delete *iter;
524  // }
525  }
+ Here is the call graph for this function:

Member Function Documentation

◆ _generateClass_()

template<typename GUM_SCALAR >
void gum::prm::ClusteredLayerGenerator< GUM_SCALAR >::_generateClass_ ( PRMFactory< GUM_SCALAR > &  f,
const std::string &  type,
std::vector< typename ClusteredLayerGenerator< GUM_SCALAR >::MyData > &  l,
Size  lvl,
Set< std::string > &  i 
)
private

Definition at line 303 of file clusteredLayerGenerator_tpl.h.

References gum::prm::ParamScopeData< GUM_SCALAR >::ParamScopeData().

308  {
309  Size size = 0;
310  GUM_SCALAR sum = 0.0;
311  l[lvl].c.push_back(this->name_gen_.nextName(PRMObject::prm_type::CLASS));
312  f.startClass(l[lvl].c.back(), "", &i);
313 
314  if (lvl) f.addReferenceSlot(l[lvl - 1].i, l[lvl].r, true);
315 
316  DAG dag;
318  _generateClassDag_(lvl, dag, names, l);
319 
320  // Adding aggregates
321  if (lvl) {
322  for (const auto agg: l[lvl].g) {
323  std::stringstream s;
324  s << l[lvl].r << "." << l[lvl - 1].a[std::rand() % l[lvl - 1].a.size()];
325  std::vector< std::string > chain(1, s.str()), param(1, "1");
326  f.addAggregator(agg, "exists", chain, param);
327  }
328  }
329 
330  // Adding attributes
331  for (const auto attr: l[lvl].a) {
332  f.startAttribute(type, attr, true);
333  size = getDomainSize();
334 
335  for (const auto par: dag.parents(names.second(attr))) {
336  f.addParent(names.first(par));
337  size *= f.retrieveClass(l[lvl].c.back()).get(names.first(par)).type()->domainSize();
338  }
339 
340  std::vector< GUM_SCALAR > cpf(size), val(getDomainSize());
341 
342  for (size_t norms = 0; norms < size; norms += getDomainSize()) {
343  sum = 0.0;
344 
345  for (size_t idx = 0; idx < getDomainSize(); ++idx) {
346  val[idx] = 1 + std::rand();
347  sum += val[idx];
348  }
349 
350  for (size_t idx = 0; idx < getDomainSize(); ++idx)
351  cpf[norms + idx] = val[idx] / sum;
352  }
353 
354  f.setRawCPFByLines(cpf);
355  f.endAttribute();
356  }
357 
358  f.endClass();
359  }
const T2 & second(const T1 &first) const
Returns the second value of a pair given its first value.
const T1 & first(const T2 &second) const
Returns the first value of a pair given its second value.
void _generateClassDag_(Size lvl, DAG &dag, Bijection< std::string, NodeId > &names, std::vector< typename ClusteredLayerGenerator::MyData > &l)
std::string nextName(PRMObject::prm_type type)
Getters and setters.
std::size_t Size
In aGrUM, hashed values are unsigned long int.
Definition: types.h:47
NameGenerator name_gen_
The name generator used by this class.
Definition: PRMGenerator.h:80
Size getDomainSize() const
Getters and setters.
+ Here is the call graph for this function:

◆ _generateClassDag_()

template<typename GUM_SCALAR >
void gum::prm::ClusteredLayerGenerator< GUM_SCALAR >::_generateClassDag_ ( Size  lvl,
DAG dag,
Bijection< std::string, NodeId > &  names,
std::vector< typename ClusteredLayerGenerator< GUM_SCALAR >::MyData > &  l 
)
private

Definition at line 362 of file clusteredLayerGenerator_tpl.h.

References gum::prm::ParamScopeData< GUM_SCALAR >::ParamScopeData().

366  {
367  float density = _layers_[lvl].inner_density * RAND_MAX;
368  std::vector< NodeId > nodes;
369  NodeId id = 0;
370 
371  if (lvl) {
372  for (std::vector< std::string >::iterator g = l[lvl].g.begin(); g != l[lvl].g.end(); ++g) {
373  id = dag.addNode();
374  names.insert(*g, id);
375  nodes.push_back(id);
376  }
377  }
378 
379  for (std::vector< std::string >::iterator a = l[lvl].a.begin(); a != l[lvl].a.end(); ++a) {
380  id = dag.addNode();
381  names.insert(*a, id);
382 
383  for (std::vector< NodeId >::iterator prnt = nodes.begin(); prnt != nodes.end(); ++prnt)
384  if (std::rand() < density) dag.addArc(*prnt, names.second(*a));
385 
386  nodes.push_back(id);
387  }
388 
389  // For each nodes with #parents > _max_parents_ we randomly remove parents
390  // until
391  // #parents <= _max_parents_
392  for (const auto node: dag.nodes()) {
393  if (dag.parents(node).size() > getMaxParents()) {
394  std::vector< NodeId > v;
395 
396  for (const auto par: dag.parents(node))
397  v.push_back(par);
398 
399  while (dag.parents(node).size() > getMaxParents()) {
400  size_t idx = std::rand() % v.size();
401  Arc arc(v[idx], node);
402  GUM_ASSERT(dag.existsArc(arc));
403  dag.eraseArc(arc);
404  v[idx] = v.back();
405  v.pop_back();
406  }
407  }
408  }
409  }
void insert(const T1 &first, const T2 &second)
Inserts a new association in the gum::Bijection.
Size getMaxParents() const
Returns the max number of parents allowed for any attribute or aggregator.
const T2 & second(const T1 &first) const
Returns the second value of a pair given its first value.
std::vector< typename LayerGenerator< GUM_SCALAR >::LayerData > _layers_
Size NodeId
Type for node ids.
Definition: graphElements.h:97
+ Here is the call graph for this function:

◆ _generateClasses_()

template<typename GUM_SCALAR >
void gum::prm::ClusteredLayerGenerator< GUM_SCALAR >::_generateClasses_ ( PRMFactory< GUM_SCALAR > &  f,
const std::string &  type,
std::vector< typename ClusteredLayerGenerator< GUM_SCALAR >::MyData > &  l 
)
private

Definition at line 93 of file clusteredLayerGenerator_tpl.h.

References gum::prm::ParamScopeData< GUM_SCALAR >::ParamScopeData().

96  {
97  // double ratio = getClusterRatio() + RAND_MAX;
99 
100  for (Size lvl = 0; lvl < _layers_.size(); ++lvl) {
101  i.insert(l[lvl].i);
102 
103  for (Size c = 0; c < _layers_[lvl].c; ++c) {
104  // if (std::rand() < ratio)
105  _generateCluster_(f, type, l, lvl, i);
106  // else
107  // _generateClass_(f, type, l, lvl, i);
108  }
109 
110  i.erase(l[lvl].i);
111  }
112  }
void _generateCluster_(PRMFactory< GUM_SCALAR > &f, const std::string &type, std::vector< typename ClusteredLayerGenerator::MyData > &l, Size lvl, Set< std::string > &i)
std::vector< typename LayerGenerator< GUM_SCALAR >::LayerData > _layers_
std::size_t Size
In aGrUM, hashed values are unsigned long int.
Definition: types.h:47
void insert(const Key &k)
Inserts a new element into the set.
Definition: set_tpl.h:606
+ Here is the call graph for this function:

◆ _generateCluster_()

template<typename GUM_SCALAR >
void gum::prm::ClusteredLayerGenerator< GUM_SCALAR >::_generateCluster_ ( PRMFactory< GUM_SCALAR > &  f,
const std::string &  type,
std::vector< typename ClusteredLayerGenerator< GUM_SCALAR >::MyData > &  l,
Size  lvl,
Set< std::string > &  i 
)
private

Definition at line 115 of file clusteredLayerGenerator_tpl.h.

References gum::prm::ParamScopeData< GUM_SCALAR >::ParamScopeData().

120  {
121  Size size = 0;
122  GUM_SCALAR sum = 0.0;
123  std::string first, second, third;
124  std::vector< std::string >* v = 0;
125 
126  switch (std::rand() % 2) {
127  // Shape A->B
128  // v == [first, second, second.ref -> first]
129  case 0: {
130  v = new std::vector< std::string >();
131  _generateClass_(f, type, l, lvl, i);
132  first = l[lvl].c.back();
133  v->push_back(first);
134  v->push_back(this->name_gen_.nextName(PRMObject::prm_type::CLASS));
135  f.startClass(v->back());
137  f.addReferenceSlot(first, v->back(), true);
138  DAG dag;
140  _generateClassDag_(lvl, dag, names, l);
141 
142  // Adding aggregates
143  for (std::vector< std::string >::iterator g = l[lvl].g.begin(); g != l[lvl].g.end();
144  ++g) {
145  std::stringstream s;
146  s << v->back() << "." << l[lvl].a[std::rand() % l[lvl].a.size()];
147  std::vector< std::string > chain(1, s.str()), param(1, "1");
148  f.addAggregator(*g, "exists", chain, param);
149  }
150 
151  // Adding attributes
152  for (std::vector< std::string >::iterator a = l[lvl].a.begin(); a != l[lvl].a.end();
153  ++a) {
154  f.startAttribute(type, *a, true);
155  size = getDomainSize();
156 
157  for (const auto par: dag.parents(names.second(*a))) {
158  f.addParent(names.first(par));
159  size *= f.retrieveClass(l[lvl].c.back()).get(names.first(par)).type()->domainSize();
160  }
161 
162  std::vector< GUM_SCALAR > cpf(size), val(getDomainSize());
163 
164  for (size_t norms = 0; norms < size; norms += getDomainSize()) {
165  sum = 0.0;
166 
167  for (size_t idx = 0; idx < getDomainSize(); ++idx) {
168  val[idx] = 1 + std::rand();
169  sum += val[idx];
170  }
171 
172  for (size_t idx = 0; idx < getDomainSize(); ++idx)
173  cpf[norms + idx] = val[idx] / sum;
174  }
175 
176  f.setRawCPFByLines(cpf);
177  f.endAttribute();
178  }
179 
180  f.endClass();
181  break;
182  }
183 
184  // Shape A -> B -> C
185  // v == [first, second, second.ref -> first, third, third.ref -> second]
186  case 1: {
187  v = new std::vector< std::string >();
188  _generateClass_(f, type, l, lvl, i);
189  {
190  first = l[lvl].c.back();
191  v->push_back(first);
192  v->push_back(this->name_gen_.nextName(PRMObject::prm_type::CLASS));
193  second = v->back();
194  f.startClass(second);
196  f.addReferenceSlot(first, v->back(), true);
197  DAG dag;
199  _generateClassDag_(lvl, dag, names, l);
200 
201  // Adding aggregates
202  for (std::vector< std::string >::iterator g = l[lvl].g.begin(); g != l[lvl].g.end();
203  ++g) {
204  std::stringstream s;
205  s << v->back() << "." << l[lvl].a[std::rand() % l[lvl].a.size()];
206  std::vector< std::string > chain(1, s.str()), param(1, "1");
207  f.addAggregator(*g, "exists", chain, param);
208  }
209 
210  // Adding attributes
211  for (std::vector< std::string >::iterator a = l[lvl].a.begin(); a != l[lvl].a.end();
212  ++a) {
213  f.startAttribute(type, *a, true);
214  size = getDomainSize();
215 
216  for (const auto par: dag.parents(names.second(*a))) {
217  f.addParent(names.first(par));
218  size *= f.retrieveClass(l[lvl].c.back()).get(names.first(par)).type()->domainSize();
219  }
220 
221  std::vector< GUM_SCALAR > cpf(size), val(getDomainSize());
222 
223  for (size_t norms = 0; norms < size; norms += getDomainSize()) {
224  sum = 0.0;
225 
226  for (size_t idx = 0; idx < getDomainSize(); ++idx) {
227  val[idx] = 1 + std::rand();
228  sum += val[idx];
229  }
230 
231  for (size_t idx = 0; idx < getDomainSize(); ++idx)
232  cpf[norms + idx] = val[idx] / sum;
233  }
234 
235  f.setRawCPFByLines(cpf);
236  f.endAttribute();
237  }
238 
239  f.endClass();
240  }
241  {
242  v->push_back(this->name_gen_.nextName(PRMObject::prm_type::CLASS));
243  third = v->back();
244  f.startClass(third);
246  f.addReferenceSlot(second, v->back(), true);
247  DAG dag;
249  _generateClassDag_(lvl, dag, names, l);
250 
251  // Adding aggregates
252  for (std::vector< std::string >::iterator g = l[lvl].g.begin(); g != l[lvl].g.end();
253  ++g) {
254  std::stringstream s;
255  s << v->back() << "." << l[lvl].a[std::rand() % l[lvl].a.size()];
256  std::vector< std::string > chain(1, s.str()), param(1, "1");
257  f.addAggregator(*g, "exists", chain, param);
258  }
259 
260  // Adding attributes
261  for (std::vector< std::string >::iterator a = l[lvl].a.begin(); a != l[lvl].a.end();
262  ++a) {
263  f.startAttribute(type, *a, true);
264  size = getDomainSize();
265 
266  for (const auto par: dag.parents(names.second(*a))) {
267  f.addParent(names.first(par));
268  size *= f.retrieveClass(l[lvl].c.back()).get(names.first(par)).type()->domainSize();
269  }
270 
271  std::vector< GUM_SCALAR > cpf(size), val(getDomainSize());
272 
273  for (size_t norms = 0; norms < size; norms += getDomainSize()) {
274  sum = 0.0;
275 
276  for (size_t idx = 0; idx < getDomainSize(); ++idx) {
277  val[idx] = 1 + std::rand();
278  sum += val[idx];
279  }
280 
281  for (size_t idx = 0; idx < getDomainSize(); ++idx)
282  cpf[norms + idx] = val[idx] / sum;
283  }
284 
285  f.setRawCPFByLines(cpf);
286  f.endAttribute();
287  }
288 
289  f.endClass();
290  }
291  break;
292  }
293 
294  default: {
295  GUM_ERROR(OperationNotAllowed, "unexpected value")
296  }
297  }
298 
299  _cluster_map_.insert(first, v);
300  }
const T2 & second(const T1 &first) const
Returns the second value of a pair given its first value.
void _generateClass_(PRMFactory< GUM_SCALAR > &f, const std::string &type, std::vector< typename ClusteredLayerGenerator::MyData > &l, Size lvl, Set< std::string > &i)
const T1 & first(const T2 &second) const
Returns the first value of a pair given its second value.
void _generateClassDag_(Size lvl, DAG &dag, Bijection< std::string, NodeId > &names, std::vector< typename ClusteredLayerGenerator::MyData > &l)
HashTable< std::string, std::vector< std::string > *> _cluster_map_
std::string nextName(PRMObject::prm_type type)
Getters and setters.
std::size_t Size
In aGrUM, hashed values are unsigned long int.
Definition: types.h:47
NameGenerator name_gen_
The name generator used by this class.
Definition: PRMGenerator.h:80
value_type & insert(const Key &key, const Val &val)
Adds a new element (actually a copy of this element) into the hash table.
Size getDomainSize() const
Getters and setters.
#define GUM_ERROR(type, msg)
Definition: exceptions.h:51
+ Here is the call graph for this function:

◆ _generateInterfaces_()

template<typename GUM_SCALAR >
void gum::prm::ClusteredLayerGenerator< GUM_SCALAR >::_generateInterfaces_ ( PRMFactory< GUM_SCALAR > &  f,
const std::string &  type,
std::vector< MyData > &  l 
)
private

Definition at line 64 of file clusteredLayerGenerator_tpl.h.

References gum::prm::ParamScopeData< GUM_SCALAR >::ParamScopeData().

67  {
68  for (Size lvl = 0; lvl < _layers_.size(); ++lvl) {
69  l.push_back(ClusteredLayerGenerator< GUM_SCALAR >::MyData());
71  f.startInterface(l[lvl].i);
72 
73  for (Size a = 0; a < _layers_[lvl].a; ++a) {
74  l[lvl].a.push_back(this->name_gen_.nextName(PRMObject::prm_type::CLASS_ELT));
75  f.addAttribute(type, l[lvl].a.back());
76  }
77 
78  if (lvl) {
79  for (Size g = 0; g < _layers_[lvl].g; ++g) {
80  l[lvl].g.push_back(this->name_gen_.nextName(PRMObject::prm_type::CLASS_ELT));
81  f.addAttribute("boolean", l[lvl].g.back());
82  }
83 
85  f.addReferenceSlot(l[lvl - 1].i, l[lvl].r, true);
86  }
87 
88  f.endInterface();
89  }
90  }
std::string nextName(PRMObject::prm_type type)
Getters and setters.
std::vector< typename LayerGenerator< GUM_SCALAR >::LayerData > _layers_
std::size_t Size
In aGrUM, hashed values are unsigned long int.
Definition: types.h:47
NameGenerator name_gen_
The name generator used by this class.
Definition: PRMGenerator.h:80
+ Here is the call graph for this function:

◆ _generateSystem_()

template<typename GUM_SCALAR >
void gum::prm::ClusteredLayerGenerator< GUM_SCALAR >::_generateSystem_ ( PRMFactory< GUM_SCALAR > &  factory,
std::vector< typename ClusteredLayerGenerator< GUM_SCALAR >::MyData > &  l 
)
private

Definition at line 412 of file clusteredLayerGenerator_tpl.h.

References gum::prm::ParamScopeData< GUM_SCALAR >::ParamScopeData().

414  {
415  factory.startSystem(this->name_gen_.nextName(PRMObject::prm_type::SYSTEM));
416  std::vector< std::vector< std::string > > o(_layers_.size());
417  std::string name, c, first, second, third;
418  std::vector< std::string >* v = 0;
419  size_t idx = 0;
420 
421  for (size_t lvl = 0; lvl < _layers_.size(); ++lvl) {
422  float density = _layers_[lvl].outter_density * RAND_MAX;
423 
424  for (size_t count = 0; count < _layers_[lvl].o; ++count) {
425  c = l[lvl].c[std::rand() % l[lvl].c.size()];
426 
427  if (_cluster_map_.exists(c)) {
428  v = _cluster_map_[c];
429 
430  switch (v->size()) {
431  case 3: {
433  factory.addInstance(c, first);
435  factory.addInstance(v->at(1), second);
436  std::stringstream chain;
437  chain << second << "." << v->at(2);
438  factory.setReferenceSlot(chain.str(), first);
439  break;
440  }
441 
442  case 5: {
444  factory.addInstance(c, first);
446  factory.addInstance(v->at(1), second);
447  std::stringstream chain_1, chain_2;
448  chain_1 << second << "." << v->at(2);
449  factory.setReferenceSlot(chain_1.str(), first);
451  factory.addInstance(v->at(3), third);
452  chain_2 << third << "." << v->at(4);
453  factory.setReferenceSlot(chain_2.str(), second);
454  break;
455  }
456 
457  default: {
458  GUM_ERROR(OperationNotAllowed, "unexpected vector size")
459  }
460  }
461 
462  // _cluster_map_.erase(c);
463  // delete v;
464  name = first;
465  } else {
467  factory.addInstance(c, name);
468  }
469 
470  o[lvl].push_back(name);
471 
472  if (lvl) {
473  std::stringstream chain;
474  chain << name << "." << l[lvl].r;
475  std::vector< std::string > ref2add;
476 
477  for (std::vector< std::string >::iterator iter = o[lvl - 1].begin();
478  iter != o[lvl - 1].end();
479  ++iter)
480  if (std::rand() <= density) ref2add.push_back(*iter);
481 
482  if (ref2add.empty())
483  factory.setReferenceSlot(chain.str(), o[lvl - 1][std::rand() % o[lvl - 1].size()]);
484 
485  while (ref2add.size() > getMaxParents()) {
486  idx = std::rand() % ref2add.size();
487  ref2add[idx] = ref2add.back();
488  ref2add.pop_back();
489  }
490 
491  for (std::vector< std::string >::iterator iter = ref2add.begin(); iter != ref2add.end();
492  ++iter)
493  factory.setReferenceSlot(chain.str(), *iter);
494  }
495  }
496  }
497 
498  factory.endSystem();
499  }
Size getMaxParents() const
Returns the max number of parents allowed for any attribute or aggregator.
bool exists(const Key &key) const
Checks whether there exists an element with a given key in the hashtable.
HashTable< std::string, std::vector< std::string > *> _cluster_map_
std::string nextName(PRMObject::prm_type type)
Getters and setters.
std::vector< typename LayerGenerator< GUM_SCALAR >::LayerData > _layers_
NameGenerator name_gen_
The name generator used by this class.
Definition: PRMGenerator.h:80
#define GUM_ERROR(type, msg)
Definition: exceptions.h:51
+ Here is the call graph for this function:

◆ _generateType_()

template<typename GUM_SCALAR >
std::string gum::prm::ClusteredLayerGenerator< GUM_SCALAR >::_generateType_ ( PRMFactory< GUM_SCALAR > &  f)
private

Definition at line 49 of file clusteredLayerGenerator_tpl.h.

References gum::prm::ParamScopeData< GUM_SCALAR >::ParamScopeData().

49  {
50  std::string name = this->name_gen_.nextName(PRMObject::prm_type::TYPE);
51  factory.startDiscreteType(name);
52 
53  for (Size i = 0; i < _domain_size_; ++i) {
54  std::stringstream sBuff;
55  sBuff << i;
56  factory.addLabel(sBuff.str());
57  }
58 
59  factory.endDiscreteType();
60  return name;
61  }
std::string nextName(PRMObject::prm_type type)
Getters and setters.
std::size_t Size
In aGrUM, hashed values are unsigned long int.
Definition: types.h:47
NameGenerator name_gen_
The name generator used by this class.
Definition: PRMGenerator.h:80
+ Here is the call graph for this function:

◆ generate()

template<typename GUM_SCALAR >
PRM< GUM_SCALAR > * gum::prm::ClusteredLayerGenerator< GUM_SCALAR >::generate ( )
virtual

Proceeds with the generation of the PRM<GUM_SCALAR>.

Implements gum::prm::PRMGenerator< GUM_SCALAR >.

Definition at line 33 of file clusteredLayerGenerator_tpl.h.

References gum::prm::ParamScopeData< GUM_SCALAR >::ParamScopeData().

33  {
34  if (_layers_.size() == 0) {
35  GUM_ERROR(OperationNotAllowed, "cannot generate a layered PRM<GUM_SCALAR> without layers")
36  }
37 
38  std::vector< MyData > l;
39  PRMFactory< GUM_SCALAR > factory;
40  std::string type = _generateType_(factory);
41  _generateInterfaces_(factory, type, l);
42  _generateClasses_(factory, type, l);
43  _generateSystem_(factory, l);
44  return factory.prm();
45  }
void _generateInterfaces_(PRMFactory< GUM_SCALAR > &f, const std::string &type, std::vector< MyData > &l)
std::string _generateType_(PRMFactory< GUM_SCALAR > &f)
void _generateClasses_(PRMFactory< GUM_SCALAR > &f, const std::string &type, std::vector< typename ClusteredLayerGenerator::MyData > &l)
std::vector< typename LayerGenerator< GUM_SCALAR >::LayerData > _layers_
void _generateSystem_(PRMFactory< GUM_SCALAR > &factory, std::vector< typename ClusteredLayerGenerator::MyData > &l)
#define GUM_ERROR(type, msg)
Definition: exceptions.h:51
+ Here is the call graph for this function:

◆ getClusterRatio()

template<typename GUM_SCALAR >
INLINE double gum::prm::ClusteredLayerGenerator< GUM_SCALAR >::getClusterRatio ( ) const

Returns the odds of a given class to be replaced by a cluster.

Definition at line 575 of file clusteredLayerGenerator_tpl.h.

References gum::prm::ParamScopeData< GUM_SCALAR >::ParamScopeData().

575  {
576  return _cluster_ratio_;
577  }
+ Here is the call graph for this function:

◆ getDomainSize()

template<typename GUM_SCALAR >
INLINE Size gum::prm::ClusteredLayerGenerator< GUM_SCALAR >::getDomainSize ( ) const

Getters and setters.

Returns the domain size of generated types.

Definition at line 537 of file clusteredLayerGenerator_tpl.h.

References gum::prm::ParamScopeData< GUM_SCALAR >::ParamScopeData().

537  {
538  return _domain_size_;
539  }
+ Here is the call graph for this function:

◆ getLayer() [1/2]

template<typename GUM_SCALAR >
INLINE std::vector< typename LayerGenerator< GUM_SCALAR >::LayerData > & gum::prm::ClusteredLayerGenerator< GUM_SCALAR >::getLayer ( )

Getters and setters.

Returns the domain size of generated types.

Definition at line 564 of file clusteredLayerGenerator_tpl.h.

References gum::prm::ParamScopeData< GUM_SCALAR >::ParamScopeData().

564  {
565  return _layers_;
566  }
std::vector< typename LayerGenerator< GUM_SCALAR >::LayerData > _layers_
+ Here is the call graph for this function:

◆ getLayer() [2/2]

template<typename GUM_SCALAR >
INLINE const std::vector< typename LayerGenerator< GUM_SCALAR >::LayerData > & gum::prm::ClusteredLayerGenerator< GUM_SCALAR >::getLayer ( ) const

Getters and setters.

Returns the domain size of generated types.

Definition at line 570 of file clusteredLayerGenerator_tpl.h.

References gum::prm::ParamScopeData< GUM_SCALAR >::ParamScopeData().

570  {
571  return _layers_;
572  }
std::vector< typename LayerGenerator< GUM_SCALAR >::LayerData > _layers_
+ Here is the call graph for this function:

◆ getMaxParents()

template<typename GUM_SCALAR >
INLINE Size gum::prm::ClusteredLayerGenerator< GUM_SCALAR >::getMaxParents ( ) const

Returns the max number of parents allowed for any attribute or aggregator.

Definition at line 547 of file clusteredLayerGenerator_tpl.h.

References gum::prm::ParamScopeData< GUM_SCALAR >::ParamScopeData().

547  {
548  return _max_parents_;
549  }
+ Here is the call graph for this function:

◆ getNameGenerator()

template<typename GUM_SCALAR >
INLINE const NameGenerator & gum::prm::PRMGenerator< GUM_SCALAR >::getNameGenerator ( ) const
inherited

Returns the NameGenerator used by this generator.

Definition at line 55 of file PRMGenerator_tpl.h.

References gum::prm::ParamScopeData< GUM_SCALAR >::ParamScopeData().

55  {
56  return name_gen_;
57  }
NameGenerator name_gen_
The name generator used by this class.
Definition: PRMGenerator.h:80
+ Here is the call graph for this function:

◆ operator=()

template<typename GUM_SCALAR >
INLINE ClusteredLayerGenerator< GUM_SCALAR > & gum::prm::ClusteredLayerGenerator< GUM_SCALAR >::operator= ( const ClusteredLayerGenerator< GUM_SCALAR > &  source)

Copy operator.

Definition at line 528 of file clusteredLayerGenerator_tpl.h.

References gum::prm::ParamScopeData< GUM_SCALAR >::ParamScopeData().

529  {
530  _layers_ = source._layers_;
531  _domain_size_ = source._domain_size_;
532  _max_parents_ = source._max_parents_;
533  return *this;
534  }
std::vector< typename LayerGenerator< GUM_SCALAR >::LayerData > _layers_
+ Here is the call graph for this function:

◆ setClusterRatio()

template<typename GUM_SCALAR >
INLINE void gum::prm::ClusteredLayerGenerator< GUM_SCALAR >::setClusterRatio ( double  ratio)

Define the odds of a given class to be replaced by a cluster.

Definition at line 580 of file clusteredLayerGenerator_tpl.h.

References gum::prm::ParamScopeData< GUM_SCALAR >::ParamScopeData().

580  {
581  _cluster_ratio_ = ratio;
582  }
+ Here is the call graph for this function:

◆ setDomainSize()

template<typename GUM_SCALAR >
INLINE void gum::prm::ClusteredLayerGenerator< GUM_SCALAR >::setDomainSize ( Size  s)

Set the domain size of generated types.

Definition at line 542 of file clusteredLayerGenerator_tpl.h.

References gum::prm::ParamScopeData< GUM_SCALAR >::ParamScopeData().

+ Here is the call graph for this function:

◆ setLayers()

template<typename GUM_SCALAR >
INLINE void gum::prm::ClusteredLayerGenerator< GUM_SCALAR >::setLayers ( const std::vector< typename LayerGenerator< GUM_SCALAR >::LayerData > &  v)

Defines the structure of each layers.

Each value in v defines a layer, were v[i].first is the number of different classes in the i-th layer and v[i].second is the number of instances in the i-th layer.

Parameters
vA vector describing each layer.

Definition at line 557 of file clusteredLayerGenerator_tpl.h.

References gum::prm::ParamScopeData< GUM_SCALAR >::ParamScopeData().

558  {
559  _layers_ = v;
560  }
std::vector< typename LayerGenerator< GUM_SCALAR >::LayerData > _layers_
+ Here is the call graph for this function:

◆ setMaxParents()

template<typename GUM_SCALAR >
INLINE void gum::prm::ClusteredLayerGenerator< GUM_SCALAR >::setMaxParents ( Size  s)

Returns the max number of parents allowed for any attribute or aggregator.

Definition at line 552 of file clusteredLayerGenerator_tpl.h.

References gum::prm::ParamScopeData< GUM_SCALAR >::ParamScopeData().

+ Here is the call graph for this function:

◆ setNameGenerator()

template<typename GUM_SCALAR >
INLINE void gum::prm::PRMGenerator< GUM_SCALAR >::setNameGenerator ( const NameGenerator name_gen)
inherited

Getters and setters.

Defines the NameGenerator used by this generator.

Definition at line 50 of file PRMGenerator_tpl.h.

References gum::prm::ParamScopeData< GUM_SCALAR >::ParamScopeData().

50  {
51  name_gen_ = name_gen;
52  }
NameGenerator name_gen_
The name generator used by this class.
Definition: PRMGenerator.h:80
+ Here is the call graph for this function:

Member Data Documentation

◆ _cluster_map_

template<typename GUM_SCALAR >
HashTable< std::string, std::vector< std::string >* > gum::prm::ClusteredLayerGenerator< GUM_SCALAR >::_cluster_map_
private

Definition at line 119 of file clusteredLayerGenerator.h.

◆ _cluster_ratio_

template<typename GUM_SCALAR >
double gum::prm::ClusteredLayerGenerator< GUM_SCALAR >::_cluster_ratio_
private

Definition at line 118 of file clusteredLayerGenerator.h.

◆ _domain_size_

template<typename GUM_SCALAR >
Size gum::prm::ClusteredLayerGenerator< GUM_SCALAR >::_domain_size_
private

Definition at line 116 of file clusteredLayerGenerator.h.

◆ _layers_

template<typename GUM_SCALAR >
std::vector< typename LayerGenerator< GUM_SCALAR >::LayerData > gum::prm::ClusteredLayerGenerator< GUM_SCALAR >::_layers_
private

Definition at line 115 of file clusteredLayerGenerator.h.

◆ _max_parents_

template<typename GUM_SCALAR >
Size gum::prm::ClusteredLayerGenerator< GUM_SCALAR >::_max_parents_
private

Definition at line 117 of file clusteredLayerGenerator.h.

◆ name_gen_

template<typename GUM_SCALAR >
NameGenerator gum::prm::PRMGenerator< GUM_SCALAR >::name_gen_
protectedinherited

The name generator used by this class.

Definition at line 80 of file PRMGenerator.h.


The documentation for this class was generated from the following files: