aGrUM  0.17.2
a C++ library for (probabilistic) graphical models
BayesNet.h
Go to the documentation of this file.
1 
30 #ifndef GUM_BAYES_NET_H
31 #define GUM_BAYES_NET_H
32 
33 #include <utility>
34 
35 #include <agrum/agrum.h>
36 
38 
39 #include <agrum/BN/IBayesNet.h>
41 
42 namespace gum {
43 
44  template < typename GUM_SCALAR >
46 
77  template < typename GUM_SCALAR >
78  class BayesNet: public IBayesNet< GUM_SCALAR > {
79  friend class BayesNetFactory< GUM_SCALAR >;
80 
81  public:
104  static BayesNet< GUM_SCALAR > fastPrototype(const std::string& dotlike,
105  Size domainSize = 2);
106 
107  // ===========================================================================
109  // ===========================================================================
111 
115  BayesNet();
116 
122  explicit BayesNet(std::string name);
123 
127  virtual ~BayesNet() final;
128 
132  BayesNet(const BayesNet< GUM_SCALAR >& source);
133 
135  // ===========================================================================
137  // ===========================================================================
139 
146  BayesNet< GUM_SCALAR >& operator=(const BayesNet< GUM_SCALAR >& source);
147 
149  // ===========================================================================
151  // ===========================================================================
153 
161  const Potential< GUM_SCALAR >& cpt(NodeId varId) const final;
162 
166  const Potential< GUM_SCALAR >& cpt(const std::string& name) const {
167  return cpt(idFromName(name));
168  };
169 
175  const VariableNodeMap& variableNodeMap() const final;
176 
192  NodeId add(const DiscreteVariable& var);
193 
205  NodeId add(const std::string& name, unsigned int nbrmod);
206 
222  NodeId add(const DiscreteVariable& var,
224 
242  NodeId add(const DiscreteVariable& var, NodeId id);
243 
259  NodeId add(const DiscreteVariable& var,
261  NodeId id);
262 
266  void clear();
267 
278  void erase(NodeId varId);
279 
283  void erase(const std::string& name) { erase(idFromName(name)); };
284 
295  void erase(const DiscreteVariable& var);
296 
307  const DiscreteVariable& variable(NodeId id) const final;
308 
313  const DiscreteVariable& variable(const std::string& name) const {
314  return variable(idFromName(name));
315  };
316 
326  void changeVariableName(NodeId id, const std::string& new_name);
327 
331  void changeVariableName(const std::string& name, const std::string& new_name) {
332  changeVariableName(idFromName(name), new_name);
333  }
334 
345  void changeVariableLabel(NodeId id,
346  const std::string& old_label,
347  const std::string& new_label);
348 
352  void changeVariableLabel(const std::string& name,
353  const std::string& old_label,
354  const std::string& new_label) {
355  changeVariableLabel(idFromName(name), old_label, new_label);
356  }
357 
366  NodeId nodeId(const DiscreteVariable& var) const final;
367 
376  NodeId idFromName(const std::string& name) const final;
377 
387  const DiscreteVariable& variableFromName(const std::string& name) const final;
389 
390  // ===========================================================================
392  // ===========================================================================
394 
403  void addArc(NodeId tail, NodeId head);
404 
410  void addArc(const std::string& tail, const std::string& head);
411 
418  void eraseArc(const Arc& arc);
419 
427  void eraseArc(NodeId tail, NodeId head);
428 
432  void eraseArc(const std::string& tail, const std::string& head) {
433  eraseArc(idFromName(tail), idFromName(head));
434  }
435 
453 
463  void reverseArc(NodeId tail, NodeId head);
465  void reverseArc(const std::string& tail, const std::string& head) {
466  reverseArc(idFromName(tail), idFromName(head));
467  }
468  void reverseArc(const Arc& arc);
470 
472 
473  // ===========================================================================
475  // ===========================================================================
477 
494  NodeId addNoisyOR(const DiscreteVariable& var, GUM_SCALAR external_weight);
495  NodeId addNoisyORNet(const DiscreteVariable& var, GUM_SCALAR external_weight);
497  GUM_SCALAR external_weight);
517  GUM_SCALAR external_weight,
518  NodeId id);
520  GUM_SCALAR external_weight,
521  NodeId id);
523  GUM_SCALAR external_weight,
524  NodeId id);
538  GUM_SCALAR external_weight,
539  NodeId id);
540 
549  NodeId addNoisyAND(const DiscreteVariable& var, GUM_SCALAR external_weight);
550 
561  NodeId addLogit(const DiscreteVariable& var,
562  GUM_SCALAR external_weight,
563  NodeId id);
564 
573  NodeId addLogit(const DiscreteVariable& var, GUM_SCALAR external_weight);
574 
586  NodeId addOR(const DiscreteVariable& var);
587 
599  NodeId addAND(const DiscreteVariable& var);
600 
606  NodeId addCOUNT(const DiscreteVariable& var, Idx value = 1);
607  NodeId addEXISTS(const DiscreteVariable& var, Idx value = 1);
608  NodeId addFORALL(const DiscreteVariable& var, Idx value = 1);
609  NodeId addMAX(const DiscreteVariable& var);
610  NodeId addMEDIAN(const DiscreteVariable& var);
611  NodeId addMIN(const DiscreteVariable& var);
624  void addWeightedArc(NodeId tail, NodeId head, GUM_SCALAR causalWeight);
625 
636  void addWeightedArc(const std::string& tail,
637  const std::string& head,
638  GUM_SCALAR causalWeight) {
639  addWeightedArc(idFromName(tail), idFromName(head), causalWeight);
640  };
642 
644  void generateCPTs() const;
645 
647  void generateCPT(NodeId node) const;
648  void generateCPT(const std::string& name) const {
649  generateCPT(idFromName(name));
650  };
651 
657  void changePotential(const std::string& name, Potential< GUM_SCALAR >* newPot);
658 
659  private:
661  void __clearPotentials();
662 
664  void __copyPotentials(const BayesNet< GUM_SCALAR >& source);
665 
668 
671  // HashTable<NodeId, Potential<GUM_SCALAR>* > __probaMap;
672 
678 
679  public:
684  };
685 
687  template < typename GUM_SCALAR >
688  std::ostream& operator<<(std::ostream& output, const BayesNet< GUM_SCALAR >& bn);
689 
690 
691 #ifndef GUM_NO_EXTERN_TEMPLATE_CLASS
692  extern template class BayesNet< double >;
693 #endif
694 
695 } /* namespace gum */
696 
697 #include <agrum/BN/BayesNet_tpl.h>
698 
699 #endif /* GUM_BAYES_NET_H */
void addArc(NodeId tail, NodeId head)
Add an arc in the BN, and update arc.head&#39;s CPT.
Definition: BayesNet_tpl.h:369
aGrUM&#39;s Potential is a multi-dimensional array with tensor operators.
Definition: potential.h:60
Class representing a Bayesian Network.
Definition: BayesNet.h:78
void changeVariableName(const std::string &name, const std::string &new_name)
Changes a variable&#39;s name.
Definition: BayesNet.h:331
NodeId addCOUNT(const DiscreteVariable &var, Idx value=1)
Others aggregators.
Definition: BayesNet_tpl.h:494
NodeId addNoisyOR(const DiscreteVariable &var, GUM_SCALAR external_weight)
Add a variable, it&#39;s associate node and a gum::noisyOR implementation.
Definition: BayesNet_tpl.h:542
void changeVariableName(NodeId id, const std::string &new_name)
Changes a variable&#39;s name in the gum::BayesNet.
Definition: BayesNet_tpl.h:219
const DiscreteVariable & variable(NodeId id) const final
Returns a gum::DiscreteVariable given its gum::NodeId in the gum::BayesNet.
Definition: BayesNet_tpl.h:213
void reverseArc(const std::string &tail, const std::string &head)
Reverses an arc while preserving the same joint distribution.
Definition: BayesNet.h:465
NodeId add(const DiscreteVariable &var)
Add a variable to the gum::BayesNet.
Definition: BayesNet_tpl.h:243
VariableNodeMap __varMap
the map between variable and id
Definition: BayesNet.h:667
NodeId addAMPLITUDE(const DiscreteVariable &var)
Others aggregators.
Definition: BayesNet_tpl.h:482
Container used to map discrete variables with nodes.
STL namespace.
BayesNet()
Default constructor.
Definition: BayesNet_tpl.h:171
void erase(const std::string &name)
Removes a variable from the gum::BayesNet.
Definition: BayesNet.h:283
Copyright 2005-2020 Pierre-Henri WUILLEMIN () et Christophe GONZALES () info_at_agrum_dot_org.
Copyright 2005-2020 Pierre-Henri WUILLEMIN () et Christophe GONZALES () info_at_agrum_dot_org.
NodeId addLogit(const DiscreteVariable &var, GUM_SCALAR external_weight, NodeId id)
Add a variable, its associate node and a Logit implementation.
Definition: BayesNet_tpl.h:586
NodeId addAND(const DiscreteVariable &var)
Add a variable, it&#39;s associate node and an AND implementation.
Definition: BayesNet_tpl.h:487
void clear()
clear the whole Bayes net *
Definition: BayesNet_tpl.h:359
void generateCPT(NodeId node) const
randomly generate CPT for a given node in a given structure
Definition: BayesNet_tpl.h:685
Base class for discrete random variable.
Class representing the minimal interface for Bayesian Network.
Definition: IBayesNet.h:62
Copyright 2005-2020 Pierre-Henri WUILLEMIN () et Christophe GONZALES () info_at_agrum_dot_org.
Definition: agrum.h:25
NodeId addFORALL(const DiscreteVariable &var, Idx value=1)
Others aggregators.
Definition: BayesNet_tpl.h:508
static BayesNet< GUM_SCALAR > fastPrototype(const std::string &dotlike, Size domainSize=2)
Create a Bayesian network with a dot-like syntax which specifies:
Definition: BayesNet_tpl.h:138
void eraseArc(const std::string &tail, const std::string &head)
Removes an arc in the BN, and update head&#39;s CTP.
Definition: BayesNet.h:432
The class for generic Hash Tables.
Definition: hashTable.h:679
void addWeightedArc(NodeId tail, NodeId head, GUM_SCALAR causalWeight)
Add an arc in the BN, and update arc.head&#39;s CPT.
Definition: BayesNet_tpl.h:607
NodeId addNoisyORNet(const DiscreteVariable &var, GUM_SCALAR external_weight)
Add a variable, it&#39;s associate node and a gum::noisyOR implementation.
Definition: BayesNet_tpl.h:554
void beginTopologyTransformation()
When inserting/removing arcs, node CPTs change their dimension with a cost in time.
Definition: BayesNet_tpl.h:634
const DiscreteVariable & variableFromName(const std::string &name) const final
Returns a variable given its name in the gum::BayesNet.
Definition: BayesNet_tpl.h:320
void _unsafeChangePotential(NodeId id, Potential< GUM_SCALAR > *newPot)
change the CPT associated to nodeId to newPot delete the old CPT associated to nodeId.
Definition: BayesNet_tpl.h:713
Copyright 2005-2020 Pierre-Henri WUILLEMIN () et Christophe GONZALES () info_at_agrum_dot_org.
const VariableNodeMap & variableNodeMap() const final
Returns a map between variables and nodes of this gum::BayesNet.
Definition: BayesNet_tpl.h:331
NodeId addNoisyAND(const DiscreteVariable &var, GUM_SCALAR external_weight, NodeId id)
Add a variable, its associate node and a noisyAND implementation.
Definition: BayesNet_tpl.h:579
The base class for all directed edgesThis class is used as a basis for manipulating all directed edge...
NodeId addOR(const DiscreteVariable &var)
Add a variable, it&#39;s associate node and an OR implementation.
Definition: BayesNet_tpl.h:531
void generateCPT(const std::string &name) const
Definition: BayesNet.h:648
NodeProperty< Potential< GUM_SCALAR > *> __probaMap
Mapping between the variable&#39;s id and their CPT.
Definition: BayesNet.h:670
void generateCPTs() const
randomly generates CPTs for a given structure
Definition: BayesNet_tpl.h:679
NodeId addEXISTS(const DiscreteVariable &var, Idx value=1)
Others aggregators.
Definition: BayesNet_tpl.h:500
const Potential< GUM_SCALAR > & cpt(NodeId varId) const final
Returns the CPT of a variable.
Definition: BayesNet_tpl.h:326
void addWeightedArc(const std::string &tail, const std::string &head, GUM_SCALAR causalWeight)
Add an arc in the BN, and update arc.head&#39;s CPT.
Definition: BayesNet.h:636
void changeVariableLabel(NodeId id, const std::string &old_label, const std::string &new_label)
Changes a variable&#39;s label in the gum::BayesNet.
Definition: BayesNet_tpl.h:225
NodeId addMAX(const DiscreteVariable &var)
Others aggregators.
Definition: BayesNet_tpl.h:516
void __copyPotentials(const BayesNet< GUM_SCALAR > &source)
copy of potentials from a BN to another, using names of vars as ref.
Definition: BayesNet_tpl.h:659
NodeId nodeId(const DiscreteVariable &var) const final
Returns a variable&#39;s id in the gum::BayesNet.
Definition: BayesNet_tpl.h:238
virtual ~BayesNet() final
Destructor.
Definition: BayesNet_tpl.h:204
void endTopologyTransformation()
terminates a sequence of insertions/deletions of arcs by adjusting all CPTs dimensions.
Definition: BayesNet_tpl.h:641
<agrum/tools/multidim/multiDimImplementation.h>
Size Idx
Type for indexes.
Definition: types.h:53
void changePotential(NodeId id, Potential< GUM_SCALAR > *newPot)
change the CPT associated to nodeId to newPot delete the old CPT associated to nodeId.
Definition: BayesNet_tpl.h:692
std::size_t Size
In aGrUM, hashed values are unsigned long int.
Definition: types.h:48
void changeVariableLabel(const std::string &name, const std::string &old_label, const std::string &new_label)
Changes a variable&#39;s name.
Definition: BayesNet.h:352
NodeId addMEDIAN(const DiscreteVariable &var)
Others aggregators.
Definition: BayesNet_tpl.h:521
NodeId addNoisyORCompound(const DiscreteVariable &var, GUM_SCALAR external_weight)
Add a variable, it&#39;s associate node and a gum::noisyOR implementation.
Definition: BayesNet_tpl.h:548
NodeId idFromName(const std::string &name) const final
Returns a variable&#39;s id given its name in the gum::BayesNet.
Definition: BayesNet_tpl.h:314
const DiscreteVariable & variable(const std::string &name) const
Returns a gum::DiscreteVariable given its gum::NodeId in the gum::BayesNet.
Definition: BayesNet.h:313
void __clearPotentials()
clear all potentials
Definition: BayesNet_tpl.h:648
void erase(NodeId varId)
Remove a variable from the gum::BayesNet.
Definition: BayesNet_tpl.h:341
Copyright 2005-2020 Pierre-Henri WUILLEMIN () et Christophe GONZALES () info_at_agrum_dot_org.
Size NodeId
Type for node ids.
Definition: graphElements.h:98
NodeId addMIN(const DiscreteVariable &var)
Others aggregators.
Definition: BayesNet_tpl.h:526
A factory class to ease BayesNet construction.
Definition: BayesNet.h:45
void reverseArc(NodeId tail, NodeId head)
Reverses an arc while preserving the same joint distribution.
Definition: BayesNet_tpl.h:473
void eraseArc(const Arc &arc)
Removes an arc in the BN, and update head&#39;s CTP.
Definition: BayesNet_tpl.h:392