Extended SWIG python interface (inspired by Kyle Ellrott): inference is possible...
[libdai.git] / include / dai / exactinf.h
index 5a1f0bf..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.
  */
 
 
@@ -40,9 +37,6 @@ class ExactInf : public DAIAlgFG {
             size_t verbose;
         } props;
 
-        /// Name of this inference algorithm
-        static const char *Name;
-
     private:
         /// All single variable marginals
         std::vector<Factor> _beliefsV;
@@ -58,7 +52,8 @@ class ExactInf : public DAIAlgFG {
         ExactInf() : DAIAlgFG(), props(), _beliefsV(), _beliefsF(), _logZ(0) {}
 
         /// Construct from FactorGraph \a fg and PropertySet \a opts
-        /** \param opts Parameters @see Properties
+        /** \param fg Factor graph.
+         *  \param opts Parameters @see Properties
          */
         ExactInf( const FactorGraph &fg, const PropertySet &opts ) : DAIAlgFG(fg), props(), _beliefsV(), _beliefsF(), _logZ() {
             setProperties( opts );
@@ -69,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; }
@@ -86,7 +85,7 @@ class ExactInf : public DAIAlgFG {
         virtual std::string printProperties() const;
     //@}
 
-    /// \name Additional interface specific for JTree
+    /// \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.
@@ -94,7 +93,6 @@ class ExactInf : public DAIAlgFG {
         Factor calcMarginal( const VarSet &vs ) const;
     //@}
 
-
     private:
         /// Helper function for constructors
         void construct();