aGrUM  0.16.0
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 56 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 36 of file influenceDiagramGenerator_tpl.h.

36  {
37  GUM_CONSTRUCTOR(InfluenceDiagramGenerator);
38  __cptGenerator = new SimpleCPTGenerator< GUM_SCALAR >();
39  __utGenerator = new SimpleUTGenerator();
40  }
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 47 of file influenceDiagramGenerator_tpl.h.

48  {
49  GUM_CONSTRUCTOR(InfluenceDiagramGenerator);
50  __cptGenerator = cptGenerator;
51  __utGenerator = new SimpleUTGenerator();
52  }
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 59 of file influenceDiagramGenerator_tpl.h.

60  {
61  GUM_CONSTRUCTOR(InfluenceDiagramGenerator);
62  __cptGenerator = new SimpleCPTGenerator< GUM_SCALAR >();
63  __utGenerator = utGenerator;
64  }
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 73 of file influenceDiagramGenerator_tpl.h.

74  {
75  GUM_CONSTRUCTOR(InfluenceDiagramGenerator);
76  __cptGenerator = cptGenerator;
77  __utGenerator = utGenerator;
78  }
ICPTGenerator< GUM_SCALAR > * __cptGenerator

◆ ~InfluenceDiagramGenerator()

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

Destructor.

Definition at line 82 of file influenceDiagramGenerator_tpl.h.

82  {
83  GUM_DESTRUCTOR(InfluenceDiagramGenerator);
84  delete __cptGenerator;
85  delete __utGenerator;
86  }
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 162 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().

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

102  {
103  InfluenceDiagram< GUM_SCALAR >* influenceDiagram =
104  new InfluenceDiagram< GUM_SCALAR >();
105  // First we add nodes
107  std::stringstream strBuff;
108  Size nb_mod;
109 
110  for (Idx i = 0; i < nbrNodes; ++i) {
111  strBuff << i;
112  nb_mod = (max_modality == 2) ? 2 : 2 + rand() % (max_modality - 1);
113 
114  GUM_SCALAR cnd = chanceNodeDensity * (GUM_SCALAR)RAND_MAX;
115  GUM_SCALAR und = utilityNodeDensity * (GUM_SCALAR)RAND_MAX;
116 
117  GUM_SCALAR d = (GUM_SCALAR)rand();
118 
119  if (d < cnd)
120  map.insert(i,
121  influenceDiagram->addChanceNode(
122  LabelizedVariable(strBuff.str(), "", nb_mod)));
123  else if (d < (cnd + und))
124  map.insert(i,
125  influenceDiagram->addUtilityNode(
126  LabelizedVariable(strBuff.str(), "", 1)));
127  else
128  map.insert(i,
129  influenceDiagram->addDecisionNode(
130  LabelizedVariable(strBuff.str(), "", nb_mod)));
131 
132  strBuff.str("");
133  }
134 
135  // We add arcs
136  GUM_SCALAR p = arcDensity * (GUM_SCALAR)RAND_MAX;
137 
138  for (Size i = 0; i < nbrNodes; ++i)
139  if (!influenceDiagram->isUtilityNode(map[i]))
140  for (Size j = i + 1; j < nbrNodes; ++j)
141  if (((GUM_SCALAR)rand()) < p) {
142  influenceDiagram->addArc(map[i], map[j]);
143  }
144 
145  // And fill the CPTs and UTs
146  for (Size i = 0; i < nbrNodes; ++i)
147  if (influenceDiagram->isChanceNode(map[i]))
148  __cptGenerator->generateCPT(
149  influenceDiagram->cpt(map[i]).pos(influenceDiagram->variable(map[i])),
150  influenceDiagram->cpt(map[i]));
151  else if (influenceDiagram->isUtilityNode(map[i]))
152  __utGenerator->generateUT(influenceDiagram->utility(map[i]).pos(
153  influenceDiagram->variable(map[i])),
154  influenceDiagram->utility(map[i]));
155 
156  __checkTemporalOrder(influenceDiagram);
157 
158  return influenceDiagram;
159  }
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:48
+ 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 126 of file influenceDiagramGenerator.h.

◆ __utGenerator

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

Definition at line 128 of file influenceDiagramGenerator.h.


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