Merge branch 'joris'
[libdai.git] / include / dai / exactinf.h
index 246b433..1286c0f 100644 (file)
@@ -1,5 +1,6 @@
-/*  Copyright (C) 2006-2008  Joris Mooij  [j dot mooij at science dot ru dot nl]
-    Radboud University Nijmegen, The Netherlands
+/*  Copyright (C) 2006-2008  Joris Mooij  [joris dot mooij at tuebingen dot mpg dot de]
+    Radboud University Nijmegen, The Netherlands /
+    Max Planck Institute for Biological Cybernetics, Germany
 
     This file is part of libDAI.
 
 */
 
 
+/// \file
+/// \brief Defines ExactInf class
+/// \todo Improve documentation
+
+
 #ifndef __defined_libdai_exactinf_h
 #define __defined_libdai_exactinf_h
 
 namespace dai {
 
 
+/// Exact inference algorithm using brute force enumeration (mainly useful for testing purposes)
 class ExactInf : public DAIAlgFG {
     public:
+        /// Parameters of this inference algorithm
         struct Properties {
+            /// Verbosity
             size_t verbose;
         } props;
-        /// Name of this inference method
+
+        /// Name of this inference algorithm
         static const char *Name;
 
     private:
@@ -49,21 +59,9 @@ class ExactInf : public DAIAlgFG {
         /// Default constructor
         ExactInf() : DAIAlgFG(), props(), _beliefsV(), _beliefsF(), _logZ(0) {}
 
-        /// Construct from FactorGraph fg and PropertySet opts
-        ExactInf( const FactorGraph &fg, const PropertySet &opts ) : DAIAlgFG(fg), props(), _beliefsV(), _beliefsF(), _logZ() {
-            setProperties( opts );
-            construct();
-        }
-        
         /// Copy constructor
         ExactInf( const ExactInf &x ) : DAIAlgFG(x), props(x.props), _beliefsV(x._beliefsV), _beliefsF(x._beliefsF), _logZ(x._logZ) {}
 
-        /// Clone *this (virtual copy constructor)
-        virtual ExactInf* clone() const { return new ExactInf(*this); }
-
-        /// Create (virtual default constructor)
-        virtual ExactInf* create() const { return new ExactInf(); }
-
         /// Assignment operator
         ExactInf& operator=( const ExactInf &x ) {
             if( this != &x ) {
@@ -76,51 +74,41 @@ class ExactInf : public DAIAlgFG {
             return *this;
         }
 
-        /// Identifies itself for logging purposes
-        virtual std::string identify() const;
+        /// Construct from FactorGraph fg and PropertySet opts
+        ExactInf( const FactorGraph &fg, const PropertySet &opts ) : DAIAlgFG(fg), props(), _beliefsV(), _beliefsF(), _logZ() {
+            setProperties( opts );
+            construct();
+        }
 
-        /// Get single node belief
+        
+        /// @name General InfAlg interface
+        //@{
+        virtual ExactInf* clone() const { return new ExactInf(*this); }
+        virtual ExactInf* create() const { return new ExactInf(); }
+        virtual std::string identify() const;
         virtual Factor belief( const Var &n ) const { return beliefV( findVar( n ) ); }
-
-        /// Get general belief
         virtual Factor belief( const VarSet &ns ) const;
-
-        /// Get all beliefs
         virtual std::vector<Factor> beliefs() const;
-
-        /// Get log partition sum
         virtual Real logZ() const { return _logZ; }
-
-        /// Clear messages and beliefs
         virtual void init();
-
-        /// Clear messages and beliefs corresponding to the nodes in ns
-        virtual void init( const VarSet &/*ns*/ ) {
-            DAI_THROW(NOT_IMPLEMENTED);
-        }
-
-        /// The actual approximate inference algorithm
+        virtual void init( const VarSet &/*ns*/ ) { DAI_THROW(NOT_IMPLEMENTED); }
         virtual double run();
+        virtual double maxDiff() const { DAI_THROW(NOT_IMPLEMENTED); return 0.0; }
+        virtual size_t Iterations() const { DAI_THROW(NOT_IMPLEMENTED); return 0; }
+        //@}
+        
 
-        /// Return maximum difference between single node beliefs in the last pass
-        virtual double maxDiff() const {
-            DAI_THROW(NOT_IMPLEMENTED);
-            return 0.0;
-        }
+        /// @name Additional interface specific for ExactInf
+        //@{ 
+        Factor beliefV( size_t i ) const { return _beliefsV[i]; }
+        Factor beliefF( size_t I ) const { return _beliefsF[I]; }
+        //@}
 
-        /// Return number of passes over the factorgraph
-        virtual size_t Iterations() const { 
-            DAI_THROW(NOT_IMPLEMENTED);
-            return 0; 
-        }
-        
+    private:
         void construct();
         void setProperties( const PropertySet &opts );
         PropertySet getProperties() const;
         std::string printProperties() const;
-
-        Factor beliefV( size_t i ) const { return _beliefsV[i]; }
-        Factor beliefF( size_t I ) const { return _beliefsF[I]; }
 };