Small changes
[libdai.git] / include / dai / jtree.h
index 48b8b47..12f4fef 100644 (file)
@@ -32,6 +32,7 @@
 #include <dai/clustergraph.h>
 #include <dai/weightedgraph.h>
 #include <dai/enum.h>
+#include <dai/properties.h>
 
 
 namespace dai {
@@ -42,16 +43,19 @@ class JTree : public DAIAlgRG {
         DEdgeVec             _RTree;     // rooted tree
         std::vector<Factor>  _Qa;
         std::vector<Factor>  _Qb;
-        std::vector<Factor>  _mes;
+        std::vector<std::vector<Factor> >  _mes;
         double               _logZ;
 
-
     public:
-        ENUM2(UpdateType,HUGIN,SHSH)
-        UpdateType Updates() const { return GetPropertyAs<UpdateType>("updates"); }
+        struct Properties {
+            size_t verbose;
+            DAI_ENUM(UpdateType,HUGIN,SHSH)
+            UpdateType updates;
+        } props;
 
-        JTree() : DAIAlgRG(), _RTree(), _Qa(), _Qb(), _mes(), _logZ() {};
-        JTree( const JTree& x ) : DAIAlgRG(x), _RTree(x._RTree), _Qa(x._Qa), _Qb(x._Qb), _mes(x._mes), _logZ(x._logZ) {};
+    public:
+        JTree() : DAIAlgRG(), _RTree(), _Qa(), _Qb(), _mes(), _logZ(), props() {}
+        JTree( const JTree& x ) : DAIAlgRG(x), _RTree(x._RTree), _Qa(x._Qa), _Qb(x._Qb), _mes(x._mes), _logZ(x._logZ), props(x.props) {}
         JTree* clone() const { return new JTree(*this); }
         JTree & operator=( const JTree& x ) {
             if( this != &x ) {
@@ -61,35 +65,35 @@ class JTree : public DAIAlgRG {
                 _Qb     = x._Qb;
                 _mes    = x._mes;
                 _logZ   = x._logZ;
+                props   = x.props;
             }
             return *this;
         }
-        JTree( const FactorGraph &fg, const Properties &opts, bool automatic=true );
+        JTree( const FactorGraph &fg, const PropertySet &opts, bool automatic=true );
         void GenerateJT( const std::vector<VarSet> &Cliques );
 
-        Factor & message(size_t i1, size_t i2) { return( _mes[ORIR2E(i1,i2)] ); }   
-        const Factor & message(size_t i1, size_t i2) const { return( _mes[ORIR2E(i1,i2)] ); }   
+        Factor & message( size_t alpha, size_t _beta ) { return _mes[alpha][_beta]; }   
+        const Factor & message( size_t alpha, size_t _beta ) const { return _mes[alpha][_beta]; }   
 
         static const char *Name;
         std::string identify() const;
-//      void Regenerate();
-        void init() {
-            assert( checkProperties() );
-        }
+        void init() {}
         void runHUGIN();
         void runShaferShenoy();
         double run();
         Factor belief( const Var &n ) const;
         Factor belief( const VarSet &ns ) const;
         std::vector<Factor> beliefs() const;
-        Complex logZ() const;
+        Real logZ() const;
 
         void init( const VarSet &/*ns*/ ) {}
         void undoProbs( const VarSet &ns ) { RegionGraph::undoProbs( ns ); init( ns ); }
 
         size_t findEfficientTree( const VarSet& ns, DEdgeVec &Tree, size_t PreviousRoot=(size_t)-1 ) const;
         Factor calcMarginal( const VarSet& ns );
-        bool checkProperties();
+        void setProperties( const PropertySet &opts );
+        PropertySet getProperties() const;
+        double maxDiff() const { return 0.0; }
 };