libDAI
exactinf.h
Go to the documentation of this file.
1 /* This file is part of libDAI - http://www.libdai.org/
2  *
3  * Copyright (c) 2006-2011, The libDAI authors. All rights reserved.
4  *
5  * Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
6  */
7 
8 
11 
12 
13 #ifndef __defined_libdai_exactinf_h
14 #define __defined_libdai_exactinf_h
15 
16 
17 #include <dai/daialg.h>
18 #include <dai/properties.h>
19 #include <dai/factorgraph.h>
20 #include <dai/enum.h>
21 
22 
23 namespace dai {
24 
25 
27 
32 class ExactInf : public DAIAlgFG {
33  public:
35  struct Properties {
37  size_t verbose;
38  } props;
39 
40  private:
42  std::vector<Factor> _beliefsV;
44  std::vector<Factor> _beliefsF;
47 
48  public:
50 
51  ExactInf() : DAIAlgFG(), props(), _beliefsV(), _beliefsF(), _logZ(0) {}
53 
55 
58  ExactInf( const FactorGraph &fg, const PropertySet &opts ) : DAIAlgFG(fg), props(), _beliefsV(), _beliefsF(), _logZ() {
59  setProperties( opts );
60  construct();
61  }
63 
65 
66  virtual ExactInf* clone() const { return new ExactInf(*this); }
67  virtual ExactInf* construct( const FactorGraph &fg, const PropertySet &opts ) const { return new ExactInf( fg, opts ); }
68  virtual std::string name() const { return "EXACT"; }
69  virtual Factor belief( const Var &v ) const { return beliefV( findVar( v ) ); }
70  virtual Factor belief( const VarSet &vs ) const;
71  virtual Factor beliefV( size_t i ) const { return _beliefsV[i]; }
72  virtual Factor beliefF( size_t I ) const { return _beliefsF[I]; }
73  virtual std::vector<Factor> beliefs() const;
74  virtual Real logZ() const { return _logZ; }
77  std::vector<size_t> findMaximum() const;
78  virtual void init();
79  virtual void init( const VarSet &/*ns*/ ) {}
80  virtual Real run();
81  virtual Real maxDiff() const { DAI_THROW(NOT_IMPLEMENTED); return 0.0; }
82  virtual size_t Iterations() const { DAI_THROW(NOT_IMPLEMENTED); return 0; }
83  virtual void setProperties( const PropertySet &opts );
84  virtual PropertySet getProperties() const;
85  virtual std::string printProperties() const;
87 
89 
90 
93  Factor calcMarginal( const VarSet &vs ) const;
95 
96  private:
98  void construct();
99 };
100 
101 
102 } // end of namespace dai
103 
104 
105 #endif
virtual ExactInf * construct(const FactorGraph &fg, const PropertySet &opts) const
Returns a pointer to a newly constructed inference algorithm.
Definition: exactinf.h:67
Represents a factor graph.
Definition: factorgraph.h:65
virtual Factor belief(const Var &v) const
Returns the (approximate) marginal probability distribution of a variable.
Definition: exactinf.h:69
virtual Real logZ() const
Returns the logarithm of the (approximated) partition sum (normalizing constant of the factor graph)...
Definition: exactinf.h:74
virtual std::vector< Factor > beliefs() const
Returns all beliefs (approximate marginal probability distributions) calculated by the algorithm...
Definition: exactinf.cpp:114
virtual ExactInf * clone() const
Returns a pointer to a new, cloned copy of *this (i.e., virtual copy constructor) ...
Definition: exactinf.h:66
FactorGraph & fg()
Returns reference to underlying FactorGraph.
Definition: daialg.h:221
std::vector< size_t > findMaximum() const
Definition: exactinf.cpp:95
double Real
Real number (alias for double, which could be changed to long double if necessary) ...
Definition: util.h:98
size_t verbose
Verbosity (amount of output sent to stderr)
Definition: exactinf.h:37
virtual void setProperties(const PropertySet &opts)
Set parameters of this inference algorithm.
Definition: exactinf.cpp:19
virtual PropertySet getProperties() const
Returns parameters of this inference algorithm converted into a PropertySet.
Definition: exactinf.cpp:27
virtual Real maxDiff() const
Returns maximum difference between single variable beliefs in the last iteration. ...
Definition: exactinf.h:81
void construct()
Helper function for constructors.
Definition: exactinf.cpp:42
Defines the DAI_ENUM macro, which can be used to define an enum with additional functionality.
Represents a set of variables.
Definition: varset.h:94
virtual Factor beliefV(size_t i) const
Returns the (approximate) marginal probability distribution of the variable with index i...
Definition: exactinf.h:71
Real _logZ
Logarithm of partition sum.
Definition: exactinf.h:46
std::vector< Factor > _beliefsF
All factor variable marginals.
Definition: exactinf.h:44
virtual size_t Iterations() const
Returns number of iterations done (one iteration passes over the complete factorgraph).
Definition: exactinf.h:82
virtual void init()
Initializes all data structures of the approximate inference algorithm.
Definition: exactinf.cpp:57
ExactInf(const FactorGraph &fg, const PropertySet &opts)
Construct from FactorGraph fg and PropertySet opts.
Definition: exactinf.h:58
virtual Real run()
Runs the approximate inference algorithm.
Definition: exactinf.cpp:65
Defines the Property and PropertySet classes, which are mainly used for managing parameters of infere...
virtual std::string printProperties() const
Returns parameters of this inference algorithm formatted as a string in the format "[key1=val1...
Definition: exactinf.cpp:34
Parameters for ExactInf.
Definition: exactinf.h:35
Represents a set of properties, mapping keys (of type PropertyKey) to values (of type PropertyValue) ...
Definition: properties.h:73
Exact inference algorithm using brute force enumeration (mainly useful for testing purposes) ...
Definition: exactinf.h:32
virtual void init(const VarSet &)
Initializes all data structures corresponding to some set of variables.
Definition: exactinf.h:79
ExactInf()
Default constructor.
Definition: exactinf.h:52
Factor calcMarginal(const VarSet &vs) const
Calculates marginal probability distribution for variables vs.
Definition: exactinf.cpp:87
std::vector< Factor > _beliefsV
All single variable marginals.
Definition: exactinf.h:42
Represents a discrete random variable.
Definition: var.h:37
Namespace for libDAI.
Definition: alldai.cpp:16
Defines the FactorGraph class, which represents factor graphs (e.g., Bayesian networks or Markov rand...
Defines the general interface for inference methods in libDAI (classes InfAlg, DaiAlg<>, DaiAlgFG and DaiAlgRG).
Combines the abstract base class InfAlg with a graphical model (e.g., a FactorGraph or RegionGraph)...
Definition: daialg.h:207
virtual Factor beliefF(size_t I) const
Returns the (approximate) marginal probability distribution of the variables on which factor I depend...
Definition: exactinf.h:72
virtual std::string name() const
Returns the name of the algorithm.
Definition: exactinf.h:68