aGrUM  0.20.3
a C++ library for (probabilistic) graphical models
gum::NodeDatabase< AttributeSelection, isScalar > Class Template Reference

<agrum/FMDP/learning/datastructure/nodeDatabase.h> More...

#include <nodeDatabase.h>

+ Collaboration diagram for gum::NodeDatabase< AttributeSelection, isScalar >:

Public Member Functions

Idx effectif (Idx moda) const
 
Idx valueDomain () const
 
Constructor & destructor.
 NodeDatabase (const Set< const DiscreteVariable * > *, const DiscreteVariable *=nullptr)
 Default constructor. More...
 
 ~NodeDatabase ()
 Default destructor. More...
 
void * operator new (size_t s)
 Allocators and Deallocators redefinition. More...
 
void operator delete (void *p)
 Default constructor. More...
 
Variable Test Methods
INLINE bool isTestRelevant (const DiscreteVariable *var) const
 Indicates wether or not, node has sufficient observation so that any statistic is relevant. More...
 
INLINE double testValue (const DiscreteVariable *var) const
 Returns the performance of given variables according to selection criterion. More...
 
INLINE double testOtherCriterion (const DiscreteVariable *var) const
 Returns the performance of given variables according to selection secondary criterion (to break ties) More...
 
Aggregation Methods
NodeDatabase< AttributeSelection, isScalar > & operator+= (const NodeDatabase< AttributeSelection, isScalar > &src)
 Merges given NodeDatabase informations into current nDB. More...
 
const TestPolicy< ValueType > * testPolicy (const DiscreteVariable *var) const
 Returns a reference to nDB test policy for given variable (so that test policy information can be merged too) More...
 
const HashTableConstIteratorSafe< ValueType, IdxcbeginValues () const
 Iterators on value count to recopy correctly its content. More...
 
const HashTableConstIteratorSafe< ValueType, IdxcendValues () const
 Merges given NodeDatabase informations into current nDB. More...
 

Observation handling methods

void addObservation (const Observation *)
 Nb observation taken into account by this instance. More...
 
INLINE Idx nbObservation () const
 Nb observation taken into account by this instance. More...
 
void _addObservation_ (const Observation *, Int2Type< true >)
 Updates database with new observation. More...
 
void _addObservation_ (const Observation *, Int2Type< false >)
 depending on if we're learning reward function or transition probability More...
 

Detailed Description

template<TESTNAME AttributeSelection, bool isScalar>
class gum::NodeDatabase< AttributeSelection, isScalar >

<agrum/FMDP/learning/datastructure/nodeDatabase.h>

Definition at line 57 of file nodeDatabase.h.

Member Typedef Documentation

◆ TestPolicy

template<TESTNAME AttributeSelection, bool isScalar>
template<typename GUM_SCALAR >
using gum::NodeDatabase< AttributeSelection, isScalar >::TestPolicy = typename TestSelect< AttributeSelection, GTestPolicy< GUM_SCALAR >, Chi2TestPolicy< GUM_SCALAR >, LeastSquareTestPolicy< GUM_SCALAR > >::type
private

Definition at line 64 of file nodeDatabase.h.

◆ ValueType

template<TESTNAME AttributeSelection, bool isScalar>
typedef ValueSelect< isScalar, double, Idx >::type gum::NodeDatabase< AttributeSelection, isScalar >::ValueType
private

Definition at line 58 of file nodeDatabase.h.

Constructor & Destructor Documentation

◆ NodeDatabase()

template<TESTNAME AttributeSelection, bool isScalar>
gum::NodeDatabase< AttributeSelection, isScalar >::NodeDatabase ( const Set< const DiscreteVariable * > *  attrSet,
const DiscreteVariable value = nullptr 
)

Default constructor.

Definition at line 42 of file nodeDatabase_tpl.h.

44  :
45  _value_(value) {
46  GUM_CONSTRUCTOR(NodeDatabase);
47 
48  for (SetIteratorSafe< const DiscreteVariable* > varIter = attrSet->cbeginSafe();
49  varIter != attrSet->cendSafe();
50  ++varIter)
51  _attrTable_.insert(*varIter, new TestPolicy< ValueType >());
52 
53  _nbObservation_ = 0;
54  }
NodeDatabase(const Set< const DiscreteVariable * > *, const DiscreteVariable *=nullptr)
Default constructor.
HashTable< const DiscreteVariable *, TestPolicy< ValueType > *> _attrTable_
Table giving for every variables its instantiation.
Definition: nodeDatabase.h:197
const DiscreteVariable * _value_
So does this reference on the value observed.
Definition: nodeDatabase.h:200

◆ ~NodeDatabase()

template<TESTNAME AttributeSelection, bool isScalar>
gum::NodeDatabase< AttributeSelection, isScalar >::~NodeDatabase ( )

Default destructor.

Definition at line 61 of file nodeDatabase_tpl.h.

References gum::Set< Key, Alloc >::emplace().

61  {
62  for (auto varIter = _attrTable_.beginSafe(); varIter != _attrTable_.endSafe(); ++varIter)
63  delete varIter.val();
64 
65  GUM_DESTRUCTOR(NodeDatabase);
66  }
NodeDatabase(const Set< const DiscreteVariable * > *, const DiscreteVariable *=nullptr)
Default constructor.
HashTable< const DiscreteVariable *, TestPolicy< ValueType > *> _attrTable_
Table giving for every variables its instantiation.
Definition: nodeDatabase.h:197
+ Here is the call graph for this function:

Member Function Documentation

◆ _addObservation_() [1/2]

template<TESTNAME AttributeSelection, bool isScalar>
void gum::NodeDatabase< AttributeSelection, isScalar >::_addObservation_ ( const Observation newObs,
Int2Type< true >   
)
private

Updates database with new observation.

Calls either or

Definition at line 88 of file nodeDatabase_tpl.h.

References gum::Set< Key, Alloc >::emplace().

89  {
90  for (auto varIter = _attrTable_.cbeginSafe(); varIter != _attrTable_.cendSafe(); ++varIter)
91  varIter.val()->addObservation(newObs->rModality(varIter.key()), newObs->reward());
92 
93  if (_valueCount_.exists(newObs->reward()))
94  _valueCount_[newObs->reward()]++;
95  else
96  _valueCount_.insert(newObs->reward(), 1);
97  }
HashTable< ValueType, Idx > _valueCount_
Definition: nodeDatabase.h:206
HashTable< const DiscreteVariable *, TestPolicy< ValueType > *> _attrTable_
Table giving for every variables its instantiation.
Definition: nodeDatabase.h:197
+ Here is the call graph for this function:

◆ _addObservation_() [2/2]

template<TESTNAME AttributeSelection, bool isScalar>
void gum::NodeDatabase< AttributeSelection, isScalar >::_addObservation_ ( const Observation newObs,
Int2Type< false >   
)
private

depending on if we're learning reward function or transition probability

Definition at line 100 of file nodeDatabase_tpl.h.

References gum::Set< Key, Alloc >::emplace().

101  {
102  for (auto varIter = _attrTable_.cbeginSafe(); varIter != _attrTable_.cendSafe(); ++varIter)
103  varIter.val()->addObservation(newObs->modality(varIter.key()), newObs->modality(_value_));
104 
105  if (_valueCount_.exists(newObs->modality(_value_)))
106  _valueCount_[newObs->modality(_value_)]++;
107  else
108  _valueCount_.insert(newObs->modality(_value_), 1);
109  }
HashTable< ValueType, Idx > _valueCount_
Definition: nodeDatabase.h:206
HashTable< const DiscreteVariable *, TestPolicy< ValueType > *> _attrTable_
Table giving for every variables its instantiation.
Definition: nodeDatabase.h:197
const DiscreteVariable * _value_
So does this reference on the value observed.
Definition: nodeDatabase.h:200
+ Here is the call graph for this function:

◆ _valueDomain_() [1/2]

template<TESTNAME AttributeSelection, bool isScalar>
Idx gum::NodeDatabase< AttributeSelection, isScalar >::_valueDomain_ ( Int2Type< true >  ) const
inlineprivate

Definition at line 190 of file nodeDatabase.h.

190 { return _valueCount_.size(); }
HashTable< ValueType, Idx > _valueCount_
Definition: nodeDatabase.h:206

◆ _valueDomain_() [2/2]

template<TESTNAME AttributeSelection, bool isScalar>
Idx gum::NodeDatabase< AttributeSelection, isScalar >::_valueDomain_ ( Int2Type< false >  ) const
inlineprivate

Definition at line 191 of file nodeDatabase.h.

191 { return _value_->domainSize(); }
virtual Size domainSize() const =0
const DiscreteVariable * _value_
So does this reference on the value observed.
Definition: nodeDatabase.h:200

◆ addObservation()

template<TESTNAME AttributeSelection, bool isScalar>
void gum::NodeDatabase< AttributeSelection, isScalar >::addObservation ( const Observation newObs)

Nb observation taken into account by this instance.

Definition at line 82 of file nodeDatabase_tpl.h.

References gum::Set< Key, Alloc >::emplace().

82  {
84  this->_addObservation_(newObs, Int2Type< isScalar >());
85  }
void _addObservation_(const Observation *, Int2Type< true >)
Updates database with new observation.
+ Here is the call graph for this function:

◆ cbeginValues()

template<TESTNAME AttributeSelection, bool isScalar>
const HashTableConstIteratorSafe< ValueType, Idx > gum::NodeDatabase< AttributeSelection, isScalar >::cbeginValues ( ) const
inline

Iterators on value count to recopy correctly its content.

Definition at line 170 of file nodeDatabase.h.

170  {
171  return _valueCount_.cbeginSafe();
172  }
HashTable< ValueType, Idx > _valueCount_
Definition: nodeDatabase.h:206

◆ cendValues()

template<TESTNAME AttributeSelection, bool isScalar>
const HashTableConstIteratorSafe< ValueType, Idx > gum::NodeDatabase< AttributeSelection, isScalar >::cendValues ( ) const
inline

Merges given NodeDatabase informations into current nDB.

Definition at line 173 of file nodeDatabase.h.

173  {
174  return _valueCount_.cendSafe();
175  }
HashTable< ValueType, Idx > _valueCount_
Definition: nodeDatabase.h:206

◆ effectif()

template<TESTNAME AttributeSelection, bool isScalar>
Idx gum::NodeDatabase< AttributeSelection, isScalar >::effectif ( Idx  moda) const
inline

Definition at line 183 of file nodeDatabase.h.

183  {
184  return _valueCount_.exists(ValueType(moda)) ? _valueCount_[ValueType(moda)] : 0;
185  }
HashTable< ValueType, Idx > _valueCount_
Definition: nodeDatabase.h:206
ValueSelect< isScalar, double, Idx >::type ValueType
Definition: nodeDatabase.h:58

◆ isTestRelevant()

template<TESTNAME AttributeSelection, bool isScalar>
INLINE bool gum::NodeDatabase< AttributeSelection, isScalar >::isTestRelevant ( const DiscreteVariable var) const
inline

Indicates wether or not, node has sufficient observation so that any statistic is relevant.

Definition at line 128 of file nodeDatabase.h.

References gum::NodeDatabase< AttributeSelection, isScalar >::operator+=().

128  {
129  return _attrTable_[var]->isTestRelevant();
130  }
HashTable< const DiscreteVariable *, TestPolicy< ValueType > *> _attrTable_
Table giving for every variables its instantiation.
Definition: nodeDatabase.h:197
+ Here is the call graph for this function:

◆ nbObservation()

template<TESTNAME AttributeSelection, bool isScalar>
INLINE Idx gum::NodeDatabase< AttributeSelection, isScalar >::nbObservation ( ) const
inline

Nb observation taken into account by this instance.

Definition at line 115 of file nodeDatabase.h.

References gum::NodeDatabase< AttributeSelection, isScalar >::operator+=().

115 { return _nbObservation_; }
+ Here is the call graph for this function:

◆ operator delete()

template<TESTNAME AttributeSelection, bool isScalar>
void gum::NodeDatabase< AttributeSelection, isScalar >::operator delete ( void *  p)
inline

Default constructor.

Definition at line 86 of file nodeDatabase.h.

86  {
88  }
NodeDatabase(const Set< const DiscreteVariable * > *, const DiscreteVariable *=nullptr)
Default constructor.
void deallocate(void *pDeallocatedObject, const size_t &objectSize)
Deallocates an object.
static SmallObjectAllocator & instance()

◆ operator new()

template<TESTNAME AttributeSelection, bool isScalar>
void* gum::NodeDatabase< AttributeSelection, isScalar >::operator new ( size_t  s)
inline

Allocators and Deallocators redefinition.

Definition at line 85 of file nodeDatabase.h.

void * allocate(const size_t &objectSize)
Allocates a block.
static SmallObjectAllocator & instance()

◆ operator+=()

template<TESTNAME AttributeSelection, bool isScalar>
NodeDatabase< AttributeSelection, isScalar > & gum::NodeDatabase< AttributeSelection, isScalar >::operator+= ( const NodeDatabase< AttributeSelection, isScalar > &  src)

Merges given NodeDatabase informations into current nDB.

Definition at line 122 of file nodeDatabase_tpl.h.

References gum::Set< Key, Alloc >::emplace().

Referenced by gum::NodeDatabase< AttributeSelection, isScalar >::isTestRelevant(), gum::NodeDatabase< AttributeSelection, isScalar >::nbObservation(), gum::NodeDatabase< AttributeSelection, isScalar >::testOtherCriterion(), and gum::NodeDatabase< AttributeSelection, isScalar >::testValue().

123  {
124  this->_nbObservation_ += src.nbObservation();
125 
126  for (auto varIter = _attrTable_.beginSafe(); varIter != _attrTable_.endSafe(); ++varIter)
127  varIter.val()->add(*(src.testPolicy(varIter.key())));
128 
129  for (auto valIter = src.cbeginValues(); valIter != src.cendValues(); ++valIter)
130  if (_valueCount_.exists(valIter.key()))
131  _valueCount_[valIter.key()] += valIter.val();
132  else
133  _valueCount_.insert(valIter.key(), valIter.val());
134 
135  return *this;
136  }
HashTable< ValueType, Idx > _valueCount_
Definition: nodeDatabase.h:206
HashTable< const DiscreteVariable *, TestPolicy< ValueType > *> _attrTable_
Table giving for every variables its instantiation.
Definition: nodeDatabase.h:197
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ testOtherCriterion()

template<TESTNAME AttributeSelection, bool isScalar>
INLINE double gum::NodeDatabase< AttributeSelection, isScalar >::testOtherCriterion ( const DiscreteVariable var) const
inline

Returns the performance of given variables according to selection secondary criterion (to break ties)

Definition at line 142 of file nodeDatabase.h.

References gum::NodeDatabase< AttributeSelection, isScalar >::operator+=().

142  {
143  return _attrTable_[var]->secondaryscore();
144  }
HashTable< const DiscreteVariable *, TestPolicy< ValueType > *> _attrTable_
Table giving for every variables its instantiation.
Definition: nodeDatabase.h:197
+ Here is the call graph for this function:

◆ testPolicy()

template<TESTNAME AttributeSelection, bool isScalar>
const TestPolicy< ValueType >* gum::NodeDatabase< AttributeSelection, isScalar >::testPolicy ( const DiscreteVariable var) const
inline

Returns a reference to nDB test policy for given variable (so that test policy information can be merged too)

Definition at line 163 of file nodeDatabase.h.

163  {
164  return _attrTable_[var];
165  }
HashTable< const DiscreteVariable *, TestPolicy< ValueType > *> _attrTable_
Table giving for every variables its instantiation.
Definition: nodeDatabase.h:197

◆ testValue()

template<TESTNAME AttributeSelection, bool isScalar>
INLINE double gum::NodeDatabase< AttributeSelection, isScalar >::testValue ( const DiscreteVariable var) const
inline

Returns the performance of given variables according to selection criterion.

Definition at line 136 of file nodeDatabase.h.

References gum::NodeDatabase< AttributeSelection, isScalar >::operator+=().

136 { return _attrTable_[var]->score(); }
HashTable< const DiscreteVariable *, TestPolicy< ValueType > *> _attrTable_
Table giving for every variables its instantiation.
Definition: nodeDatabase.h:197
+ Here is the call graph for this function:

◆ toString()

template<TESTNAME AttributeSelection, bool isScalar>
std::string gum::NodeDatabase< AttributeSelection, isScalar >::toString ( ) const
private

Definition at line 140 of file nodeDatabase_tpl.h.

References gum::Set< Key, Alloc >::emplace().

140  {
141  std::stringstream ss;
142 
143  ss << "NbObservation : " << this->nbObservation() << std::endl;
144  for (auto varIter = _attrTable_.beginSafe(); varIter != _attrTable_.endSafe(); ++varIter)
145  ss << "\t\tVariable : " << varIter.key()->name()
146  << " - Associated Test : " << _attrTable_[varIter.key()]->toString() << std::endl;
147 
148  return ss.str();
149  }
HashTable< const DiscreteVariable *, TestPolicy< ValueType > *> _attrTable_
Table giving for every variables its instantiation.
Definition: nodeDatabase.h:197
INLINE Idx nbObservation() const
Nb observation taken into account by this instance.
Definition: nodeDatabase.h:115
+ Here is the call graph for this function:

◆ valueDomain()

template<TESTNAME AttributeSelection, bool isScalar>
Idx gum::NodeDatabase< AttributeSelection, isScalar >::valueDomain ( ) const
inline

Definition at line 187 of file nodeDatabase.h.

187 { return _valueDomain_(Int2Type< isScalar >()); }
Idx _valueDomain_(Int2Type< true >) const
Definition: nodeDatabase.h:190

Member Data Documentation

◆ _attrTable_

template<TESTNAME AttributeSelection, bool isScalar>
HashTable< const DiscreteVariable*, TestPolicy< ValueType >* > gum::NodeDatabase< AttributeSelection, isScalar >::_attrTable_
private

Table giving for every variables its instantiation.

Definition at line 197 of file nodeDatabase.h.

◆ _nbObservation_

template<TESTNAME AttributeSelection, bool isScalar>
Idx gum::NodeDatabase< AttributeSelection, isScalar >::_nbObservation_
private

Definition at line 203 of file nodeDatabase.h.

◆ _value_

template<TESTNAME AttributeSelection, bool isScalar>
const DiscreteVariable* gum::NodeDatabase< AttributeSelection, isScalar >::_value_
private

So does this reference on the value observed.

Definition at line 200 of file nodeDatabase.h.

◆ _valueCount_

template<TESTNAME AttributeSelection, bool isScalar>
HashTable< ValueType, Idx > gum::NodeDatabase< AttributeSelection, isScalar >::_valueCount_
private

Definition at line 206 of file nodeDatabase.h.


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