aGrUM  0.16.0
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 58 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 66 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 59 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 43 of file nodeDatabase_tpl.h.

References gum::NodeDatabase< AttributeSelection, isScalar >::__attrTable, gum::NodeDatabase< AttributeSelection, isScalar >::__nbObservation, gum::Set< Key, Alloc >::cbeginSafe(), and gum::Set< Key, Alloc >::cendSafe().

45  :
46  __value(value) {
47  GUM_CONSTRUCTOR(NodeDatabase);
48 
49  for (SetIteratorSafe< const DiscreteVariable* > varIter =
50  attrSet->cbeginSafe();
51  varIter != attrSet->cendSafe();
52  ++varIter)
53  __attrTable.insert(*varIter, new TestPolicy< ValueType >());
54 
55  __nbObservation = 0;
56  }
const DiscreteVariable * __value
So does this reference on the value observed.
Definition: nodeDatabase.h:208
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:205
+ Here is the call graph for this function:

◆ ~NodeDatabase()

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

Default destructor.

Definition at line 63 of file nodeDatabase_tpl.h.

References gum::NodeDatabase< AttributeSelection, isScalar >::__attrTable.

63  {
64  for (auto varIter = __attrTable.beginSafe(); varIter != __attrTable.endSafe();
65  ++varIter)
66  delete varIter.val();
67 
68  GUM_DESTRUCTOR(NodeDatabase);
69  }
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:205

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 92 of file nodeDatabase_tpl.h.

References gum::NodeDatabase< AttributeSelection, isScalar >::__attrTable, gum::NodeDatabase< AttributeSelection, isScalar >::__valueCount, gum::Observation::reward(), and gum::Observation::rModality().

Referenced by gum::NodeDatabase< AttributeSelection, isScalar >::addObservation(), and gum::NodeDatabase< AttributeSelection, isScalar >::operator delete().

93  {
94  for (auto varIter = __attrTable.cbeginSafe();
95  varIter != __attrTable.cendSafe();
96  ++varIter)
97  varIter.val()->addObservation(newObs->rModality(varIter.key()),
98  newObs->reward());
99 
100  if (__valueCount.exists(newObs->reward()))
101  __valueCount[newObs->reward()]++;
102  else
103  __valueCount.insert(newObs->reward(), 1);
104  }
HashTable< ValueType, Idx > __valueCount
Definition: nodeDatabase.h:214
HashTable< const DiscreteVariable *, TestPolicy< ValueType > *> __attrTable
Table giving for every variables its instantiation.
Definition: nodeDatabase.h:205
+ Here is the call graph for this function:
+ Here is the caller 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 107 of file nodeDatabase_tpl.h.

References gum::NodeDatabase< AttributeSelection, isScalar >::__attrTable, gum::NodeDatabase< AttributeSelection, isScalar >::__value, gum::NodeDatabase< AttributeSelection, isScalar >::__valueCount, gum::Observation::modality(), and gum::NodeDatabase< AttributeSelection, isScalar >::operator+=().

108  {
109  for (auto varIter = __attrTable.cbeginSafe();
110  varIter != __attrTable.cendSafe();
111  ++varIter)
112  varIter.val()->addObservation(newObs->modality(varIter.key()),
113  newObs->modality(__value));
114 
115  if (__valueCount.exists(newObs->modality(__value)))
116  __valueCount[newObs->modality(__value)]++;
117  else
118  __valueCount.insert(newObs->modality(__value), 1);
119  }
const DiscreteVariable * __value
So does this reference on the value observed.
Definition: nodeDatabase.h:208
HashTable< ValueType, Idx > __valueCount
Definition: nodeDatabase.h:214
HashTable< const DiscreteVariable *, TestPolicy< ValueType > *> __attrTable
Table giving for every variables its instantiation.
Definition: nodeDatabase.h:205
+ 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 198 of file nodeDatabase.h.

References gum::NodeDatabase< AttributeSelection, isScalar >::__valueCount.

Referenced by gum::NodeDatabase< AttributeSelection, isScalar >::valueDomain().

198 { return __valueCount.size(); }
HashTable< ValueType, Idx > __valueCount
Definition: nodeDatabase.h:214
+ Here is the caller graph for this function:

◆ __valueDomain() [2/2]

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

Definition at line 199 of file nodeDatabase.h.

References gum::NodeDatabase< AttributeSelection, isScalar >::__value, gum::DiscreteVariable::domainSize(), and gum::NodeDatabase< AttributeSelection, isScalar >::toString().

199 { return __value->domainSize(); }
const DiscreteVariable * __value
So does this reference on the value observed.
Definition: nodeDatabase.h:208
virtual Size domainSize() const =0
+ Here is the call graph for this function:

◆ 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 85 of file nodeDatabase_tpl.h.

References gum::NodeDatabase< AttributeSelection, isScalar >::__addObservation(), and gum::NodeDatabase< AttributeSelection, isScalar >::__nbObservation.

Referenced by gum::IncrementalGraphLearner< AttributeSelection, isScalar >::_transpose(), and gum::NodeDatabase< AttributeSelection, isScalar >::operator delete().

86  {
88  this->__addObservation(newObs, Int2Type< isScalar >());
89  }
void __addObservation(const Observation *, Int2Type< true >)
Updates database with new observation.
+ Here is the call graph for this function:
+ Here is the caller 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 177 of file nodeDatabase.h.

References gum::NodeDatabase< AttributeSelection, isScalar >::__valueCount.

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

177  {
178  return __valueCount.cbeginSafe();
179  }
HashTable< ValueType, Idx > __valueCount
Definition: nodeDatabase.h:214
+ Here is the caller graph for this function:

◆ 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 180 of file nodeDatabase.h.

References gum::NodeDatabase< AttributeSelection, isScalar >::__valueCount.

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

180  {
181  return __valueCount.cendSafe();
182  }
HashTable< ValueType, Idx > __valueCount
Definition: nodeDatabase.h:214
+ Here is the caller graph for this function:

◆ effectif()

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

Definition at line 190 of file nodeDatabase.h.

References gum::NodeDatabase< AttributeSelection, isScalar >::__valueCount.

190  {
191  return __valueCount.exists(ValueType(moda)) ? __valueCount[ValueType(moda)]
192  : 0;
193  }
HashTable< ValueType, Idx > __valueCount
Definition: nodeDatabase.h:214
ValueSelect< isScalar, double, Idx >::type ValueType
Definition: nodeDatabase.h:59

◆ 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 133 of file nodeDatabase.h.

References gum::NodeDatabase< AttributeSelection, isScalar >::__attrTable.

133  {
134  return __attrTable[var]->isTestRelevant();
135  }
HashTable< const DiscreteVariable *, TestPolicy< ValueType > *> __attrTable
Table giving for every variables its instantiation.
Definition: nodeDatabase.h:205

◆ 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 120 of file nodeDatabase.h.

References gum::NodeDatabase< AttributeSelection, isScalar >::__nbObservation.

Referenced by gum::NodeDatabase< AttributeSelection, isScalar >::operator+=(), and gum::NodeDatabase< AttributeSelection, isScalar >::toString().

120 { return __nbObservation; }
+ Here is the caller 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 91 of file nodeDatabase.h.

References gum::NodeDatabase< AttributeSelection, isScalar >::__addObservation(), gum::NodeDatabase< AttributeSelection, isScalar >::addObservation(), gum::SmallObjectAllocator::deallocate(), and gum::SmallObjectAllocator::instance().

91  {
93  }
NodeDatabase(const Set< const DiscreteVariable * > *, const DiscreteVariable *=nullptr)
Default constructor.
void deallocate(void *pDeallocatedObject, const size_t &objectSize)
Deallocates an object.
static SmallObjectAllocator & instance()
+ Here is the call graph for this function:

◆ 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 88 of file nodeDatabase.h.

References gum::SmallObjectAllocator::allocate(), and gum::SmallObjectAllocator::instance().

88  {
90  }
void * allocate(const size_t &objectSize)
Allocates a block.
static SmallObjectAllocator & instance()
+ Here is the call graph for this function:

◆ 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 133 of file nodeDatabase_tpl.h.

References gum::NodeDatabase< AttributeSelection, isScalar >::__attrTable, gum::NodeDatabase< AttributeSelection, isScalar >::__nbObservation, gum::NodeDatabase< AttributeSelection, isScalar >::__valueCount, gum::NodeDatabase< AttributeSelection, isScalar >::cbeginValues(), gum::NodeDatabase< AttributeSelection, isScalar >::cendValues(), gum::NodeDatabase< AttributeSelection, isScalar >::nbObservation(), and gum::NodeDatabase< AttributeSelection, isScalar >::testPolicy().

Referenced by gum::NodeDatabase< AttributeSelection, isScalar >::__addObservation(), and gum::NodeDatabase< AttributeSelection, isScalar >::testOtherCriterion().

133  {
134  this->__nbObservation += src.nbObservation();
135 
136  for (auto varIter = __attrTable.beginSafe(); varIter != __attrTable.endSafe();
137  ++varIter)
138  varIter.val()->add(*(src.testPolicy(varIter.key())));
139 
140  for (auto valIter = src.cbeginValues(); valIter != src.cendValues(); ++valIter)
141  if (__valueCount.exists(valIter.key()))
142  __valueCount[valIter.key()] += valIter.val();
143  else
144  __valueCount.insert(valIter.key(), valIter.val());
145 
146  return *this;
147  }
HashTable< ValueType, Idx > __valueCount
Definition: nodeDatabase.h:214
HashTable< const DiscreteVariable *, TestPolicy< ValueType > *> __attrTable
Table giving for every variables its instantiation.
Definition: nodeDatabase.h:205
+ 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 149 of file nodeDatabase.h.

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

149  {
150  return __attrTable[var]->secondaryscore();
151  }
HashTable< const DiscreteVariable *, TestPolicy< ValueType > *> __attrTable
Table giving for every variables its instantiation.
Definition: nodeDatabase.h:205
+ 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 170 of file nodeDatabase.h.

References gum::NodeDatabase< AttributeSelection, isScalar >::__attrTable.

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

170  {
171  return __attrTable[var];
172  }
HashTable< const DiscreteVariable *, TestPolicy< ValueType > *> __attrTable
Table giving for every variables its instantiation.
Definition: nodeDatabase.h:205
+ Here is the caller graph for this function:

◆ 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 141 of file nodeDatabase.h.

References gum::NodeDatabase< AttributeSelection, isScalar >::__attrTable.

141  {
142  return __attrTable[var]->score();
143  }
HashTable< const DiscreteVariable *, TestPolicy< ValueType > *> __attrTable
Table giving for every variables its instantiation.
Definition: nodeDatabase.h:205

◆ toString()

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

Definition at line 151 of file nodeDatabase_tpl.h.

References gum::NodeDatabase< AttributeSelection, isScalar >::__attrTable, and gum::NodeDatabase< AttributeSelection, isScalar >::nbObservation().

Referenced by gum::NodeDatabase< AttributeSelection, isScalar >::__valueDomain().

151  {
152  std::stringstream ss;
153 
154  ss << "NbObservation : " << this->nbObservation() << std::endl;
155  for (auto varIter = __attrTable.beginSafe(); varIter != __attrTable.endSafe();
156  ++varIter)
157  ss << "\t\tVariable : " << varIter.key()->name()
158  << " - Associated Test : " << __attrTable[varIter.key()]->toString()
159  << std::endl;
160 
161  return ss.str();
162  }
INLINE Idx nbObservation() const
Nb observation taken into account by this instance.
Definition: nodeDatabase.h:120
HashTable< const DiscreteVariable *, TestPolicy< ValueType > *> __attrTable
Table giving for every variables its instantiation.
Definition: nodeDatabase.h:205
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ valueDomain()

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

Definition at line 195 of file nodeDatabase.h.

References gum::NodeDatabase< AttributeSelection, isScalar >::__valueDomain().

195 { return __valueDomain(Int2Type< isScalar >()); }
Idx __valueDomain(Int2Type< true >) const
Definition: nodeDatabase.h:198
+ Here is the call graph for this function:

Member Data Documentation

◆ __attrTable

◆ __nbObservation

◆ __value

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

◆ __valueCount


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