aGrUM  0.14.2
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. More...
 
 InfluenceDiagramGenerator (ICPTGenerator< GUM_SCALAR > *cptGenerator)
 Use this constructor if you want to use a different policy for generating CPT than the default one. More...
 
 InfluenceDiagramGenerator (UTGenerator *utGenerator)
 Use this constructor if you want to use a different policy for generating UT than the default one. More...
 
 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. More...
 
 ~InfluenceDiagramGenerator ()
 Destructor. More...
 
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. More...
 

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 53 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 33 of file influenceDiagramGenerator_tpl.h.

33  {
34  GUM_CONSTRUCTOR(InfluenceDiagramGenerator);
35  __cptGenerator = new SimpleCPTGenerator< GUM_SCALAR >();
36  __utGenerator = new SimpleUTGenerator();
37  }
ICPTGenerator< GUM_SCALAR > * __cptGenerator

◆ 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 44 of file influenceDiagramGenerator_tpl.h.

45  {
46  GUM_CONSTRUCTOR(InfluenceDiagramGenerator);
47  __cptGenerator = cptGenerator;
48  __utGenerator = new SimpleUTGenerator();
49  }
ICPTGenerator< GUM_SCALAR > * __cptGenerator

◆ 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 56 of file influenceDiagramGenerator_tpl.h.

57  {
58  GUM_CONSTRUCTOR(InfluenceDiagramGenerator);
59  __cptGenerator = new SimpleCPTGenerator< GUM_SCALAR >();
60  __utGenerator = utGenerator;
61  }
ICPTGenerator< GUM_SCALAR > * __cptGenerator

◆ 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 70 of file influenceDiagramGenerator_tpl.h.

71  {
72  GUM_CONSTRUCTOR(InfluenceDiagramGenerator);
73  __cptGenerator = cptGenerator;
74  __utGenerator = utGenerator;
75  }
ICPTGenerator< GUM_SCALAR > * __cptGenerator

◆ ~InfluenceDiagramGenerator()

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

Destructor.

Definition at line 79 of file influenceDiagramGenerator_tpl.h.

79  {
80  GUM_DESTRUCTOR(InfluenceDiagramGenerator);
81  delete __cptGenerator;
82  delete __utGenerator;
83  }
ICPTGenerator< GUM_SCALAR > * __cptGenerator

Member Function Documentation

◆ __checkTemporalOrder()

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

Definition at line 159 of file influenceDiagramGenerator_tpl.h.

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

160  {
161  if (!infdiag->decisionOrderExists()) {
162  Sequence< NodeId > order = infdiag->topologicalOrder(true);
163 
164  auto orderIter = order.begin();
165 
166  while ((orderIter != order.end()) && (!infdiag->isDecisionNode(*orderIter)))
167  ++orderIter;
168 
169  if (orderIter == order.end()) return;
170 
171  NodeId parentDecision = (*orderIter);
172 
173  ++orderIter;
174 
175  for (; orderIter != order.end(); ++orderIter)
176  if (infdiag->isDecisionNode(*orderIter)) {
177  infdiag->addArc(parentDecision, (*orderIter));
178  parentDecision = (*orderIter);
179  }
180  }
181  }
iterator begin() const
Returns an unsafe begin iterator.
Definition: sequence_tpl.h:654
const iterator & end() const noexcept
Returns the unsafe end iterator.
Definition: sequence_tpl.h:661
Size NodeId
Type for node ids.
Definition: graphElements.h:97
+ Here is the call 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 94 of file influenceDiagramGenerator_tpl.h.

References gum::InfluenceDiagram< GUM_SCALAR >::addArc(), gum::InfluenceDiagram< GUM_SCALAR >::addChanceNode(), gum::InfluenceDiagram< GUM_SCALAR >::addDecisionNode(), gum::InfluenceDiagram< GUM_SCALAR >::addUtilityNode(), gum::InfluenceDiagram< GUM_SCALAR >::cpt(), gum::InfluenceDiagram< GUM_SCALAR >::isChanceNode(), gum::InfluenceDiagram< GUM_SCALAR >::isUtilityNode(), gum::InfluenceDiagram< GUM_SCALAR >::utility(), and gum::InfluenceDiagram< GUM_SCALAR >::variable().

99  {
100  InfluenceDiagram< GUM_SCALAR >* influenceDiagram =
101  new InfluenceDiagram< GUM_SCALAR >();
102  // First we add nodes
104  std::stringstream strBuff;
105  Size nb_mod;
106 
107  for (Idx i = 0; i < nbrNodes; ++i) {
108  strBuff << i;
109  nb_mod = (max_modality == 2) ? 2 : 2 + rand() % (max_modality - 1);
110 
111  GUM_SCALAR cnd = chanceNodeDensity * (GUM_SCALAR)RAND_MAX;
112  GUM_SCALAR und = utilityNodeDensity * (GUM_SCALAR)RAND_MAX;
113 
114  GUM_SCALAR d = (GUM_SCALAR)rand();
115 
116  if (d < cnd)
117  map.insert(i,
118  influenceDiagram->addChanceNode(
119  LabelizedVariable(strBuff.str(), "", nb_mod)));
120  else if (d < (cnd + und))
121  map.insert(i,
122  influenceDiagram->addUtilityNode(
123  LabelizedVariable(strBuff.str(), "", 1)));
124  else
125  map.insert(i,
126  influenceDiagram->addDecisionNode(
127  LabelizedVariable(strBuff.str(), "", nb_mod)));
128 
129  strBuff.str("");
130  }
131 
132  // We add arcs
133  GUM_SCALAR p = arcDensity * (GUM_SCALAR)RAND_MAX;
134 
135  for (Size i = 0; i < nbrNodes; ++i)
136  if (!influenceDiagram->isUtilityNode(map[i]))
137  for (Size j = i + 1; j < nbrNodes; ++j)
138  if (((GUM_SCALAR)rand()) < p) {
139  influenceDiagram->addArc(map[i], map[j]);
140  }
141 
142  // And fill the CPTs and UTs
143  for (Size i = 0; i < nbrNodes; ++i)
144  if (influenceDiagram->isChanceNode(map[i]))
145  __cptGenerator->generateCPT(
146  influenceDiagram->cpt(map[i]).pos(influenceDiagram->variable(map[i])),
147  influenceDiagram->cpt(map[i]));
148  else if (influenceDiagram->isUtilityNode(map[i]))
149  __utGenerator->generateUT(influenceDiagram->utility(map[i]).pos(
150  influenceDiagram->variable(map[i])),
151  influenceDiagram->utility(map[i]));
152 
153  __checkTemporalOrder(influenceDiagram);
154 
155  return influenceDiagram;
156  }
void __checkTemporalOrder(InfluenceDiagram< GUM_SCALAR > *infdiag)
ICPTGenerator< GUM_SCALAR > * __cptGenerator
virtual void generateUT(const Idx &varId, const Potential< float > &ut)=0
Generates a UT using floats.
std::size_t Size
In aGrUM, hashed values are unsigned long int.
Definition: types.h:45
+ 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

Definition at line 123 of file influenceDiagramGenerator.h.

◆ __utGenerator

template<typename GUM_SCALAR >
UTGenerator* gum::InfluenceDiagramGenerator< GUM_SCALAR >::__utGenerator
private

Definition at line 125 of file influenceDiagramGenerator.h.


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