OpenGM  2.3.x
Discrete Graphical Model Library
dec_map.hxx
Go to the documentation of this file.
1 #ifndef OPENGM_LIBDAI_DEC_MAP_HXX
2 #define OPENGM_LIBDAI_DEC_MAP_HXX
4 
5 namespace opengm{
6 namespace external{
7 namespace libdai{
8 
9 class None{
10  struct Parameter{
11  Parameter() {
12  }
13  };
14 };
15 
16 template<class SUB_INFERENCE>
17 class DecMap :
18  public LibDaiInference<typename SUB_INFERENCE::GraphicalModelType,typename SUB_INFERENCE::AccumulationType,DecMap<SUB_INFERENCE> >,
19  public opengm::Inference<typename SUB_INFERENCE::GraphicalModelType,typename SUB_INFERENCE::AccumulationType>
20 {
21  public:
22  typedef typename SUB_INFERENCE::AccumulationType AccumulationType;
23  typedef typename SUB_INFERENCE::GraphicalModelType GraphicalModelType;
28 
29  typedef typename SUB_INFERENCE::Parameter SubInferenceParameter;
30 
31  std::string name() const{
32  return "libDAI-Dec-Map";
33  }
34 
35 
36  // DECMAP[
37  // ianame=BP,
38  // iaopts=[
39  // inference=MAXPROD,
40  // updates=SEQRND,logdomain=1,tol=1e-9,maxiter=10000,damping=0.1,verbose=0
41  // ],
42  //reinit=1,verbose=0]
43 
44  struct Parameter{
45  Parameter
46  (
47  const SubInferenceParameter & subInferenceParameter =SubInferenceParameter(),
48  const size_t reinit=1,
49  const size_t verbose=0
50  ) : subInferenceParam_(subInferenceParameter),
51  reinit_(reinit),
52  verbose_(verbose) {
53  }
54  std::string toString()const{
55  std::string ur,cav,subAiName,subAiOpts;
56  std::string subAiAsString =subInferenceParam_.toString();
57  if(opengm::meta::Compare<SUB_INFERENCE,opengm::external::libdai::None>::value) {
58  subAiName="NONE";
59  subAiOpts="[]";
60  }
61  else{
62  size_t counter=0;
63  while(subAiAsString[counter]!='[') {
64  subAiName.push_back(subAiAsString[counter]);
65  ++counter;
66  }
67  subAiOpts.reserve(subAiAsString.size()-subAiName.size());
68  for(;counter<subAiAsString.size();++counter) {
69  subAiOpts.push_back(subAiAsString[counter]);
70  if(subAiAsString[counter]==']'){
71  break;
72  }
73  }
74  }
75 
76  std::stringstream ss;
77  ss <<"DECMAP["
78  <<"ianame="<<subAiName<<","
79  <<"iaopts="<<subAiOpts<<","
80  <<"reinit="<<reinit_<<","
81  <<"verbose="<<verbose_<<"]";
82  return ss.str();
83  }
84 
85  size_t reinit_;
86  SubInferenceParameter subInferenceParam_;
87  size_t verbose_;
88  };
89  DecMap(const GraphicalModelType & gm,const Parameter param=Parameter())
90  :LibDaiInference<GraphicalModelType,AccumulationType,DecMap<SUB_INFERENCE> >(gm,param.toString()) {
91 
92  }
93 
94  virtual const GraphicalModelType& graphicalModel() const{
95  return this->graphicalModel_impl();
96  }
97 
98  virtual void reset(){
99  return this->reset_impl();
100  }
101 
103  return this->infer_impl();
104  }
105 
106  template<class VISITOR>
107  InferenceTermination infer(VISITOR& visitor ){
108  visitor.begin(*this);
109  InferenceTermination infTerm = this->infer_impl();
110  visitor.end(*this);
111  return infTerm;
112  }
113 
114  virtual InferenceTermination arg(std::vector<LabelType>& v, const size_t argnr=1)const{
115  return this->arg_impl(v,argnr);
116  }
117  virtual InferenceTermination marginal(const size_t v, IndependentFactorType& m) const{
118  return this->marginal_impl(v,m);
119  }
120  virtual InferenceTermination factorMarginal(const size_t f, IndependentFactorType& m) const{
121  return this->factorMarginal_impl(f,m);
122  }
123 
124 };
125 
126 } // end namespace libdai
127 } // end namespace external
128 } //end namespace opengm
129 
130 #endif // OPENGM_LIBDAI_DEC_MAP_HXX
opengm::visitors::TimingVisitor< DecMap< SUB_INFERENCE > > TimingVisitorType
Definition: dec_map.hxx:26
Parameter(const SubInferenceParameter &subInferenceParameter=SubInferenceParameter(), const size_t reinit=1, const size_t verbose=0)
Definition: dec_map.hxx:46
The OpenGM namespace.
Definition: config.hxx:43
virtual InferenceTermination infer()
Definition: dec_map.hxx:102
std::string name() const
Definition: dec_map.hxx:31
DecMap(const GraphicalModelType &gm, const Parameter param=Parameter())
Definition: dec_map.hxx:89
virtual InferenceTermination factorMarginal(const size_t f, IndependentFactorType &m) const
output a solution for a marginal for all variables connected to a factor
Definition: dec_map.hxx:120
virtual InferenceTermination marginal(const size_t v, IndependentFactorType &m) const
output a solution for a marginal for a specific variable
Definition: dec_map.hxx:117
SUB_INFERENCE::Parameter SubInferenceParameter
Definition: dec_map.hxx:29
SubInferenceParameter subInferenceParam_
Definition: dec_map.hxx:86
InferenceTermination infer(VISITOR &visitor)
Definition: dec_map.hxx:107
Inference algorithm interface.
Definition: inference.hxx:34
SUB_INFERENCE::GraphicalModelType GraphicalModelType
Definition: dec_map.hxx:23
virtual const GraphicalModelType & graphicalModel() const
Definition: dec_map.hxx:94
opengm::visitors::EmptyVisitor< DecMap< SUB_INFERENCE > > EmptyVisitorType
Definition: dec_map.hxx:27
opengm::visitors::VerboseVisitor< DecMap< SUB_INFERENCE > > VerboseVisitorType
Definition: dec_map.hxx:25
virtual InferenceTermination arg(std::vector< LabelType > &v, const size_t argnr=1) const
output a solution
Definition: dec_map.hxx:114
InferenceTermination
Definition: inference.hxx:24
SUB_INFERENCE::AccumulationType AccumulationType
Definition: dec_map.hxx:22