Updated copyrights
[libdai.git] / example.cpp
index 53adcfc..47c83f3 100644 (file)
@@ -1,6 +1,7 @@
-/*  Copyright (C) 2006-2008  Joris Mooij  [j dot mooij at science dot ru dot nl]
-    Radboud University Nijmegen, The Netherlands
-    
+/*  Copyright (C) 2006-2008  Joris Mooij  [joris dot mooij at tuebingen dot mpg dot de]
+    Radboud University Nijmegen, The Netherlands /
+    Max Planck Institute for Biological Cybernetics, Germany
+
     This file is part of libDAI.
 
     libDAI is free software; you can redistribute it and/or modify
@@ -35,36 +36,43 @@ int main( int argc, char *argv[] ) {
         return 1;
     } else {
         FactorGraph fg;
+        fg.ReadFromFile(argv[1]);
+
+        size_t  maxiter = 10000;
+        double  tol = 1e-9;
+        size_t  verb = 1;
+
+        PropertySet opts;
+        opts.Set("maxiter",maxiter);
+        opts.Set("tol",tol);
+        opts.Set("verbose",verb);
+
+        JTree jt( fg, opts("updates",string("HUGIN")) );
+        jt.init();
+        jt.run();
+
+        BP bp(fg, opts("updates",string("SEQFIX"))("logdomain",false));
+        bp.init();
+        bp.run();
+
+        cout << "Exact single node marginals:" << endl;
+        for( size_t i = 0; i < fg.nrVars(); i++ )
+            cout << jt.belief(fg.var(i)) << endl;
+
+        cout << "Approximate (loopy belief propagation) single node marginals:" << endl;
+        for( size_t i = 0; i < fg.nrVars(); i++ )
+            cout << bp.belief(fg.var(i)) << endl;
+
+        cout << "Exact factor marginals:" << endl;
+        for( size_t I = 0; I < fg.nrFactors(); I++ )
+            cout << jt.belief(fg.factor(I).vars()) << endl;
+
+        cout << "Approximate (loopy belief propagation) factor marginals:" << endl;
+        for( size_t I = 0; I < fg.nrFactors(); I++ )
+            cout << bp.belief(fg.factor(I).vars()) << "=" << bp.beliefF(I) << endl;
 
-        if( fg.ReadFromFile(argv[1]) ) {
-            cout << "Error reading " << argv[1] << endl;
-            return 2;
-        } else {
-            size_t  maxiter = 1000;
-            double  tol = 1e-9;
-            size_t  verb = 1;
-
-            Properties opts;
-            opts.Set("maxiter",maxiter);
-            opts.Set("tol",tol);
-            opts.Set("verbose",verb);
-
-            JTree jt( fg, opts("updates",string("HUGIN")) );
-            jt.init();
-            jt.run();
-
-            cout << "Exact single node marginals:" << endl;
-            for( size_t i = 0; i < fg.nrVars(); i++ )
-                cout << jt.belief(fg.var(i)) << endl;
-
-            BP bp(fg, opts("updates",string("SEQMAX")));
-            bp.init();
-            bp.run();
-
-            cout << "Approximate (loopy belief propagation) single node marginals:" << endl;
-            for( size_t i = 0; i < fg.nrVars(); i++ )
-                cout << bp.belief(fg.var(i)) << endl;
-        }
+        cout << "Exact log partition sum: " << jt.logZ() << endl;
+        cout << "Approximate (loopy belief propagation) log partition sum: " << bp.logZ() << endl;
     }
 
     return 0;