aGrUM 3.1.1
a C++ library for (probabilistic) graphical models
gum::StatesCounter Class Reference

<agrum/FMDP/simulation/statesCounter.h> More...

#include <statesCounter.h>

Inheritance diagram for gum::StatesCounter:
Collaboration diagram for gum::StatesCounter:

Public Member Functions

Constructor & destructor.
 StatesCounter ()
 Default constructor.
 ~StatesCounter () override
 Default destructor.
Miscelleanous methods
void incState (const Instantiation &)
void reset (const Instantiation &)
const MultiDimFunctionGraph< int > * counter ()
Visit Methods
NodeId root () const override
bool isTerminal (NodeId ni) const override
const DiscreteVariablenodeVar (NodeId ni) const override
NodeId nodeSon (NodeId ni, Idx modality) const override
Idx nodeNbObservation (NodeId ni) const override
void insertSetOfVars (MultiDimFunctionGraph< double > *ret) const override

Private Member Functions

void _incState_ (const Instantiation &, NodeId, Idx, Size)

Private Attributes

MultiDimFunctionGraph< Size > * _counter_
Set< Instantiation * > _visitedStates_

Detailed Description

<agrum/FMDP/simulation/statesCounter.h>

Provides the necessary to check whether or not states have been already visited.

Definition at line 70 of file statesCounter.h.

Constructor & Destructor Documentation

◆ StatesCounter()

gum::StatesCounter::StatesCounter ( )

Default constructor.

Definition at line 54 of file statesCounter.cpp.

55 GUM_CONSTRUCTOR(StatesCounter);
56 }
static MultiDimFunctionGraph< GUM_ELEMENT, TerminalNodePolicy > * getTreeInstance()
Returns an arborescent instance.
StatesCounter()
Default constructor.
MultiDimFunctionGraph< Size > * _counter_

References StatesCounter(), and _counter_.

Referenced by StatesCounter(), and ~StatesCounter().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ~StatesCounter()

gum::StatesCounter::~StatesCounter ( )
override

Default destructor.

Definition at line 61 of file statesCounter.cpp.

61 {
62 delete _counter_;
63 GUM_DESTRUCTOR(StatesCounter);
64 }

References StatesCounter(), and _counter_.

Here is the call graph for this function:

Member Function Documentation

◆ _incState_()

void gum::StatesCounter::_incState_ ( const Instantiation & state,
NodeId parentId,
Idx parentModa,
Size nbVisits )
private

Definition at line 100 of file statesCounter.cpp.

103 {
104 Idx varIter = 0;
105 if (parentId) varIter = state.variablesSequence().pos(_counter_->node(parentId)->nodeVar()) + 1;
106
107
108 for (; varIter < state.variablesSequence().size(); ++varIter) {
109 const DiscreteVariable* curVar = state.variablesSequence().atPos(varIter);
110 NodeId varId = _counter_->manager()->addInternalNode(curVar);
111 if (parentId) _counter_->manager()->setSon(parentId, parentModa, varId);
112 else _counter_->manager()->setRootNode(varId);
113 for (Idx moda = 0; moda < curVar->domainSize(); ++moda) {
114 if (moda == state.valFromPtr(curVar)) parentModa = moda;
115 else _counter_->manager()->setSon(varId, moda, _counter_->terminalNodeId(nbVisits));
116 }
117 parentId = varId;
118 }
119 _counter_->manager()->setSon(parentId,
120 parentModa,
121 _counter_->manager()->addTerminalNode(nbVisits + 1));
122 }
Size Idx
Type for indexes.
Definition types.h:79
Size NodeId
Type for node ids.

References _counter_, gum::DiscreteVariable::domainSize(), gum::Instantiation::valFromPtr(), and gum::Instantiation::variablesSequence().

Referenced by incState(), and reset().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ counter()

const MultiDimFunctionGraph< int > * gum::StatesCounter::counter ( )

◆ incState()

void gum::StatesCounter::incState ( const Instantiation & state)

Definition at line 85 of file statesCounter.cpp.

85 {
86 Idx nbVisits = _counter_->get(state);
87
88 NodeId parId = _counter_->root();
89 Idx parModa = state.valFromPtr(_counter_->node(parId)->nodeVar());
90 while (!_counter_->isTerminalNode(_counter_->node(parId)->son(parModa))) {
91 parId = _counter_->node(parId)->son(parModa);
92 parModa = state.valFromPtr(_counter_->node(parId)->nodeVar());
93 }
94 _incState_(state, parId, parModa, nbVisits);
95 }
void _incState_(const Instantiation &, NodeId, Idx, Size)

References _counter_, _incState_(), and gum::Instantiation::valFromPtr().

Here is the call graph for this function:

◆ insertSetOfVars()

INLINE void gum::StatesCounter::insertSetOfVars ( MultiDimFunctionGraph< double > * ret) const
overridevirtual

Implements gum::IVisitableGraphLearner.

Definition at line 62 of file statesCounter_inl.h.

62 {
63 for (SequenceIteratorSafe< const DiscreteVariable* > varIter
64 = _counter_->variablesSequence().beginSafe();
65 varIter != _counter_->variablesSequence().endSafe();
66 ++varIter)
67 ret->add(**varIter);
68 }

References _counter_, and gum::MultiDimFunctionGraph< GUM_ELEMENT, TerminalNodePolicy >::add().

Here is the call graph for this function:

◆ isTerminal()

INLINE bool gum::StatesCounter::isTerminal ( NodeId ni) const
overridevirtual

Implements gum::IVisitableGraphLearner.

Definition at line 50 of file statesCounter_inl.h.

50{ return _counter_->isTerminalNode(ni); }

References _counter_.

◆ nodeNbObservation()

INLINE Idx gum::StatesCounter::nodeNbObservation ( NodeId ni) const
overridevirtual

Implements gum::IVisitableGraphLearner.

Definition at line 60 of file statesCounter_inl.h.

60{ return _counter_->nodeValue(ni); }

References _counter_.

◆ nodeSon()

INLINE NodeId gum::StatesCounter::nodeSon ( NodeId ni,
Idx modality ) const
overridevirtual

Implements gum::IVisitableGraphLearner.

Definition at line 56 of file statesCounter_inl.h.

56 {
57 return _counter_->node(ni)->son(modality);
58 }

References _counter_.

◆ nodeVar()

INLINE const DiscreteVariable * gum::StatesCounter::nodeVar ( NodeId ni) const
overridevirtual

Implements gum::IVisitableGraphLearner.

Definition at line 52 of file statesCounter_inl.h.

52 {
53 return _counter_->node(ni)->nodeVar();
54 }

References _counter_.

◆ reset()

void gum::StatesCounter::reset ( const Instantiation & initialState)

Definition at line 69 of file statesCounter.cpp.

69 {
70 _counter_->clear();
71 for (SequenceIteratorSafe< const DiscreteVariable* > varIter
72 = initialState.variablesSequence().beginSafe();
73 varIter != initialState.variablesSequence().endSafe();
74 ++varIter)
75 _counter_->add(**varIter);
76
77 _counter_->manager()->setRootNode(_counter_->manager()->addTerminalNode(0));
78
79 _incState_(initialState, 0, 0, 0);
80 }

References _counter_, _incState_(), and gum::Instantiation::variablesSequence().

Here is the call graph for this function:

◆ root()

INLINE NodeId gum::StatesCounter::root ( ) const
overridevirtual

Implements gum::IVisitableGraphLearner.

Definition at line 48 of file statesCounter_inl.h.

48{ return _counter_->root(); }

References _counter_.

Member Data Documentation

◆ _counter_

◆ _visitedStates_

Set< Instantiation* > gum::StatesCounter::_visitedStates_
private

Definition at line 142 of file statesCounter.h.


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