libDAI
gibbs.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_gibbs_h
14 #define __defined_libdai_gibbs_h
15 
16 
17 #include <dai/daialg.h>
18 #include <dai/factorgraph.h>
19 #include <dai/properties.h>
20 
21 
22 namespace dai {
23 
24 
26 
28 class Gibbs : public DAIAlgFG {
29  private:
31  typedef std::vector<size_t> _count_t;
33  typedef std::vector<size_t> _state_t;
35  size_t _sample_count;
37  std::vector<_count_t> _var_counts;
39  std::vector<_count_t> _factor_counts;
41  size_t _iters;
48 
49  public:
51  struct Properties {
53  size_t maxiter;
54 
56  double maxtime;
57 
59  size_t restart;
60 
62  size_t burnin;
63 
65  size_t verbose;
66  } props;
67 
68  public:
71 
73 
76  Gibbs( const FactorGraph &fg, const PropertySet &opts ) : DAIAlgFG(fg), _sample_count(0), _var_counts(), _factor_counts(), _iters(0), _state(), _max_state(), _max_score(-INFINITY) {
77  setProperties( opts );
78  construct();
79  }
80 
81 
83 
84  virtual Gibbs* clone() const { return new Gibbs(*this); }
85  virtual Gibbs* construct( const FactorGraph &fg, const PropertySet &opts ) const { return new Gibbs( fg, opts ); }
86  virtual std::string name() const { return "GIBBS"; }
87  virtual Factor belief( const Var &v ) const { return beliefV( findVar( v ) ); }
88  virtual Factor belief( const VarSet &vs ) const;
89  virtual Factor beliefV( size_t i ) const;
90  virtual Factor beliefF( size_t I ) const;
91  virtual std::vector<Factor> beliefs() const;
92  virtual Real logZ() const { DAI_THROW(NOT_IMPLEMENTED); return 0.0; }
93  std::vector<std::size_t> findMaximum() const { return _max_state; }
94  virtual void init();
95  virtual void init( const VarSet &/*ns*/ ) { init(); }
96  virtual Real run();
97  virtual Real maxDiff() const { DAI_THROW(NOT_IMPLEMENTED); return 0.0; }
98  virtual size_t Iterations() const { return _iters; }
99  virtual void setMaxIter( size_t maxiter ) { props.maxiter = maxiter; }
100  virtual void setProperties( const PropertySet &opts );
101  virtual PropertySet getProperties() const;
102  virtual std::string printProperties() const;
104 
105 
107 
108 
109  void randomizeState();
111  std::vector<size_t>& state() { return _state; }
113  const std::vector<size_t>& state() const { return _state; }
115 
116  private:
118  void construct();
120  void updateCounts();
122  Prob getVarDist( size_t i );
124  void resampleVar( size_t i );
126  size_t getFactorEntry( size_t I );
128  size_t getFactorEntryDiff( size_t I, size_t i );
129 };
130 
131 
133 
135 std::vector<size_t> getGibbsState( const FactorGraph &fg, size_t maxiter );
136 
137 
138 } // end of namespace dai
139 
140 
146 #endif