Improved documentation of factor.h, ...
[libdai.git] / src / mf.cpp
index aab55ab..ae92182 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
     This file is part of libDAI.
 
     libDAI is free software; you can redistribute it and/or modify
@@ -24,7 +25,6 @@
 #include <map>
 #include <set>
 #include <dai/mf.h>
 #include <map>
 #include <set>
 #include <dai/mf.h>
-#include <dai/diffs.h>
 #include <dai/util.h>
 
 
 #include <dai/util.h>
 
 
@@ -116,9 +116,9 @@ double MF::run() {
             foreach( const Neighbor &j, nbF(I) ) // for all j in I \ i
                 if( j != i )
                     henk *= _beliefs[j];
             foreach( const Neighbor &j, nbF(I) ) // for all j in I \ i
                 if( j != i )
                     henk *= _beliefs[j];
-            piet = factor(I).log0();
+            piet = factor(I).log(true);
             piet *= henk;
             piet *= henk;
-            piet = piet.partSum(var(i));
+            piet = piet.marginal(var(i), false);
             piet = piet.exp();
             jan *= piet; 
         }
             piet = piet.exp();
             jan *= piet; 
         }
@@ -126,7 +126,7 @@ double MF::run() {
         jan.normalize();
 
         if( jan.hasNaNs() ) {
         jan.normalize();
 
         if( jan.hasNaNs() ) {
-            cout << "MF::run():  ERROR: jan has NaNs!" << endl;
+            cout << Name << "::run():  ERROR: jan has NaNs!" << endl;
             return 1.0;
         }
 
             return 1.0;
         }
 
@@ -145,11 +145,11 @@ double MF::run() {
         if( diffs.maxDiff() > props.tol ) {
             if( props.verbose == 1 )
                 cout << endl;
         if( diffs.maxDiff() > props.tol ) {
             if( props.verbose == 1 )
                 cout << endl;
-            cout << "MF::run:  WARNING: not converged within " << props.maxiter << " passes (" << toc() - tic << " clocks)...final maxdiff:" << diffs.maxDiff() << endl;
+            cout << Name << "::run:  WARNING: not converged within " << props.maxiter << " passes (" << toc() - tic << " seconds)...final maxdiff:" << diffs.maxDiff() << endl;
         } else {
             if( props.verbose >= 2 )
         } else {
             if( props.verbose >= 2 )
-                cout << "MF::run:  ";
-            cout << "converged in " << t / pass_size << " passes (" << toc() - tic << " clocks)." << endl;
+                cout << Name << "::run:  ";
+            cout << "converged in " << t / pass_size << " passes (" << toc() - tic << " seconds)." << endl;
         }
     }
 
         }
     }
 
@@ -199,7 +199,7 @@ Real MF::logZ() const {
             henk *= _beliefs[j];
         henk.normalize();
         Factor piet;
             henk *= _beliefs[j];
         henk.normalize();
         Factor piet;
-        piet = factor(I).log0();
+        piet = factor(I).log(true);
         piet *= henk;
         sum -= piet.totalSum();
     }
         piet *= henk;
         sum -= piet.totalSum();
     }