Cleaned up variable elimination code in ClusterGraph
[libdai.git] / include / dai / mr.h
index 10e7201..ce8a7c6 100644 (file)
@@ -33,6 +33,7 @@ namespace dai {
 
 /// Approximate inference algorithm by Montanari and Rizzo [\ref MoR05]
 /** \author Bastian Wemmenhove wrote the original implementation before it was merged into libDAI
+ *  \todo Clean up code (use a BipartiteGraph-like implementation for the graph structure)
  */
 class MR : public DAIAlgFG {
     private:
@@ -66,7 +67,7 @@ class MR : public DAIAlgFG {
         size_t _iters;
 
     public:
-        /// Parameters of this inference algorithm
+        /// Parameters for MR
         struct Properties {
             /// Enumeration of different types of update equations
             /** The possible update equations are:
@@ -83,10 +84,10 @@ class MR : public DAIAlgFG {
              */
             DAI_ENUM(InitType,RESPPROP,CLAMPING,EXACT);
 
-            /// Verbosity
+            /// Verbosity (amount of output sent to stderr)
             size_t verbose;
 
-            /// Tolerance
+            /// Tolerance for convergence test
             Real tol;
 
             /// Update equations
@@ -104,7 +105,8 @@ class MR : public DAIAlgFG {
         MR() : DAIAlgFG(), supported(), con(), nb(), tJ(), theta(), M(), kindex(), cors(), N(), Mag(), _maxdiff(), _iters(), props() {}
 
         /// Construct from FactorGraph \a fg and PropertySet \a opts
-        /** \note This implementation only deals with binary variables and pairwise interactions.
+        /** \param opts Parameters @see Properties
+         *  \note This implementation only deals with binary variables and pairwise interactions.
          *  \throw NOT_IMPLEMENTED if \a fg has factors depending on three or more variables or has variables with more than two possible states.
          */
         MR( const FactorGraph &fg, const PropertySet &opts );
@@ -114,8 +116,9 @@ class MR : public DAIAlgFG {
     //@{
         virtual MR* clone() const { return new MR(*this); }
         virtual std::string identify() const;
-        virtual Factor belief( const Var &n ) const;
-        virtual Factor belief( const VarSet &/*ns*/ ) const { DAI_THROW(NOT_IMPLEMENTED); return Factor(); }
+        virtual Factor belief( const Var &v ) const { return beliefV( findVar( v ) ); }
+        virtual Factor belief( const VarSet &/*vs*/ ) const { DAI_THROW(NOT_IMPLEMENTED); return Factor(); }
+        virtual Factor beliefV( size_t i ) const;
         virtual std::vector<Factor> beliefs() const;
         virtual Real logZ() const { DAI_THROW(NOT_IMPLEMENTED); return 0.0; }
         virtual void init() {}