aGrUM 3.2.0
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:
[legend]
Collaboration diagram for gum::StatesCounter:
[legend]

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 DiscreteVariable * nodeVar (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(), ~StatesCounter(), and gum::AdaptiveRMaxPlaner::initialize().

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 }
const NodeId & terminalNodeId(const GUM_ELEMENT &v) const override
Returns the id of the terminal node that has the given value.
const DiscreteVariable * nodeVar() const
Returns the node variable.
NodeId addInternalNode(const DiscreteVariable *var)
Inserts a new non terminal node in graph.
void setRootNode(const NodeId &root)
Sets root node of decision diagram.
NodeId addTerminalNode(const GUM_ELEMENT &value)
Adds a value to the MultiDimFunctionGraph.
void setSon(const NodeId &node, const Idx &modality, const NodeId &sonNode)
Sets nodes son for given modality to designated son node.
const InternalNode * node(NodeId n) const
Returns internalNode structure associated to that nodeId.
MultiDimFunctionGraphManager< GUM_ELEMENT, TerminalNodePolicy > * manager()
Returns a const reference to the manager of this diagram.
Size Idx
Type for indexes.
Definition types.h:79
Size NodeId
Type for node ids.

References _counter_, gum::MultiDimFunctionGraphManager< GUM_ELEMENT, TerminalNodePolicy >::addInternalNode(), gum::MultiDimFunctionGraphManager< GUM_ELEMENT, TerminalNodePolicy >::addTerminalNode(), gum::DiscreteVariable::domainSize(), gum::MultiDimFunctionGraph< GUM_ELEMENT, TerminalNodePolicy >::manager(), gum::MultiDimFunctionGraph< GUM_ELEMENT, TerminalNodePolicy >::node(), gum::InternalNode::nodeVar(), gum::MultiDimFunctionGraphManager< GUM_ELEMENT, TerminalNodePolicy >::setRootNode(), gum::MultiDimFunctionGraphManager< GUM_ELEMENT, TerminalNodePolicy >::setSon(), gum::ExactTerminalNodePolicy< GUM_ELEMENT >::terminalNodeId(), gum::Instantiation::valFromPtr(), and gum::Instantiation::variablesSequence().

Referenced by counter(), 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 ( )

References _incState_(), insertSetOfVars(), isTerminal(), nodeNbObservation(), nodeSon(), nodeVar(), and root().

Here is the call graph for this function:

◆ 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 }
NodeId son(Idx modality) const
Returns the son at a given index.
const NodeId & root() const
Returns the id of the root node from the diagram.
bool isTerminalNode(const NodeId &node) const
Indicates if given node is terminal or not.
GUM_ELEMENT get(const Instantiation &i) const override
Returns the value pointed by i.
void _incState_(const Instantiation &, NodeId, Idx, Size)

References _counter_, _incState_(), gum::MultiDimFunctionGraph< GUM_ELEMENT, TerminalNodePolicy >::get(), gum::MultiDimFunctionGraph< GUM_ELEMENT, TerminalNodePolicy >::isTerminalNode(), gum::MultiDimFunctionGraph< GUM_ELEMENT, TerminalNodePolicy >::node(), gum::InternalNode::nodeVar(), gum::MultiDimFunctionGraph< GUM_ELEMENT, TerminalNodePolicy >::root(), gum::InternalNode::son(), and gum::Instantiation::valFromPtr().

Referenced by gum::StatisticalLazyDecider::checkState().

Here is the call graph for this function:
Here is the caller 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 }
const Sequence< const DiscreteVariable * > & variablesSequence() const override
Returns a const ref to the sequence of DiscreteVariable*.

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

Referenced by counter().

Here is the call graph for this function:
Here is the caller 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_, and gum::MultiDimFunctionGraph< GUM_ELEMENT, TerminalNodePolicy >::isTerminalNode().

Referenced by counter().

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

◆ 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); }
const GUM_ELEMENT & nodeValue(NodeId n) const
Returns value associated to given node.

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

Referenced by counter().

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

◆ 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_, gum::MultiDimFunctionGraph< GUM_ELEMENT, TerminalNodePolicy >::node(), and gum::InternalNode::son().

Referenced by counter().

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

◆ 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_, gum::MultiDimFunctionGraph< GUM_ELEMENT, TerminalNodePolicy >::node(), and gum::InternalNode::nodeVar().

Referenced by counter().

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

◆ reset()

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

Definition at line 69 of file statesCounter.cpp.

69 {
71 for (SequenceIteratorSafe< const DiscreteVariable* > varIter
72 = initialState.variablesSequence().beginSafe();
73 varIter != initialState.variablesSequence().endSafe();
74 ++varIter)
75 _counter_->add(**varIter);
76
78
79 _incState_(initialState, 0, 0, 0);
80 }
void clear()
Clears the function graph.
void add(const DiscreteVariable &v) override
Adds a new var to the variables of the multidimensional matrix.

References _counter_, _incState_(), gum::MultiDimFunctionGraph< GUM_ELEMENT, TerminalNodePolicy >::add(), gum::MultiDimFunctionGraphManager< GUM_ELEMENT, TerminalNodePolicy >::addTerminalNode(), gum::MultiDimFunctionGraph< GUM_ELEMENT, TerminalNodePolicy >::clear(), gum::MultiDimFunctionGraph< GUM_ELEMENT, TerminalNodePolicy >::manager(), gum::MultiDimFunctionGraphManager< GUM_ELEMENT, TerminalNodePolicy >::setRootNode(), and gum::Instantiation::variablesSequence().

Referenced by gum::StatisticalLazyDecider::checkState().

Here is the call graph for this function:
Here is the caller 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_, and gum::MultiDimFunctionGraph< GUM_ELEMENT, TerminalNodePolicy >::root().

Referenced by counter().

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

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: