1 #ifndef OPENGM_LIBDAI_DOUBLE_LOOP_GENERALIZED_BP_HXX
2 #define OPENGM_LIBDAI_DOUBLE_LOOP_GENERALIZED_BP_HXX
12 template<
class GM,
class ACC>
15 typedef ACC AccumulationType;
16 typedef GM GraphicalModelType;
34 std::string name()
const {
35 return "Double-Loop-Generalized-BP";
41 const bool doubleloop=1,
42 const Clusters clusters=BETHE,
43 const size_t loopdepth = 3,
44 const Init init=UNIFORM,
45 const size_t maxiter=10000,
46 const double tolerance=1e-9,
47 const size_t verbose=0
49 doubleloop_(doubleloop),
50 loopdepth_(loopdepth),
54 tolerance_(tolerance),
57 std::string toString()
const{
59 std::string init,cluster;
61 if(init_==UNIFORM)init=
"UNIFORM";
62 else if(init_==
RANDOM)init =
"RANDOM";
64 if(clusters_==MIN)cluster=
"MIN";
65 else if(clusters_==BETHE)cluster =
"BETHE";
66 else if(clusters_==DELTA)cluster =
"DELTA";
67 else if(clusters_==LOOP)cluster =
"LOOP";
71 <<
"doubleloop="<<doubleloop_<<
","
72 <<
"clusters="<<
"LOOP"<<
","
74 <<
"tol="<<tolerance_<<
","
75 <<
"loopdepth="<<loopdepth_<<
","
76 <<
"maxiter="<<maxiter_<<
","
77 <<
"verbose="<<verbose_<<
"]";
82 <<
"doubleloop="<<doubleloop_<<
","
83 <<
"clusters="<<cluster<<
","
85 <<
"tol="<<tolerance_<<
","
86 <<
"maxiter="<<maxiter_<<
","
87 <<
"verbose="<<verbose_<<
"]";
100 DoubleLoopGeneralizedBP(
const GM & gm,
const Parameter param=Parameter())
101 :
LibDaiInference<GM,ACC,DoubleLoopGeneralizedBP<GM,ACC> >(gm,param.toString()) {
105 virtual const GraphicalModelType& graphicalModel()
const{
106 return this->graphicalModel_impl();
109 virtual void reset(){
110 return this->reset_impl();
114 return this->infer_impl();
117 template<
class VISITOR>
119 visitor.begin(*
this);
126 return this->arg_impl(v,argnr);
129 return this->marginal_impl(v,m);
132 return this->factorMarginal_impl(f,m);
143 #endif // OPENGM_LIBDAI_DOUBLE_LOOP_GENERALIZED_BP_HXX
Inference algorithm interface.
#define OPENGM_GM_TYPE_TYPEDEFS