aGrUM 3.1.1
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<GUM_Numeric 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<GUM_Numeric 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 59 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<GUM_Numeric 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 70 of file influenceDiagramGenerator_tpl.h.

References InfluenceDiagramGenerator(), _cptGenerator_, and _utGenerator_.

Here is the call graph for this function:

◆ InfluenceDiagramGenerator() [3/4]

template<GUM_Numeric 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 82 of file influenceDiagramGenerator_tpl.h.

References InfluenceDiagramGenerator(), _cptGenerator_, and _utGenerator_.

Here is the call graph for this function:

◆ InfluenceDiagramGenerator() [4/4]

template<GUM_Numeric 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 95 of file influenceDiagramGenerator_tpl.h.

References InfluenceDiagramGenerator(), _cptGenerator_, and _utGenerator_.

Here is the call graph for this function:

◆ ~InfluenceDiagramGenerator()

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

Destructor.

Definition at line 105 of file influenceDiagramGenerator_tpl.h.

105 {
107 delete _cptGenerator_;
108 delete _utGenerator_;
109 }

References InfluenceDiagramGenerator(), _cptGenerator_, and _utGenerator_.

Here is the call graph for this function:

Member Function Documentation

◆ _checkTemporalOrder_()

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

Definition at line 172 of file influenceDiagramGenerator_tpl.h.

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

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<GUM_Numeric 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 120 of file influenceDiagramGenerator_tpl.h.

124 {
126 // First we add nodes
128 Size nb_mod;
129
130 for (Idx i = 0; i < nbrNodes; ++i) {
131 const auto varName = std::format("{}", 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(i, influenceDiagram->addChanceNode(RangeVariable(varName, "", 0, nb_mod - 1)));
141 else if (d < (cnd + und))
142 map.insert(i, influenceDiagram->addUtilityNode(RangeVariable(varName, "", 0, 0)));
143 else
144 map.insert(i, influenceDiagram->addDecisionNode(RangeVariable(varName, "", 0, nb_mod - 1)));
145 }
146
147 // We add arcs
149
150 for (Size i = 0; i < nbrNodes; ++i)
151 if (!influenceDiagram->isUtilityNode(map[i]))
152 for (Size j = i + 1; j < nbrNodes; ++j)
153 if (((GUM_SCALAR)randomProba()) < p) { influenceDiagram->addArc(map[i], map[j]); }
154
155 // And fill the CPTs and UTs
156 for (Size i = 0; i < nbrNodes; ++i)
157 if (influenceDiagram->isChanceNode(map[i]))
158 _cptGenerator_->generateCPT(
159 influenceDiagram->cpt(map[i]).pos(influenceDiagram->variable(map[i])),
160 influenceDiagram->cpt(map[i]));
161 else if (influenceDiagram->isUtilityNode(map[i]))
162 _utGenerator_->generateUT(
163 influenceDiagram->utility(map[i]).pos(influenceDiagram->variable(map[i])),
164 influenceDiagram->utility(map[i]));
165
167
168 return influenceDiagram;
169 }
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<GUM_Numeric GUM_SCALAR>
ICPTGenerator< GUM_SCALAR >* gum::InfluenceDiagramGenerator< GUM_SCALAR >::_cptGenerator_
private

◆ _utGenerator_


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