Extended SWIG python interface (inspired by Kyle Ellrott): inference is possible...
[libdai.git] / include / dai / exactinf.h
index 48f15e4..52268f4 100644 (file)
@@ -1,11 +1,8 @@
 /*  This file is part of libDAI - http://www.libdai.org/
  *
- *  libDAI is licensed under the terms of the GNU General Public License version
- *  2, or (at your option) any later version. libDAI is distributed without any
- *  warranty. See the file COPYING for more details.
+ *  Copyright (c) 2006-2011, The libDAI authors. All rights reserved.
  *
- *  Copyright (C) 2006-2009  Joris Mooij  [joris dot mooij at libdai dot org]
- *  Copyright (C) 2006-2007  Radboud University Nijmegen, The Netherlands
+ *  Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
  */
 
 
@@ -34,15 +31,12 @@ namespace dai {
  */
 class ExactInf : public DAIAlgFG {
     public:
-        /// Parameters of this inference algorithm
+        /// Parameters for ExactInf
         struct Properties {
-            /// Verbosity
+            /// Verbosity (amount of output sent to stderr)
             size_t verbose;
         } props;
 
-        /// Name of this inference algorithm
-        static const char *Name;
-
     private:
         /// All single variable marginals
         std::vector<Factor> _beliefsV;
@@ -58,6 +52,9 @@ class ExactInf : public DAIAlgFG {
         ExactInf() : DAIAlgFG(), props(), _beliefsV(), _beliefsF(), _logZ(0) {}
 
         /// Construct from FactorGraph \a fg and PropertySet \a opts
+        /** \param fg Factor graph.
+         *  \param opts Parameters @see Properties
+         */
         ExactInf( const FactorGraph &fg, const PropertySet &opts ) : DAIAlgFG(fg), props(), _beliefsV(), _beliefsF(), _logZ() {
             setProperties( opts );
             construct();
@@ -67,15 +64,19 @@ class ExactInf : public DAIAlgFG {
     /// \name General InfAlg interface
     //@{
         virtual ExactInf* clone() const { return new ExactInf(*this); }
-        virtual std::string identify() const;
-        virtual Factor belief( const Var &n ) const { return beliefV( findVar( n ) ); }
-        virtual Factor belief( const VarSet &ns ) const;
+        virtual ExactInf* construct( const FactorGraph &fg, const PropertySet &opts ) const { return new ExactInf( fg, opts ); }
+        virtual std::string name() const { return "EXACT"; }
+        virtual Factor belief( const Var &v ) const { return beliefV( findVar( v ) ); }
+        virtual Factor belief( const VarSet &vs ) const;
         virtual Factor beliefV( size_t i ) const { return _beliefsV[i]; }
         virtual Factor beliefF( size_t I ) const { return _beliefsF[I]; }
         virtual std::vector<Factor> beliefs() const;
         virtual Real logZ() const { return _logZ; }
+        /** \note The complexity of this calculation is exponential in the number of variables.
+         */
+        std::vector<size_t> findMaximum() const;
         virtual void init();
-        virtual void init( const VarSet &/*ns*/ ) { DAI_THROW(NOT_IMPLEMENTED); }
+        virtual void init( const VarSet &/*ns*/ ) {}
         virtual Real run();
         virtual Real maxDiff() const { DAI_THROW(NOT_IMPLEMENTED); return 0.0; }
         virtual size_t Iterations() const { DAI_THROW(NOT_IMPLEMENTED); return 0; }
@@ -84,6 +85,14 @@ class ExactInf : public DAIAlgFG {
         virtual std::string printProperties() const;
     //@}
 
+    /// \name Additional interface specific for ExactInf
+    //@{
+        /// Calculates marginal probability distribution for variables \a vs
+        /** \note The complexity of this calculation is exponential in the number of variables.
+         */
+        Factor calcMarginal( const VarSet &vs ) const;
+    //@}
+
     private:
         /// Helper function for constructors
         void construct();