1 #ifndef OPENGM_LIBDAI_LOOP_CORRECTED_BP_HXX 2 #define OPENGM_LIBDAI_LOOP_CORRECTED_BP_HXX 16 template<
class GM,
class ACC,
class CAVITY_INFERENCE>
38 return "libDAI-Loop-Corrected-Bp";
48 const size_t maxiter=10000,
49 const CavityInferenceParameter & cavityInferenceParam =CavityInferenceParameter(),
50 const double tolerance=1e-9,
51 const size_t verbose=0
54 updateRule_(updateRule),
56 cavityInferenceParam_(cavityInferenceParam),
57 tolerance_(tolerance),
61 std::string ur,cav,cavAiName,cavAiOpts;
62 if(updateRule_==SEQFIX)ur =
"SEQFIX";
63 else if(updateRule_==SEQRND)ur =
"SEQRND";
65 if(cavity_==FULL)cav =
"FULL";
66 else if(cavity_==PAIR)cav =
"PAIR";
67 else if(cavity_==PAIR2)cav =
"PAIR2";
68 else if(cavity_==UNIFORM)cav =
"UNIFORM";
70 std::string cavAiAsString = cavityInferenceParam_.toString();
72 if(opengm::meta::Compare<CAVITY_INFERENCE,opengm::external::libdai::None>::value) {
76 while(CAVITY_INFERENCE[counter]!=
']') {
77 cavAiName.push_back(cavAiAsString[counter]);
80 cavAiOpts.reserve(cavAiAsString.size()-cavAiName.size());
81 for(;counter<cavAiAsString.size();++counter) {
82 cavAiOpts.push_back(cavAiAsString[counter]);
88 <<
"reinit="<<reinit_<<
"," 90 <<
"maxiter="<<maxiter_<<
"," 91 <<
"cavainame="<<cavAiName<<
"," 92 <<
"cavaiopts="<<cavAiOpts<<
"," 93 <<
"verbose="<<verbose_<<
"]";
111 return this->graphicalModel_impl();
115 return this->reset_impl();
119 return this->infer_impl();
122 template<
class VISITOR>
124 visitor.begin(*
this);
131 return this->arg_impl(v,argnr);
134 return this->marginal_impl(v,m);
137 return this->factorMarginal_impl(f,m);
146 #endif // OPENGM_LIBDAI_LOOP_CORRECTED_BP_HXX
virtual const GraphicalModelType & graphicalModel() const
opengm::visitors::EmptyVisitor< LoopCorrectedBp< GM, ACC, CAVITY_INFERENCE > > EmptyVisitorType
CAVITY_INFERENCE::Parameter CavityInferenceParameter
CavityInferenceParameter cavityInferenceParam_
virtual InferenceTermination marginal(const size_t v, IndependentFactorType &m) const
output a solution for a marginal for a specific variable
virtual InferenceTermination factorMarginal(const size_t f, IndependentFactorType &m) const
output a solution for a marginal for all variables connected to a factor
InferenceTermination infer(VISITOR &visitor)
virtual InferenceTermination arg(std::vector< LabelType > &v, const size_t argnr=1) const
output a solution
Inference algorithm interface.
LoopCorrectedBp(const GM &gm, const Parameter param=Parameter())
opengm::visitors::VerboseVisitor< LoopCorrectedBp< GM, ACC, CAVITY_INFERENCE > > VerboseVisitorType
std::string toString() const
virtual InferenceTermination infer()
opengm::visitors::TimingVisitor< LoopCorrectedBp< GM, ACC, CAVITY_INFERENCE > > TimingVisitorType
GraphicalModelType::IndependentFactorType IndependentFactorType