29 #ifndef GUM_MARKOV_NET_H 30 #define GUM_MARKOV_NET_H 34 #include <agrum/agrum.h> 36 #include <agrum/tools/core/hashTable.h> 38 #include <agrum/MN/IMarkovNet.h> 39 #include <agrum/tools/multidim/potential.h> 41 #include <agrum/BN/BayesNet.h> 71 template <
typename GUM_SCALAR >
72 class MarkovNet:
public IMarkovNet< GUM_SCALAR > {
96 static MarkovNet< GUM_SCALAR > fastPrototype(
const std::string& dotlike,
104 static MarkovNet< GUM_SCALAR > fromBN(
const BayesNet< GUM_SCALAR >& bn);
121 explicit MarkovNet(std::string name);
126 virtual ~MarkovNet()
final;
131 MarkovNet(
const MarkovNet< GUM_SCALAR >& source);
145 MarkovNet< GUM_SCALAR >& operator=(
const MarkovNet< GUM_SCALAR >& source);
160 virtual const Potential< GUM_SCALAR >&
161 factor(
const NodeSet& varIds)
const final;
163 virtual const Potential< GUM_SCALAR >&
164 factor(
const std::vector< std::string >& varnames)
const final;
171 virtual const NodeSet& smallestFactorFromNode(NodeId node)
const final;
177 virtual const FactorTable< GUM_SCALAR >& factors()
const final;
184 virtual const VariableNodeMap& variableNodeMap()
const final;
200 NodeId add(
const DiscreteVariable& var);
213 NodeId add(
const std::string& name,
unsigned int nbrmod);
232 NodeId add(
const DiscreteVariable& var, NodeId id);
249 void erase(NodeId varId);
254 void erase(
const std::string& name);
266 void erase(
const DiscreteVariable& var);
278 const DiscreteVariable& variable(NodeId id)
const final;
286 const DiscreteVariable& variable(
const std::string& name)
const {
287 return variable(idFromName(name));
299 void changeVariableName(NodeId id,
const std::string& new_name);
304 void changeVariableName(
const std::string& name,
const std::string& new_name) {
305 changeVariableName(idFromName(name), new_name);
318 void changeVariableLabel(NodeId id,
319 const std::string& old_label,
320 const std::string& new_label);
325 void changeVariableLabel(
const std::string& name,
326 const std::string& old_label,
327 const std::string& new_label) {
328 changeVariableLabel(idFromName(name), old_label, new_label);
339 NodeId nodeId(
const DiscreteVariable& var)
const final;
349 NodeId idFromName(
const std::string& name)
const final;
360 const DiscreteVariable& variableFromName(
const std::string& name)
const final;
381 const Potential< GUM_SCALAR >&
382 addFactor(
const std::vector< std::string >& varnames);
384 const Potential< GUM_SCALAR >& addFactor(
const NodeSet& vars);
386 const Potential< GUM_SCALAR >&
387 addFactor(
const Potential< GUM_SCALAR >& factor);
395 void eraseFactor(
const NodeSet& vars);
397 void eraseFactor(
const std::vector< std::string >& varnames);
402 void generateFactors()
const;
405 void generateFactor(
const NodeSet& vars)
const;
409 void beginTopologyTransformation();
411 void endTopologyTransformation();
414 bool topologyTransformationInProgress__;
417 void clearFactors__();
420 void copyFactors__(
const MarkovNet< GUM_SCALAR >& source);
423 void rebuildGraph__();
426 VariableNodeMap varMap__;
429 FactorTable< GUM_SCALAR > factors__;
431 const Potential< GUM_SCALAR >* addFactor__(
const NodeSet& vars,
432 const Potential< GUM_SCALAR >* src
435 void eraseFactor__(
const NodeSet& vars);
438 using IMarkovNet< GUM_SCALAR >::graph;
439 using IMarkovNet< GUM_SCALAR >::size;
440 using IMarkovNet< GUM_SCALAR >::nodes;
441 using IMarkovNet< GUM_SCALAR >::log10DomainSize;
445 template <
typename GUM_SCALAR >
446 std::ostream& operator<<(std::ostream& output,
447 const MarkovNet< GUM_SCALAR >& bn);
450 #ifndef GUM_NO_EXTERN_TEMPLATE_CLASS 452 extern template class MarkovNet<
double >;
458 #include <agrum/MN/MarkovNet_tpl.h> INLINE void emplace(Args &&... args)