Merged prob.h, factorgraph.h, factograph.cpp from SVN head (broken!)
[libdai.git] / example.cpp
index 5bada87..9e72056 100644 (file)
@@ -1,28 +1,29 @@
-/*  Copyright 2006-2008  Joris Mooij
-    jorism@jorismooij.nl
+/*  Copyright (C) 2006-2008  Joris Mooij  [j dot mooij at science dot ru dot nl]
+    Radboud University Nijmegen, The Netherlands
     
-    This file is part of AI.
+    This file is part of libDAI.
 
-    AI is free software; you can redistribute it and/or modify
+    libDAI is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
     the Free Software Foundation; either version 2 of the License, or
     (at your option) any later version.
 
-    AI is distributed in the hope that it will be useful,
+    libDAI is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     GNU General Public License for more details.
 
     You should have received a copy of the GNU General Public License
-    along with AI; if not, write to the Free Software
+    along with libDAI; if not, write to the Free Software
     Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 */
 
 
 #include <iostream>
-#include "alldai.h"
+#include <dai/alldai.h>
 
 
+using namespace dai;
 using namespace std;
 
 
@@ -39,11 +40,11 @@ int main( int argc, char *argv[] ) {
             cout << "Error reading " << argv[1] << endl;
             return 2;
         } else {
-            size_t  maxiter = 1000;
+            size_t  maxiter = 10000;
             double  tol = 1e-9;
             size_t  verb = 1;
 
-            Properties opts;
+            PropertySet opts;
             opts.Set("maxiter",maxiter);
             opts.Set("tol",tol);
             opts.Set("verbose",verb);
@@ -52,17 +53,28 @@ int main( int argc, char *argv[] ) {
             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 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;
+
+            cout << "Exact log partition sum: " << jt.logZ() << endl;
+            cout << "Approximate (loopy belief propagation) log partition sum: " << bp.logZ() << endl;
         }
     }