Merge branch 'joris'
[libdai.git] / include / dai / exactinf.h
index 3c398dd..1286c0f 100644 (file)
@@ -1,6 +1,7 @@
-/*  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.
 
     libDAI is free software; you can redistribute it and/or modify
 */
 
 
+/// \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 algorithm
+        static const char *Name;
+
     private:
         std::vector<Factor> _beliefsV;
         std::vector<Factor> _beliefsF;
@@ -46,21 +58,10 @@ class ExactInf : public DAIAlgFG {
     public:
         /// Default constructor
         ExactInf() : DAIAlgFG(), props(), _beliefsV(), _beliefsF(), _logZ(0) {}
-        
+
         /// Copy constructor
         ExactInf( const ExactInf &x ) : DAIAlgFG(x), props(x.props), _beliefsV(x._beliefsV), _beliefsF(x._beliefsF), _logZ(x._logZ) {}
 
-        /// Clone (virtual copy constructor)
-        virtual ExactInf* clone() const {
-            return new ExactInf(*this);
-        }
-
-        /// Construct from FactorGraph fg and PropertySet opts
-        ExactInf( const FactorGraph &fg, const PropertySet &opts ) : DAIAlgFG(fg), props(), _beliefsV(), _beliefsF(), _logZ() {
-            setProperties( opts );
-            create();
-        }
-        
         /// Assignment operator
         ExactInf& operator=( const ExactInf &x ) {
             if( this != &x ) {
@@ -73,62 +74,41 @@ class ExactInf : public DAIAlgFG {
             return *this;
         }
 
-/*        /// Create (virtual constructor)
-        virtual ExactInf* create() const {
-            return new ExactInf();
-        }
-*/
-        /// Return maximum difference between single node 
-        /// beliefs for two consecutive iterations
-        virtual double maxDiff() const {
-            DAI_THROW(NOT_IMPLEMENTED);
-            return 0.0;
+        /// Construct from FactorGraph fg and PropertySet opts
+        ExactInf( const FactorGraph &fg, const PropertySet &opts ) : DAIAlgFG(fg), props(), _beliefsV(), _beliefsF(), _logZ() {
+            setProperties( opts );
+            construct();
         }
+
         
-        /// Identifies itself for logging purposes
+        /// @name General InfAlg interface
+        //@{
+        virtual ExactInf* clone() const { return new ExactInf(*this); }
+        virtual ExactInf* create() const { return new ExactInf(); }
         virtual std::string identify() const;
-
-        /// Get single node belief
-        virtual Factor belief( const Var &n ) const {
-            return beliefV( findVar( n ) ); 
-        }
-
-        /// Get general belief
-        virtual Factor belief( const VarSet &n ) const;
-
-        /// Get all beliefs
+        virtual Factor belief( const Var &n ) const { return beliefV( findVar( n ) ); }
+        virtual Factor belief( const VarSet &ns ) const;
         virtual std::vector<Factor> beliefs() const;
-
-        /// Get log partition sum
-        virtual Real logZ() const {
-            return _logZ;
-        }
-
-        /// Clear messages and beliefs
+        virtual Real logZ() const { return _logZ; }
         virtual void init();
-
-        /// Clear messages and beliefs corresponding to the nodes in ns
-        virtual void init( const VarSet &/*ns*/ ) {}
-
-        /// 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; }
+        //@}
+        
 
-        /// Name of this inference method
-        static const char *Name;
+        /// @name Additional interface specific for ExactInf
+        //@{ 
+        Factor beliefV( size_t i ) const { return _beliefsV[i]; }
+        Factor beliefF( size_t I ) const { return _beliefsF[I]; }
+        //@}
 
-        void create();
-        void undoProbs( const VarSet &ns ) { FactorGraph::undoProbs(ns); init(ns); }
+    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]; 
-        }
 };