aGrUM  0.14.2
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 55 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 63 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 56 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 40 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().

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

◆ ~NodeDatabase()

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

Default destructor.

Definition at line 60 of file nodeDatabase_tpl.h.

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

60  {
61  for (auto varIter = __attrTable.beginSafe(); varIter != __attrTable.endSafe();
62  ++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:202

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 89 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().

90  {
91  for (auto varIter = __attrTable.cbeginSafe();
92  varIter != __attrTable.cendSafe();
93  ++varIter)
94  varIter.val()->addObservation(newObs->rModality(varIter.key()),
95  newObs->reward());
96 
97  if (__valueCount.exists(newObs->reward()))
98  __valueCount[newObs->reward()]++;
99  else
100  __valueCount.insert(newObs->reward(), 1);
101  }
HashTable< ValueType, Idx > __valueCount
Definition: nodeDatabase.h:211
HashTable< const DiscreteVariable *, TestPolicy< ValueType > *> __attrTable
Table giving for every variables its instantiation.
Definition: nodeDatabase.h:202
+ 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 104 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+=().

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

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

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

195 { return __valueCount.size(); }
HashTable< ValueType, Idx > __valueCount
Definition: nodeDatabase.h:211
+ 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 196 of file nodeDatabase.h.

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

196 { return __value->domainSize(); }
const DiscreteVariable * __value
So does this reference on the value observed.
Definition: nodeDatabase.h:205
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 82 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().

83  {
85  this->__addObservation(newObs, Int2Type< isScalar >());
86  }
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 174 of file nodeDatabase.h.

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

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

174  {
175  return __valueCount.cbeginSafe();
176  }
HashTable< ValueType, Idx > __valueCount
Definition: nodeDatabase.h:211
+ 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 177 of file nodeDatabase.h.

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

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

177  {
178  return __valueCount.cendSafe();
179  }
HashTable< ValueType, Idx > __valueCount
Definition: nodeDatabase.h:211
+ 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 187 of file nodeDatabase.h.

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

187  {
188  return __valueCount.exists(ValueType(moda)) ? __valueCount[ValueType(moda)]
189  : 0;
190  }
HashTable< ValueType, Idx > __valueCount
Definition: nodeDatabase.h:211
ValueSelect< isScalar, double, Idx >::type ValueType
Definition: nodeDatabase.h:56

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

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

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

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

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

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

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

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

88  {
90  }
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 85 of file nodeDatabase.h.

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

85  {
87  }
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 130 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().

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

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

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

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

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

167  {
168  return __attrTable[var];
169  }
HashTable< const DiscreteVariable *, TestPolicy< ValueType > *> __attrTable
Table giving for every variables its instantiation.
Definition: nodeDatabase.h:202
+ 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 138 of file nodeDatabase.h.

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

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

◆ toString()

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

Definition at line 148 of file nodeDatabase_tpl.h.

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

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

148  {
149  std::stringstream ss;
150 
151  ss << "NbObservation : " << this->nbObservation() << std::endl;
152  for (auto varIter = __attrTable.beginSafe(); varIter != __attrTable.endSafe();
153  ++varIter)
154  ss << "\t\tVariable : " << varIter.key()->name()
155  << " - Associated Test : " << __attrTable[varIter.key()]->toString()
156  << std::endl;
157 
158  return ss.str();
159  }
INLINE Idx nbObservation() const
Nb observation taken into account by this instance.
Definition: nodeDatabase.h:117
HashTable< const DiscreteVariable *, TestPolicy< ValueType > *> __attrTable
Table giving for every variables its instantiation.
Definition: nodeDatabase.h:202
+ 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 192 of file nodeDatabase.h.

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

192 { return __valueDomain(Int2Type< isScalar >()); }
Idx __valueDomain(Int2Type< true >) const
Definition: nodeDatabase.h:195
+ 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: