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 <string>
18 #include <dai/daialg.h>
19 #include <dai/enum.h>
20 #include <dai/factorgraph.h>
21 #include <dai/properties.h>
22 #include <dai/exceptions.h>
23 
24 
25 namespace dai {
26 
27 
29 class LC : public DAIAlgFG {
30  private:
32  std::vector<Factor> _pancakes;
34  std::vector<Factor> _cavitydists;
36  std::vector<std::vector<Factor> > _phis;
38  std::vector<Factor> _beliefs;
42  size_t _iters;
43 
44  public:
46  struct Properties {
48 
54  DAI_ENUM(CavityType,FULL,PAIR,PAIR2,UNIFORM);
55 
57 
61  DAI_ENUM(UpdateType,SEQFIX,SEQRND);
62 
64  size_t verbose;
65 
67  size_t maxiter;
68 
71 
73  bool reinit;
74 
77 
79  CavityType cavity;
80 
82  UpdateType updates;
83 
85  std::string cavainame;
86 
89  } props;
90 
91  public:
93  LC() : DAIAlgFG(), _pancakes(), _cavitydists(), _phis(), _beliefs(), _maxdiff(), _iters(), props() {}
94 
96 
99  LC( const FactorGraph &fg, const PropertySet &opts );
100 
101 
103 
104  virtual LC* clone() const { return new LC(*this); }
105  virtual LC* construct( const FactorGraph &fg, const PropertySet &opts ) const { return new LC( fg, opts ); }
106  virtual std::string name() const { return "LC"; }
107  virtual Factor belief( const Var &v ) const { return beliefV( findVar( v ) ); }
108  virtual Factor belief( const VarSet &/*vs*/ ) const;
109  virtual Factor beliefV( size_t i ) const { return _beliefs[i]; }
110  virtual std::vector<Factor> beliefs() const { return _beliefs; }
111  virtual Real logZ() const { DAI_THROW(NOT_IMPLEMENTED); return 0.0; }
112  virtual void init();
113  virtual void init( const VarSet &/*ns*/ ) { init(); }
114  virtual Real run();
115  virtual Real maxDiff() const { return _maxdiff; }
116  virtual size_t Iterations() const { return _iters; }
117  virtual void setMaxIter( size_t maxiter ) { props.maxiter = maxiter; }
118  virtual void setProperties( const PropertySet &opts );
119  virtual PropertySet getProperties() const;
120  virtual std::string printProperties() const;
122 
124 
125 
126  Real CalcCavityDist( size_t i, const std::string &name, const PropertySet &opts );
128  Real InitCavityDists( const std::string &name, const PropertySet &opts );
130  long SetCavityDists( std::vector<Factor> &Q );
132  Factor NewPancake (size_t i, size_t _I, bool & hasNaNs);
134  void CalcBelief (size_t i);
136  const Factor &pancake (size_t i) const { return _pancakes[i]; };
138  const Factor &cavitydist (size_t i) const { return _cavitydists[i]; };
140 };
141 
142 
143 } // end of namespace dai
144 
145 
146 #endif