Merge branch 'master' of git@git.tuebingen.mpg.de:libdai
[libdai.git] / include / dai / mr.h
index ef7b6b0..41610e7 100644 (file)
@@ -28,6 +28,7 @@
 #include <dai/factorgraph.h>
 #include <dai/daialg.h>
 #include <dai/enum.h>
+#include <dai/properties.h>
 #include <dai/exceptions.h>
 
 
@@ -56,13 +57,18 @@ class MR : public DAIAlgFG {
         std::vector<double> Mag;
 
     public:
-        ENUM2(UpdateType,FULL,LINEAR)
-        ENUM3(InitType,RESPPROP,CLAMPING,EXACT)
+        struct Properties {
+            size_t verbose;
+            double tol;
+            ENUM2(UpdateType,FULL,LINEAR)
+            ENUM3(InitType,RESPPROP,CLAMPING,EXACT)
+            UpdateType updates;
+            InitType inits;
+        } props;
+        double maxdiff;
 
-        UpdateType Updates() const { return GetPropertyAs<UpdateType>("updates"); }
-        InitType Inits() const { return GetPropertyAs<InitType>("inits"); }
-
-        MR( const FactorGraph & fg, const Properties &opts );
+    public:
+        MR( const FactorGraph & fg, const PropertySet &opts );
         void init(size_t Nin, double *_w, double *_th);
         void makekindex();
         void read_files();
@@ -77,11 +83,11 @@ class MR : public DAIAlgFG {
             return Factor(); 
         }
         std::vector<Factor> beliefs() const;
-        Complex logZ() const { 
+        Real logZ() const { 
             DAI_THROW(NOT_IMPLEMENTED);
             return 0.0; 
         }
-        void init() { assert( checkProperties() ); }
+        void init() {}
         static const char *Name;
         std::string identify() const;
         double _tJ(size_t i, sub_nb A);
@@ -98,8 +104,9 @@ class MR : public DAIAlgFG {
         double sign(double a) { return (a >= 0) ? 1.0 : -1.0; }
         MR* clone() const { return new MR(*this); }
 
-        bool checkProperties();
-
+        void setProperties( const PropertySet &opts );
+        PropertySet getProperties() const;
+        double maxDiff() const { return maxdiff; }
 };