49#ifndef GUM_MARKOV_RANDOM_FIELD_H
50#define GUM_MARKOV_RANDOM_FIELD_H
87 template <
typename GUM_SCALAR >
112 static MarkovRandomField< GUM_SCALAR > fastPrototype(
const std::string& dotlike,
114 static MarkovRandomField< GUM_SCALAR > fastPrototype(
const std::string& dotlike,
115 const std::string& domain =
"[2]");
122 static MarkovRandomField< GUM_SCALAR > fromBN(
const BayesNet< GUM_SCALAR >& bn);
139 explicit MarkovRandomField(std::string name);
144 virtual ~MarkovRandomField();
149 MarkovRandomField(
const MarkovRandomField< GUM_SCALAR >& source);
163 MarkovRandomField< GUM_SCALAR >& operator=(
const MarkovRandomField< GUM_SCALAR >& source);
178 virtual const Tensor< GUM_SCALAR >& factor(
const NodeSet& varIds)
const final;
180 virtual const Tensor< GUM_SCALAR >&
181 factor(
const std::vector< std::string >& varnames)
const final;
188 virtual const NodeSet& smallestFactorFromNode(NodeId node)
const final;
194 virtual const FactorTable< GUM_SCALAR >& factors() const final;
201 virtual const VariableNodeMap& variableNodeMap() const final;
217 NodeId add(const DiscreteVariable& var);
237 NodeId add(const std::
string& fast_description,
unsigned int default_nbrmod = 2);
256 NodeId add(const DiscreteVariable& var, NodeId
id);
273 void erase(NodeId varId);
278 void erase(const std::
string& name);
290 void erase(const DiscreteVariable& var);
302 const DiscreteVariable& variable(NodeId
id) const final;
310 const DiscreteVariable& variable(const std::
string& name)
const {
311 return variable(idFromName(name));
323 void changeVariableName(NodeId
id,
const std::string& new_name);
328 void changeVariableName(
const std::string& name,
const std::string& new_name) {
329 changeVariableName(idFromName(name), new_name);
342 void changeVariableLabel(NodeId
id,
const std::string& old_label,
const std::string& new_label);
347 void changeVariableLabel(
const std::string& name,
348 const std::string& old_label,
349 const std::string& new_label) {
350 changeVariableLabel(idFromName(name), old_label, new_label);
361 NodeId nodeId(
const DiscreteVariable& var)
const final;
371 NodeId idFromName(
const std::string& name)
const final;
382 const DiscreteVariable& variableFromName(
const std::string& name)
const final;
398 const Tensor< GUM_SCALAR >& addFactor(
const std::vector< std::string >& varnames);
410 const Tensor< GUM_SCALAR >& addFactor(
const NodeSet& vars);
421 const Tensor< GUM_SCALAR >& addFactor(
const Tensor< GUM_SCALAR >& factor);
429 void eraseFactor(
const NodeSet& vars);
431 void eraseFactor(
const std::vector< std::string >& varnames);
436 void generateFactors()
const;
439 void generateFactor(
const NodeSet& vars)
const;
443 void beginTopologyTransformation();
445 void endTopologyTransformation();
448 bool _topologyTransformationInProgress_;
451 void _clearFactors_();
454 void _copyFactors_(
const MarkovRandomField< GUM_SCALAR >& source);
457 void _rebuildGraph_();
459 VariableNodeMap _varMap_;
462 FactorTable< GUM_SCALAR > _factors_;
464 Tensor< GUM_SCALAR >& _addFactor_(
const std::vector< NodeId >& ordered_nodes);
466 void _eraseFactor_(
const NodeSet& vars);
469 using IMarkovRandomField< GUM_SCALAR >::graph;
470 using IMarkovRandomField< GUM_SCALAR >::size;
471 using IMarkovRandomField< GUM_SCALAR >::nodes;
472 using IMarkovRandomField< GUM_SCALAR >::log10DomainSize;
476 template <
typename GUM_SCALAR >
477 std::ostream&
operator<<(std::ostream& output,
const MarkovRandomField< GUM_SCALAR >& bn);
480#ifndef GUM_NO_EXTERN_TEMPLATE_CLASS
482 extern template class MarkovRandomField< double >;
Class representing Bayesian networks.
Class representing Markov random fields.
Template implementation of BN/MarkovRandomField.h class.
Class representing the minimal interface for Markov random field.
Size NodeId
Type for node ids.
Set< NodeId > NodeSet
Some typdefs and define for shortcuts ...
gum is the global namespace for all aGrUM entities
std::ostream & operator<<(std::ostream &stream, const AVLTree< Val, Cmp > &tree)
display the content of a tree