libDAI
lc.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_lc_h
14 #define __defined_libdai_lc_h
15 
16 
17 #include <dai/dai_config.h>
18 #ifdef DAI_WITH_LC
19 
20 
21 #include <string>
22 #include <dai/daialg.h>
23 #include <dai/enum.h>
24 #include <dai/factorgraph.h>
25 #include <dai/properties.h>
26 #include <dai/exceptions.h>
27 
28 
29 namespace dai {
30 
31 
33 class LC : public DAIAlgFG {
34  private:
36  std::vector<Factor> _pancakes;
38  std::vector<Factor> _cavitydists;
40  std::vector<std::vector<Factor> > _phis;
42  std::vector<Factor> _beliefs;
46  size_t _iters;
47 
48  public:
50  struct Properties {
52 
58  DAI_ENUM(CavityType,FULL,PAIR,PAIR2,UNIFORM);
59 
61 
65  DAI_ENUM(UpdateType,SEQFIX,SEQRND);
66 
68  size_t verbose;
69 
71  size_t maxiter;
72 
75 
77  bool reinit;
78 
81 
83  CavityType cavity;
84 
86  UpdateType updates;
87 
89  std::string cavainame;
90 
93  } props;
94 
95  public:
97  LC() : DAIAlgFG(), _pancakes(), _cavitydists(), _phis(), _beliefs(), _maxdiff(), _iters(), props() {}
98 
100 
103  LC( const FactorGraph &fg, const PropertySet &opts );
104 
105 
107 
108  virtual LC* clone() const { return new LC(*this); }
109  virtual LC* construct( const FactorGraph &fg, const PropertySet &opts ) const { return new LC( fg, opts ); }
110  virtual std::string name() const { return "LC"; }
111  virtual Factor belief( const Var &v ) const { return beliefV( findVar( v ) ); }
112  virtual Factor belief( const VarSet &/*vs*/ ) const;
113  virtual Factor beliefV( size_t i ) const { return _beliefs[i]; }
114  virtual std::vector<Factor> beliefs() const { return _beliefs; }
115  virtual Real logZ() const { DAI_THROW(NOT_IMPLEMENTED); return 0.0; }
116  virtual void init();
117  virtual void init( const VarSet &/*ns*/ ) { init(); }
118  virtual Real run();
119  virtual Real maxDiff() const { return _maxdiff; }
120  virtual size_t Iterations() const { return _iters; }
121  virtual void setMaxIter( size_t maxiter ) { props.maxiter = maxiter; }
122  virtual void setProperties( const PropertySet &opts );
123  virtual PropertySet getProperties() const;
124  virtual std::string printProperties() const;
126 
128 
129  Real CalcCavityDist( size_t i, const std::string &name, const PropertySet &opts );
132  Real InitCavityDists( const std::string &name, const PropertySet &opts );
134  long SetCavityDists( std::vector<Factor> &Q );
136  Factor NewPancake (size_t i, size_t _I, bool & hasNaNs);
138  void CalcBelief (size_t i);
140  const Factor &pancake (size_t i) const { return _pancakes[i]; };
142  const Factor &cavitydist (size_t i) const { return _cavitydists[i]; };
144 };
145 
146 
147 } // end of namespace dai
148 
149 
150 #endif
151 
152 
153 #endif
std::vector< Factor > _pancakes
Stores for each variable the approximate cavity distribution multiplied with the omitted factors...
Definition: lc.h:36
virtual Real run()
Runs the approximate inference algorithm.
Definition: lc.cpp:249
std::string cavainame
Name of the algorithm used to initialize the cavity distributions.
Definition: lc.h:89
DAI_ENUM(CavityType, FULL, PAIR, PAIR2, UNIFORM)
Enumeration of possible ways to initialize the cavities.
virtual void init()
Initializes all data structures of the approximate inference algorithm.
Definition: lc.cpp:208
virtual LC * clone() const
Returns a pointer to a new, cloned copy of *this (i.e., virtual copy constructor) ...
Definition: lc.h:108
Represents a factor graph.
Definition: factorgraph.h:65
virtual void setProperties(const PropertySet &opts)
Set parameters of this inference algorithm.
Definition: lc.cpp:28
virtual Factor belief(const Var &v) const
Returns the (approximate) marginal probability distribution of a variable.
Definition: lc.h:111
Real tol
Tolerance for convergence test.
Definition: lc.h:74
FactorGraph & fg()
Returns reference to underlying FactorGraph.
Definition: daialg.h:221
double Real
Real number (alias for double, which could be changed to long double if necessary) ...
Definition: util.h:98
Real CalcCavityDist(size_t i, const std::string &name, const PropertySet &opts)
Approximates the cavity distribution of variable i, using the inference algorithm name with parameter...
Definition: lc.cpp:129
UpdateType updates
What update schedule to use.
Definition: lc.h:86
bool reinit
Complete or partial reinitialization of cavity graphs?
Definition: lc.h:77
const Factor & cavitydist(size_t i) const
Returns the approximate cavity distribution for variable i.
Definition: lc.h:142
virtual size_t Iterations() const
Returns number of iterations done (one iteration passes over the complete factorgraph).
Definition: lc.h:120
Real _maxdiff
Maximum difference encountered so far.
Definition: lc.h:44
std::vector< Factor > _beliefs
Single variable beliefs.
Definition: lc.h:42
virtual std::vector< Factor > beliefs() const
Returns all beliefs (approximate marginal probability distributions) calculated by the algorithm...
Definition: lc.h:114
virtual std::string printProperties() const
Returns parameters of this inference algorithm formatted as a string in the format "[key1=val1...
Definition: lc.cpp:70
Defines the DAI_ENUM macro, which can be used to define an enum with additional functionality.
virtual void init(const VarSet &)
Initializes all data structures corresponding to some set of variables.
Definition: lc.h:117
size_t maxiter
Maximum number of iterations.
Definition: lc.h:71
Represents a set of variables.
Definition: varset.h:94
virtual void setMaxIter(size_t maxiter)
Sets maximum number of iterations (one iteration passes over the complete factorgraph).
Definition: lc.h:121
const Factor & pancake(size_t i) const
Returns the belief of the Markov blanket of variable i (including the variable itself) ...
Definition: lc.h:140
Defines the Exception class and macros for throwing exceptions and doing assertions.
size_t verbose
Verbosity (amount of output sent to stderr)
Definition: lc.h:68
Real InitCavityDists(const std::string &name, const PropertySet &opts)
Approximates all cavity distributions using inference algorithm name with parameters opts...
Definition: lc.cpp:163
Factor NewPancake(size_t i, size_t _I, bool &hasNaNs)
Updates the belief of the Markov blanket of variable i based upon the information from its _I 'th nei...
Definition: lc.cpp:218
Defines the Property and PropertySet classes, which are mainly used for managing parameters of infere...
virtual std::string name() const
Returns the name of the algorithm.
Definition: lc.h:110
LC()
Default constructor.
Definition: lc.h:97
Represents a set of properties, mapping keys (of type PropertyKey) to values (of type PropertyValue) ...
Definition: properties.h:73
size_t _iters
Number of iterations needed.
Definition: lc.h:46
virtual Real maxDiff() const
Returns maximum difference between single variable beliefs in the last iteration. ...
Definition: lc.h:119
long SetCavityDists(std::vector< Factor > &Q)
Sets approximate cavity distributions to Q.
Definition: lc.cpp:193
virtual Factor beliefV(size_t i) const
Returns the (approximate) marginal probability distribution of the variable with index i...
Definition: lc.h:113
std::vector< Factor > _cavitydists
Stores for each variable the approximate cavity distribution.
Definition: lc.h:38
std::vector< std::vector< Factor > > _phis
_phis[i][_I] corresponds to in the paper
Definition: lc.h:40
Represents a discrete random variable.
Definition: var.h:37
Namespace for libDAI.
Definition: alldai.cpp:16
virtual LC * construct(const FactorGraph &fg, const PropertySet &opts) const
Returns a pointer to a newly constructed inference algorithm.
Definition: lc.h:109
Defines the FactorGraph class, which represents factor graphs (e.g., Bayesian networks or Markov rand...
void CalcBelief(size_t i)
Calculates the belief of variable i.
Definition: lc.cpp:112
Defines the general interface for inference methods in libDAI (classes InfAlg, DaiAlg<>, DaiAlgFG and DaiAlgRG).
Allows the user to specify which algorithms will be built into libDAI.
Parameters for LC.
Definition: lc.h:50
Combines the abstract base class InfAlg with a graphical model (e.g., a FactorGraph or RegionGraph)...
Definition: daialg.h:207
CavityType cavity
How to initialize the cavities.
Definition: lc.h:83
virtual PropertySet getProperties() const
Returns parameters of this inference algorithm converted into a PropertySet.
Definition: lc.cpp:55
PropertySet cavaiopts
Parameters for the algorithm used to initialize the cavity distributions.
Definition: lc.h:92
Approximate inference algorithm "Loop Corrected Belief Propagation" [MoK07].
Definition: lc.h:33
Real damping
Damping constant (0.0 means no damping, 1.0 is maximum damping)
Definition: lc.h:80
virtual Real logZ() const
Returns the logarithm of the (approximated) partition sum (normalizing constant of the factor graph)...
Definition: lc.h:115