aGrUM  0.16.0
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. More...
 
 ~StatesCounter ()
 Default destructor. More...
 
Miscelleanous methods
void incState (const Instantiation &)
 
void reset (const Instantiation &)
 
const MultiDimFunctionGraph< int > * counter ()
 
Visit Methods
NodeId root () const
 
bool isTerminal (NodeId ni) const
 
const DiscreteVariablenodeVar (NodeId ni) const
 
NodeId nodeSon (NodeId ni, Idx modality) const
 
Idx nodeNbObservation (NodeId ni) const
 
void insertSetOfVars (MultiDimFunctionGraph< double > *ret) const
 

Detailed Description

<agrum/FMDP/simulation/statesCounter.h>

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

Definition at line 51 of file statesCounter.h.

Constructor & Destructor Documentation

◆ StatesCounter()

gum::StatesCounter::StatesCounter ( )

Default constructor.

Definition at line 32 of file statesCounter.cpp.

32  :
34  GUM_CONSTRUCTOR(StatesCounter);
35  }
MultiDimFunctionGraph< Size > * __counter
static MultiDimFunctionGraph< Size, ExactTerminalNodePolicy > * getTreeInstance()
Returns an arborescent instance.
StatesCounter()
Default constructor.

◆ ~StatesCounter()

gum::StatesCounter::~StatesCounter ( )

Default destructor.

Definition at line 41 of file statesCounter.cpp.

References __counter.

41  {
42  delete __counter;
43  GUM_DESTRUCTOR(StatesCounter);
44  }
MultiDimFunctionGraph< Size > * __counter
StatesCounter()
Default constructor.

Member Function Documentation

◆ __incState()

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

Definition at line 83 of file statesCounter.cpp.

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

Referenced by incState(), insertSetOfVars(), and reset().

86  {
87  Idx varIter = 0;
88  if (parentId)
89  varIter =
90  state.variablesSequence().pos(__counter->node(parentId)->nodeVar()) + 1;
91 
92 
93  for (; varIter < state.variablesSequence().size(); ++varIter) {
94  const DiscreteVariable* curVar = state.variablesSequence().atPos(varIter);
95  NodeId varId = __counter->manager()->addInternalNode(curVar);
96  if (parentId)
97  __counter->manager()->setSon(parentId, parentModa, varId);
98  else
99  __counter->manager()->setRootNode(varId);
100  for (Idx moda = 0; moda < curVar->domainSize(); ++moda) {
101  if (moda == state.valFromPtr(curVar))
102  parentModa = moda;
103  else
105  varId, moda, __counter->terminalNodeId(nbVisits));
106  }
107  parentId = varId;
108  }
110  parentId, parentModa, __counter->manager()->addTerminalNode(nbVisits + 1));
111  }
void setSon(const NodeId &node, const Idx &modality, const NodeId &sonNode)
Sets nodes son for given modality to designated son node.
void setRootNode(const NodeId &root)
Sets root node of decision diagram.
const InternalNode * node(NodeId n) const
Returns internalNode structure associated to that nodeId.
const DiscreteVariable * nodeVar() const
Returns the node variable.
const NodeId & terminalNodeId(const GUM_SCALAR &v) const
Returns the id of the terminal node that has the given value.
NodeId addInternalNode(const DiscreteVariable *var)
Inserts a new non terminal node in graph.
MultiDimFunctionGraph< Size > * __counter
NodeId addTerminalNode(const GUM_SCALAR &value)
Adds a value to the MultiDimFunctionGraph.
MultiDimFunctionGraphManager< GUM_SCALAR, TerminalNodePolicy > * manager()
Returns a const reference to the manager of this diagram.
Size NodeId
Type for node ids.
Definition: graphElements.h:98
+ 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 67 of file statesCounter.cpp.

References __counter, __incState(), gum::MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy >::get(), gum::MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy >::isTerminalNode(), gum::MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy >::node(), gum::InternalNode::nodeVar(), gum::MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy >::root(), gum::InternalNode::son(), and gum::Instantiation::valFromPtr().

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

67  {
68  Idx nbVisits = __counter->get(state);
69 
70  NodeId parId = __counter->root();
71  Idx parModa = state.valFromPtr(__counter->node(parId)->nodeVar());
72  while (!__counter->isTerminalNode(__counter->node(parId)->son(parModa))) {
73  parId = __counter->node(parId)->son(parModa);
74  parModa = state.valFromPtr(__counter->node(parId)->nodeVar());
75  }
76  __incState(state, parId, parModa, nbVisits);
77  }
bool isTerminalNode(const NodeId &node) const
Indicates if given node is terminal or not.
const InternalNode * node(NodeId n) const
Returns internalNode structure associated to that nodeId.
const DiscreteVariable * nodeVar() const
Returns the node variable.
NodeId son(Idx modality) const
Returns the son at a given index.
MultiDimFunctionGraph< Size > * __counter
const NodeId & root() const
Returns the id of the root node from the diagram.
void __incState(const Instantiation &, NodeId, Idx, Size)
virtual GUM_SCALAR get(const Instantiation &i) const
Returns the value pointed by i.
Size NodeId
Type for node ids.
Definition: graphElements.h:98
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ insertSetOfVars()

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

Implements gum::IVisitableGraphLearner.

Definition at line 118 of file statesCounter.h.

References __counter, __incState(), gum::MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy >::add(), and gum::MultiDimImplementation< GUM_SCALAR >::variablesSequence().

118  {
119  for (SequenceIteratorSafe< const DiscreteVariable* > varIter =
120  __counter->variablesSequence().beginSafe();
121  varIter != __counter->variablesSequence().endSafe();
122  ++varIter)
123  ret->add(**varIter);
124  }
virtual void add(const DiscreteVariable &v)
Adds a new var to the variables of the multidimensional matrix.
MultiDimFunctionGraph< Size > * __counter
virtual const Sequence< const DiscreteVariable *> & variablesSequence() const override
Returns a const ref to the sequence of DiscreteVariable*.
+ Here is the call graph for this function:

◆ isTerminal()

bool gum::StatesCounter::isTerminal ( NodeId  ni) const
inlinevirtual

Implements gum::IVisitableGraphLearner.

Definition at line 97 of file statesCounter.h.

References __counter, and gum::MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy >::isTerminalNode().

97 { return __counter->isTerminalNode(ni); }
bool isTerminalNode(const NodeId &node) const
Indicates if given node is terminal or not.
MultiDimFunctionGraph< Size > * __counter
+ Here is the call graph for this function:

◆ nodeNbObservation()

Idx gum::StatesCounter::nodeNbObservation ( NodeId  ni) const
inlinevirtual

Implements gum::IVisitableGraphLearner.

Definition at line 116 of file statesCounter.h.

References __counter, and gum::MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy >::nodeValue().

116 { return __counter->nodeValue(ni); }
const GUM_SCALAR & nodeValue(NodeId n) const
Returns value associated to given node.
MultiDimFunctionGraph< Size > * __counter
+ Here is the call graph for this function:

◆ nodeSon()

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

Implements gum::IVisitableGraphLearner.

Definition at line 109 of file statesCounter.h.

References __counter, gum::MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy >::node(), and gum::InternalNode::son().

109  {
110  return __counter->node(ni)->son(modality);
111  }
const InternalNode * node(NodeId n) const
Returns internalNode structure associated to that nodeId.
NodeId son(Idx modality) const
Returns the son at a given index.
MultiDimFunctionGraph< Size > * __counter
+ Here is the call graph for this function:

◆ nodeVar()

const DiscreteVariable* gum::StatesCounter::nodeVar ( NodeId  ni) const
inlinevirtual

Implements gum::IVisitableGraphLearner.

Definition at line 102 of file statesCounter.h.

References __counter, gum::MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy >::node(), and gum::InternalNode::nodeVar().

102  {
103  return __counter->node(ni)->nodeVar();
104  }
const InternalNode * node(NodeId n) const
Returns internalNode structure associated to that nodeId.
const DiscreteVariable * nodeVar() const
Returns the node variable.
MultiDimFunctionGraph< Size > * __counter
+ Here is the call graph for this function:

◆ reset()

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

Definition at line 50 of file statesCounter.cpp.

References __counter, __incState(), gum::MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy >::add(), gum::MultiDimFunctionGraphManager< GUM_SCALAR, TerminalNodePolicy >::addTerminalNode(), gum::MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy >::clear(), gum::MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy >::manager(), gum::MultiDimFunctionGraphManager< GUM_SCALAR, TerminalNodePolicy >::setRootNode(), and gum::Instantiation::variablesSequence().

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

50  {
51  __counter->clear();
52  for (SequenceIteratorSafe< const DiscreteVariable* > varIter =
53  initialState.variablesSequence().beginSafe();
54  varIter != initialState.variablesSequence().endSafe();
55  ++varIter)
56  __counter->add(**varIter);
57 
59 
60  __incState(initialState, 0, 0, 0);
61  }
void setRootNode(const NodeId &root)
Sets root node of decision diagram.
virtual void add(const DiscreteVariable &v)
Adds a new var to the variables of the multidimensional matrix.
MultiDimFunctionGraph< Size > * __counter
void __incState(const Instantiation &, NodeId, Idx, Size)
NodeId addTerminalNode(const GUM_SCALAR &value)
Adds a value to the MultiDimFunctionGraph.
MultiDimFunctionGraphManager< GUM_SCALAR, TerminalNodePolicy > * manager()
Returns a const reference to the manager of this diagram.
void clear()
Clears the function graph.
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ root()

NodeId gum::StatesCounter::root ( ) const
inlinevirtual

Implements gum::IVisitableGraphLearner.

Definition at line 92 of file statesCounter.h.

References __counter, and gum::MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy >::root().

92 { return __counter->root(); }
MultiDimFunctionGraph< Size > * __counter
const NodeId & root() const
Returns the id of the root node from the diagram.
+ Here is the call graph for this function:

Member Data Documentation

◆ __counter

MultiDimFunctionGraph< Size >* gum::StatesCounter::__counter
private

◆ __visitedStates

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

Definition at line 134 of file statesCounter.h.


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