Fixed three minor issues
[libdai.git] / include / dai / mf.h
index 9218579..0f16815 100644 (file)
@@ -18,6 +18,7 @@
 
 
 #include <string>
+#include <dai/enum.h>
 #include <dai/daialg.h>
 #include <dai/factorgraph.h>
 #include <dai/properties.h>
@@ -31,6 +32,9 @@ namespace dai {
  *  single variable marginals (beliefs). The update equation for 
  *  a single belief \f$b_i\f$ is given by:
  *    \f[ b_i^{\mathrm{new}}(x_i) \propto \prod_{I\in N_i} \exp \left( \sum_{x_{N_I \setminus \{i\}}} \log f_I(x_I) \prod_{j \in N_I \setminus \{i\}} b_j(x_j) \right) \f]
+ *  for naive mean field and by
+ *    \f[ b_i^{\mathrm{new}}(x_i) \propto \prod_{I\in N_i} \left( \sum_{x_{N_I \setminus \{i\}}} f_I(x_I) \prod_{j \in N_I \setminus \{i\}} b_j(x_j) \right) \f]
+ *  for hard-spin mean field.
  *  These update equations are performed for all variables until convergence.
  */
 class MF : public DAIAlgFG {
@@ -45,6 +49,12 @@ class MF : public DAIAlgFG {
     public:
         /// Parameters for MF
         struct Properties {
+            /// Enumeration of possible message initializations
+            DAI_ENUM(InitType,UNIFORM,RANDOM);
+
+            /// Enumeration of possible update types
+            DAI_ENUM(UpdateType,NAIVE,HARDSPIN);
+
             /// Verbosity (amount of output sent to stderr)
             size_t verbose;
 
@@ -56,6 +66,12 @@ class MF : public DAIAlgFG {
 
             /// Damping constant (0.0 means no damping, 1.0 is maximum damping)
             Real damping;
+            
+            /// How to initialize the messages/beliefs
+            InitType init;
+
+            /// How to update the messages/beliefs
+            UpdateType updates;
         } props;
 
         /// Name of this inference algorithm
@@ -68,7 +84,8 @@ class MF : public DAIAlgFG {
         MF() : DAIAlgFG(), _beliefs(), _maxdiff(0.0), _iters(0U), props() {}
 
         /// Construct from FactorGraph \a fg and PropertySet \a opts
-        /** \param opts Parameters @see Properties
+        /** \param fg Factor graph.
+         *  \param opts Parameters @see Properties
          */
         MF( const FactorGraph &fg, const PropertySet &opts ) : DAIAlgFG(fg), _beliefs(), _maxdiff(0.0), _iters(0U), props() {
             setProperties( opts );
@@ -80,8 +97,8 @@ class MF : public DAIAlgFG {
     //@{
         virtual MF* clone() const { return new MF(*this); }
         virtual std::string identify() const;
-        virtual Factor belief( const Var &n ) const;
-        virtual Factor belief( const VarSet &ns ) const;
+        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;
         virtual std::vector<Factor> beliefs() const;
         virtual Real logZ() const;