Cleaned up variable elimination code in ClusterGraph
[libdai.git] / include / dai / jtree.h
index b92d3e5..37f6981 100644 (file)
@@ -59,21 +59,29 @@ class JTree : public DAIAlgRG {
         /// Inner region beliefs
         std::vector<Factor> Qb;
 
-        /// Parameters of this inference algorithm
+        /// Parameters for JTree
         struct Properties {
             /// Enumeration of possible JTree updates
+            /** There are two types of updates:
+             *  - HUGIN similar to those in HUGIN
+             *  - SHSH Shafer-Shenoy type
+             */
             DAI_ENUM(UpdateType,HUGIN,SHSH);
 
             /// Enumeration of inference variants
+            /** There are two inference variants:
+             *  - SUMPROD Sum-Product
+             *  - MAXPROD Max-Product (equivalent to Min-Sum)
+             */
             DAI_ENUM(InfType,SUMPROD,MAXPROD);
 
-            /// Verbosity
+            /// Verbosity (amount of output sent to stderr)
             size_t verbose;
 
-            /// Type of updates: HUGIN or Shafer-Shenoy
+            /// Type of updates
             UpdateType updates;
 
-            /// Type of inference: sum-product or max-product
+            /// Type of inference
             InfType inference;
         } props;
 
@@ -88,7 +96,7 @@ class JTree : public DAIAlgRG {
 
         /// Construct from FactorGraph \a fg and PropertySet \a opts
         /** \param fg factor graph (which has to be connected);
-         *  \param opts parameters;
+         ** \param opts Parameters @see Properties
          *  \param automatic if \c true, construct the junction tree automatically, using the MinFill heuristic.
          *  \throw FACTORGRAPH_NOT_CONNECTED if \a fg is not connected
          */
@@ -100,8 +108,7 @@ class JTree : public DAIAlgRG {
     //@{
         virtual JTree* clone() const { return new JTree(*this); }
         virtual std::string identify() const;
-        virtual Factor belief( const Var &n ) const;
-        virtual Factor belief( const VarSet &ns ) const;
+        virtual Factor belief( const VarSet &vs ) const;
         virtual std::vector<Factor> beliefs() const;
         virtual Real logZ() const;
         virtual void init() {}
@@ -121,12 +128,20 @@ class JTree : public DAIAlgRG {
         /** First, constructs a weighted graph, where the nodes are the elements of \a cl, and 
          *  each edge is weighted with the cardinality of the intersection of the state spaces of the nodes. 
          *  Then, a maximal spanning tree for this weighted graph is calculated.
-         *  Finally, a corresponding region graph is built:
+         *  Subsequently, a corresponding region graph is built:
          *    - the outer regions correspond with the cliques and have counting number 1;
          *    - the inner regions correspond with the seperators, i.e., the intersections of two 
          *      cliques that are neighbors in the spanning tree, and have counting number -1;
          *    - inner and outer regions are connected by an edge if the inner region is a
          *      seperator for the outer region.
+         *  Finally, Beliefs are constructed.
+         *  If \a verify == \c true, checks whether each factor is subsumed by a clique.
+         */
+        void construct( const std::vector<VarSet> &cl, bool verify=false );
+
+        /// Constructs a junction tree based on the cliques \a cl (corresponding to some elimination sequence).
+        /** Invokes construct() and then constructs messages.
+         *  \see construct()
          */
         void GenerateJT( const std::vector<VarSet> &cl );
 
@@ -175,12 +190,6 @@ class JTree : public DAIAlgRG {
 std::pair<size_t,size_t> boundTreewidth( const FactorGraph & fg );
 
 
-/// Calculates upper bound to the treewidth of a FactorGraph, using the MinFill heuristic
-/** \deprecated Renamed into boundTreewidth()
- */
-std::pair<size_t,size_t> treewidth( const FactorGraph & fg );
-
-
 } // end of namespace dai