Merged SVN head ...
[libdai.git] / include / dai / jtree.h
index 4cfb7e0..eff98de 100644 (file)
@@ -1,6 +1,6 @@
 /*  Copyright (C) 2006-2008  Joris Mooij  [j dot mooij at science dot ru dot nl]
     Radboud University Nijmegen, The Netherlands
-    
+
     This file is part of libDAI.
 
     libDAI is free software; you can redistribute it and/or modify
@@ -52,16 +52,29 @@ class JTree : public DAIAlgRG {
             DAI_ENUM(UpdateType,HUGIN,SHSH)
             UpdateType updates;
         } props;
+        /// Name of this inference method
+        static const char *Name;
 
     public:
+        /// Default constructor
         JTree() : DAIAlgRG(), _RTree(), _Qa(), _Qb(), _mes(), _logZ(), props() {}
-        JTree( const JTree& x ) : DAIAlgRG(x), _RTree(x._RTree), _Qa(x._Qa), _Qb(x._Qb), _mes(x._mes), _logZ(x._logZ), props(x.props) {}
-        JTree* clone() const { return new JTree(*this); }
-        /// Create (virtual constructor)
+
+        /// Construct from FactorGraph fg and PropertySet opts
+        JTree( const FactorGraph &fg, const PropertySet &opts, bool automatic=true );
+
+        /// Copy constructor
+        JTree( const JTree &x ) : DAIAlgRG(x), _RTree(x._RTree), _Qa(x._Qa), _Qb(x._Qb), _mes(x._mes), _logZ(x._logZ), props(x.props) {}
+
+        /// Clone *this (virtual copy constructor)
+        virtual JTree* clone() const { return new JTree(*this); }
+
+        /// Create (virtual default constructor)
         virtual JTree* create() const { return new JTree(); }
-        JTree & operator=( const JTree& x ) {
+
+        /// Assignment operator
+        JTree& operator=( const JTree &x ) {
             if( this != &x ) {
-                DAIAlgRG::operator=(x);
+                DAIAlgRG::operator=( x );
                 _RTree  = x._RTree;
                 _Qa     = x._Qa;
                 _Qb     = x._Qb;
@@ -71,33 +84,51 @@ class JTree : public DAIAlgRG {
             }
             return *this;
         }
-        JTree( const FactorGraph &fg, const PropertySet &opts, bool automatic=true );
+
+        /// Identifies itself for logging purposes
+        virtual std::string identify() const;
+
+        /// Get single node belief
+        virtual Factor belief( const Var &n ) const;
+
+        /// 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;
+
+        /// Clear messages and beliefs
+        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 double run();
+
+        /// Return maximum difference between single node beliefs in the last pass
+        virtual double maxDiff() const { return 0.0; }
+
+        /// Return number of passes over the factorgraph
+        virtual size_t Iterations() const { return 1UL; }
+
+
         void GenerateJT( const std::vector<VarSet> &Cliques );
 
         Factor & message( size_t alpha, size_t _beta ) { return _mes[alpha][_beta]; }   
         const Factor & message( size_t alpha, size_t _beta ) const { return _mes[alpha][_beta]; }   
 
-        static const char *Name;
-        std::string identify() const;
-        void init() {}
-        /// Clear messages and beliefs corresponding to the nodes in ns
-        virtual void init( const VarSet &/*ns*/ ) {}
         void runHUGIN();
         void runShaferShenoy();
-        double run();
-        Factor belief( const Var &n ) const;
-        Factor belief( const VarSet &ns ) const;
-        std::vector<Factor> beliefs() const;
-        Real logZ() const;
-
-        void restoreFactors( const VarSet &ns ) { RegionGraph::restoreFactors( ns ); init( ns ); }
-
         size_t findEfficientTree( const VarSet& ns, DEdgeVec &Tree, size_t PreviousRoot=(size_t)-1 ) const;
         Factor calcMarginal( const VarSet& ns );
+
         void setProperties( const PropertySet &opts );
         PropertySet getProperties() const;
         std::string printProperties() const;
-        double maxDiff() const { return 0.0; }
 };