OpenGM  2.3.x
Discrete Graphical Model Library
fractional_bp.hxx
Go to the documentation of this file.
1 #ifndef OPENGM_LIBDAI_FRACTIONAL_BP_HXX
2 #define OPENGM_LIBDAI_FRACTIONAL_BP_HXX
3 
5 
7 
8 namespace opengm{
9 namespace external{
10 namespace libdai{
11 
12 template<class GM,class ACC>
13 class FractionalBp : public LibDaiInference<GM,ACC, FractionalBp<GM,ACC> >, public opengm::Inference<GM,ACC>{
14  public:
15  typedef ACC AccumulationType;
16  typedef GM GraphicalModelType;
18  typedef opengm::visitors::VerboseVisitor< FractionalBp<GM,ACC> > VerboseVisitorType;
21 
22  enum UpdateRule{
23  PARALL,
24  SEQFIX,
25  SEQRND,
26  SEQMAX
27  };
28  std::string name() const {
29  return "libDAI-Fractional-Bp";
30  }
31  struct Parameter{
32  Parameter
33  (
34  const size_t maxIterations=100,
35  const double damping=0.0,
36  const double tolerance=0.000001,
37  UpdateRule updateRule= PARALL,
38  const size_t verbose=0
39  ) :maxIterations_(maxIterations),
40  damping_(damping),
41  tolerance_(tolerance),
42  updateRule_(updateRule),
43  verbose_(verbose),
44  logDomain_(0) {
45 
46  }
47  std::string toString()const{
48  std::string ur;
49  std::stringstream ss;
50  if(updateRule_==PARALL)ur="PARALL";
51  else if(updateRule_==SEQFIX)ur = "SEQFIX";
52  else if(updateRule_==SEQMAX)ur = "SEQMAX";
53  else if(updateRule_==SEQRND)ur = "SEQRND";
54  ss <<"FBP["
55  <<"updates="<<ur<<","
56  <<"damping="<<damping_<<","
57  <<"maxiter="<<maxIterations_<<","
58  <<"tol="<<tolerance_<<","
59  <<"logdomain="<<logDomain_<<","
60  <<"inference="<< std::string(::opengm::meta::Compare<ACC,::opengm::Integrator>::value==true ? std::string("SUMPROD") : std::string("MAXPROD") ) <<","
61  <<"verbose="<<verbose_<<"]";
62  return ss.str();
63  }
64 
65  size_t maxIterations_;
66  double damping_;
67  double tolerance_;
68  UpdateRule updateRule_;
69  size_t verbose_;
70  size_t logDomain_;
71  };
72  FractionalBp(const GM & gm,const Parameter param=Parameter())
73  :LibDaiInference<GM,ACC, FractionalBp<GM,ACC> >(gm,param.toString()) {
74 
75  }
76 
77  virtual const GraphicalModelType& graphicalModel() const{
78  return this->graphicalModel_impl();
79  }
80 
81  virtual void reset(){
82  return this->reset_impl();
83  }
84 
85  virtual InferenceTermination infer(){
86  return this->infer_impl();
87  }
88 
89  template<class VISITOR>
90  InferenceTermination infer(VISITOR& visitor ){
91  visitor.begin(*this);
92  InferenceTermination infTerm = this->infer_impl();
93  visitor.end(*this);
94  return infTerm;
95  }
96 
97  virtual InferenceTermination arg(std::vector<LabelType>& v, const size_t argnr=1)const{
98  return this->arg_impl(v,argnr);
99  }
100  virtual InferenceTermination marginal(const size_t v, IndependentFactorType& m) const{
101  return this->marginal_impl(v,m);
102  }
103  virtual InferenceTermination factorMarginal(const size_t f, IndependentFactorType& m) const{
104  return this->factorMarginal_impl(f,m);
105  }
106 
107 };
108 
109 } // end namespace libdai
110 } // end namespace external
111 } //end namespace opengm
112 
114 
115 #endif // OPENGM_LIBDAI_FRACTIONAL_BP_HXX
The OpenGM namespace.
Definition: config.hxx:43
Inference algorithm interface.
Definition: inference.hxx:34
#define OPENGM_GM_TYPE_TYPEDEFS
Definition: inference.hxx:13
InferenceTermination
Definition: inference.hxx:24