OpenGM  2.3.x
Discrete Graphical Model Library
mean_field.hxx
Go to the documentation of this file.
1 #ifndef OPENGM_LIBDAI_MEAN_FIELD_HXX
2 #define OPENGM_LIBDAI_MEAN_FIELD_HXX
3 
5 
6 namespace opengm{
7 namespace external{
8 namespace libdai{
9 
21 template<class GM,class ACC>
22 class MeanField : public LibDaiInference<GM,ACC,MeanField<GM,ACC> >, public opengm::Inference<GM,ACC>{
23  public:
24  typedef ACC AccumulationType;
25  typedef GM GraphicalModelType;
27  //typedef VerboseVisitor< MeanField<GM,ACC> > VerboseVisitorType; // verbose and timing visitors try to use arg(), and fails.
28  //typedef TimingVisitor< MeanField<GM,ACC> > TimingVisitorType;
30 
31  enum UpdateRule{
34  };
35  enum Init{
38  };
39  std::string name() const{
40  return "libDAI-Mean-Field";
41  }
42  struct Parameter{
43  Parameter
44  (
45  const size_t maxiter=10000,
46  const double damping=0.0,
47  const double tolerance=1e-9,
48  const UpdateRule updateRule= NAIVE,
49  const Init init=UNIFORM,
50  const size_t verbose=0
51  ) :maxiter_(maxiter),
52  damping_(damping),
53  tolerance_(tolerance),
54  updateRule_(updateRule),
55  init_(init),
56  verbose_(verbose) {
57  }
58  std::string toString()const{
59  std::stringstream ss;
60  std::string ur,init;
61 
62  if(updateRule_==NAIVE)ur = "NAIVE";
63  else if(updateRule_==HARDSPIN)ur = "HARDSPIN";
64 
65  if(init_==UNIFORM)init="UNIFORM";
66  else if(init_==RANDOM)init = "RANDOM";
67 
68  ss <<"MF["
69  <<"maxiter="<<maxiter_<<","
70  <<"updates="<<ur<<","
71  <<"init="<<init<<","
72  <<"tol="<<tolerance_<<","
73  <<"verbose="<<verbose_<<"]";
74  return ss.str();
75  }
76  size_t maxiter_;
77  double damping_;
78  double tolerance_;
81  size_t verbose_;
82 
83  };
84  MeanField(const GM & gm,const Parameter param=Parameter())
85  :LibDaiInference< GM,ACC,MeanField<GM,ACC> >(gm,param.toString()) {
86 
87  }
88 
89  virtual const GraphicalModelType& graphicalModel() const{
90  return this->graphicalModel_impl();
91  }
92 
93  virtual void reset(){
94  return this->reset_impl();
95  }
96 
98  return this->infer_impl();
99  }
100 
101  template<class VISITOR>
102  InferenceTermination infer(VISITOR& visitor ){
103  visitor.begin(*this);
104  InferenceTermination infTerm = this->infer_impl();
105  visitor.end(*this);
106  return infTerm;
107  }
108 
109  virtual InferenceTermination arg(std::vector<LabelType>& v, const size_t argnr=1)const{
110  throw opengm::RuntimeError("MeanField implementation in libdai doesn't have member function findMaximum(), hence opengm::external::libdai::MeanField::arg() can't be used.");
111  return this->arg_impl(v,argnr);
112  }
113  virtual InferenceTermination marginal(const size_t v, IndependentFactorType& m) const{
114  return this->marginal_impl(v,m);
115  }
116  virtual InferenceTermination factorMarginal(const size_t f, IndependentFactorType& m) const{
117  return this->factorMarginal_impl(f,m);
118  }
119 
120 };
121 
122 } // end namespace libdai
123 } // end namespace external
124 } //end namespace opengm
125 
126 #endif // OPENGM_LIBDAI_MEAN_FIELD_HXX
The OpenGM namespace.
Definition: config.hxx:43
MeanField(const GM &gm, const Parameter param=Parameter())
Definition: mean_field.hxx:84
virtual InferenceTermination infer()
Definition: mean_field.hxx:97
virtual InferenceTermination arg(std::vector< LabelType > &v, const size_t argnr=1) const
output a solution
Definition: mean_field.hxx:109
virtual const GraphicalModelType & graphicalModel() const
Definition: mean_field.hxx:89
virtual InferenceTermination marginal(const size_t v, IndependentFactorType &m) const
output a solution for a marginal for a specific variable
Definition: mean_field.hxx:113
InferenceTermination infer(VISITOR &visitor)
Definition: mean_field.hxx:102
Inference algorithm interface.
Definition: inference.hxx:34
Parameter(const size_t maxiter=10000, const double damping=0.0, const double tolerance=1e-9, const UpdateRule updateRule=NAIVE, const Init init=UNIFORM, const size_t verbose=0)
Definition: mean_field.hxx:44
OpenGM runtime error.
Definition: opengm.hxx:100
virtual InferenceTermination factorMarginal(const size_t f, IndependentFactorType &m) const
output a solution for a marginal for all variables connected to a factor
Definition: mean_field.hxx:116
opengm::visitors::EmptyVisitor< MeanField< GM, ACC > > EmptyVisitorType
Definition: mean_field.hxx:29
InferenceTermination
Definition: inference.hxx:24
GraphicalModelType::IndependentFactorType IndependentFactorType
Definition: inference.hxx:44