aGrUM 2.3.2
a C++ library for (probabilistic) graphical models
gum::InfluenceDiagramGenerator< GUM_SCALAR > Class Template Reference

<agrum/ID/generator/influenceDiagramGenerator.h> More...

#include <influenceDiagramGenerator.h>

Collaboration diagram for gum::InfluenceDiagramGenerator< GUM_SCALAR >:

Public Member Functions

Constructors / Destructor
 InfluenceDiagramGenerator ()
 Default constructor.
 InfluenceDiagramGenerator (ICPTGenerator< GUM_SCALAR > *cptGenerator)
 Use this constructor if you want to use a different policy for generating CPT than the default one.
 InfluenceDiagramGenerator (UTGenerator *utGenerator)
 Use this constructor if you want to use a different policy for generating UT than the default one.
 InfluenceDiagramGenerator (ICPTGenerator< GUM_SCALAR > *cptGenerator, UTGenerator *utGenerator)
 Use this constructor if you want to use a different policy for generating both CPT & UT than the defaults ones.
 ~InfluenceDiagramGenerator ()
 Destructor.
ID generation methods
InfluenceDiagram< GUM_SCALAR > * generateID (Size nbrNodes, GUM_SCALAR arcDensity, GUM_SCALAR chanceNodeDensity, GUM_SCALAR utilityNodeDensity, Size max_modality=2)
 Generates an influence diagram using floats.

Private Member Functions

void _checkTemporalOrder_ (InfluenceDiagram< GUM_SCALAR > *infdiag)

Private Attributes

ICPTGenerator< GUM_SCALAR > * _cptGenerator_
UTGenerator_utGenerator_

Detailed Description

template<typename GUM_SCALAR>
class gum::InfluenceDiagramGenerator< GUM_SCALAR >

<agrum/ID/generator/influenceDiagramGenerator.h>

Class for generating influence diagram.

This class randomly generates an influence diagram given four parameters: the number of nodes,the probability of adding an arc between two nodes, the proportion of chance node and the proportion of utility node (the proportion of decision node is deduce from thos two)

Definition at line 75 of file influenceDiagramGenerator.h.

Constructor & Destructor Documentation

◆ InfluenceDiagramGenerator() [1/4]

template<typename GUM_SCALAR>
gum::InfluenceDiagramGenerator< GUM_SCALAR >::InfluenceDiagramGenerator ( )

Default constructor.

Use the SimpleCPTGenerator for generating the IDs CPT. Use the SimpleUTGenerator for generating the IDs UT.

Definition at line 58 of file influenceDiagramGenerator_tpl.h.

References InfluenceDiagramGenerator(), _cptGenerator_, and _utGenerator_.

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

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

◆ InfluenceDiagramGenerator() [2/4]

template<typename GUM_SCALAR>
gum::InfluenceDiagramGenerator< GUM_SCALAR >::InfluenceDiagramGenerator ( ICPTGenerator< GUM_SCALAR > * cptGenerator)
explicit

Use this constructor if you want to use a different policy for generating CPT than the default one.

The cptGenerator will be erased when the destructor is called.

Parameters
cptGeneratorThe policy used to generate CPT.

Definition at line 69 of file influenceDiagramGenerator_tpl.h.

References InfluenceDiagramGenerator(), _cptGenerator_, and _utGenerator_.

Here is the call graph for this function:

◆ InfluenceDiagramGenerator() [3/4]

template<typename GUM_SCALAR>
gum::InfluenceDiagramGenerator< GUM_SCALAR >::InfluenceDiagramGenerator ( UTGenerator * utGenerator)
explicit

Use this constructor if you want to use a different policy for generating UT than the default one.

The utGenerator will be erased when the destructor is called.

Parameters
utGeneratorThe policy used to generate UT.

Definition at line 81 of file influenceDiagramGenerator_tpl.h.

References InfluenceDiagramGenerator(), _cptGenerator_, and _utGenerator_.

Here is the call graph for this function:

◆ InfluenceDiagramGenerator() [4/4]

template<typename GUM_SCALAR>
gum::InfluenceDiagramGenerator< GUM_SCALAR >::InfluenceDiagramGenerator ( ICPTGenerator< GUM_SCALAR > * cptGenerator,
UTGenerator * utGenerator )

Use this constructor if you want to use a different policy for generating both CPT & UT than the defaults ones.

The cptGenerator and utGenerator will be erased when the destructor is called.

Parameters
cptGeneratorThe policy used to generate CPT.
utGeneratorThe policy used to generate UT.

Definition at line 94 of file influenceDiagramGenerator_tpl.h.

References InfluenceDiagramGenerator(), _cptGenerator_, and _utGenerator_.

Here is the call graph for this function:

◆ ~InfluenceDiagramGenerator()

template<typename GUM_SCALAR>
gum::InfluenceDiagramGenerator< GUM_SCALAR >::~InfluenceDiagramGenerator ( )

Destructor.

Definition at line 104 of file influenceDiagramGenerator_tpl.h.

104 {
106 delete _cptGenerator_;
107 delete _utGenerator_;
108 }

References InfluenceDiagramGenerator(), _cptGenerator_, and _utGenerator_.

Here is the call graph for this function:

Member Function Documentation

◆ _checkTemporalOrder_()

template<typename GUM_SCALAR>
void gum::InfluenceDiagramGenerator< GUM_SCALAR >::_checkTemporalOrder_ ( InfluenceDiagram< GUM_SCALAR > * infdiag)
private

Definition at line 178 of file influenceDiagramGenerator_tpl.h.

179 {
180 if (!infdiag->decisionOrderExists()) {
181 Sequence< NodeId > order = infdiag->topologicalOrder();
182
183 auto orderIter = order.begin();
184
185 while ((orderIter != order.end()) && (!infdiag->isDecisionNode(*orderIter)))
186 ++orderIter;
187
188 if (orderIter == order.end()) return;
189
190 NodeId parentDecision = (*orderIter);
191
192 ++orderIter;
193
194 for (; orderIter != order.end(); ++orderIter)
195 if (infdiag->isDecisionNode(*orderIter)) {
196 infdiag->addArc(parentDecision, (*orderIter));
197 parentDecision = (*orderIter);
198 }
199 }
200 }

References gum::InfluenceDiagram< GUM_SCALAR >::addArc(), gum::SequenceImplementation< Key, std::is_scalar< Key >::value >::begin(), gum::InfluenceDiagram< GUM_SCALAR >::decisionOrderExists(), gum::SequenceImplementation< Key, std::is_scalar< Key >::value >::end(), gum::InfluenceDiagram< GUM_SCALAR >::isDecisionNode(), and gum::DAGmodel::topologicalOrder().

Referenced by generateID().

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

◆ generateID()

template<typename GUM_SCALAR>
InfluenceDiagram< GUM_SCALAR > * gum::InfluenceDiagramGenerator< GUM_SCALAR >::generateID ( Size nbrNodes,
GUM_SCALAR arcDensity,
GUM_SCALAR chanceNodeDensity,
GUM_SCALAR utilityNodeDensity,
Size max_modality = 2 )

Generates an influence diagram using floats.

Parameters
nbrNodesThe number of nodes in the generated ID.
arcDensityThe probability of adding an arc between two nodes.
chanceNodeDensityThe proportion of chance node
utilityNodeDensityThe proportion of utility node
max_modalityEach DRV has from 2 to max_modality modalities
Returns
A IDs randomly generated.

Definition at line 119 of file influenceDiagramGenerator_tpl.h.

123 {
125 // First we add nodes
128 Size nb_mod;
129
130 for (Idx i = 0; i < nbrNodes; ++i) {
131 strBuff << i;
132 nb_mod = (max_modality == 2) ? 2 : 2 + randomValue(max_modality - 1);
133
136
137 auto d = (GUM_SCALAR)randomProba();
138
139 if (d < cnd)
140 map.insert(
141 i,
142 influenceDiagram->addChanceNode(RangeVariable(strBuff.str(), "", 0, nb_mod - 1)));
143 else if (d < (cnd + und))
144 map.insert(i, influenceDiagram->addUtilityNode(RangeVariable(strBuff.str(), "", 0, 0)));
145 else
146 map.insert(
147 i,
148 influenceDiagram->addDecisionNode(RangeVariable(strBuff.str(), "", 0, nb_mod - 1)));
149
150 strBuff.str("");
151 }
152
153 // We add arcs
155
156 for (Size i = 0; i < nbrNodes; ++i)
157 if (!influenceDiagram->isUtilityNode(map[i]))
158 for (Size j = i + 1; j < nbrNodes; ++j)
159 if (((GUM_SCALAR)randomProba()) < p) { influenceDiagram->addArc(map[i], map[j]); }
160
161 // And fill the CPTs and UTs
162 for (Size i = 0; i < nbrNodes; ++i)
163 if (influenceDiagram->isChanceNode(map[i]))
164 _cptGenerator_->generateCPT(
165 influenceDiagram->cpt(map[i]).pos(influenceDiagram->variable(map[i])),
166 influenceDiagram->cpt(map[i]));
167 else if (influenceDiagram->isUtilityNode(map[i]))
168 _utGenerator_->generateUT(
169 influenceDiagram->utility(map[i]).pos(influenceDiagram->variable(map[i])),
170 influenceDiagram->utility(map[i]));
171
173
174 return influenceDiagram;
175 }
void _checkTemporalOrder_(InfluenceDiagram< GUM_SCALAR > *infdiag)
double randomProba()
Returns a random double between 0 and 1 included (i.e.

References _checkTemporalOrder_(), _cptGenerator_, _utGenerator_, gum::HashTable< Key, Val >::insert(), gum::randomProba(), and gum::randomValue().

Here is the call graph for this function:

Member Data Documentation

◆ _cptGenerator_

template<typename GUM_SCALAR>
ICPTGenerator< GUM_SCALAR >* gum::InfluenceDiagramGenerator< GUM_SCALAR >::_cptGenerator_
private

◆ _utGenerator_


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