Replaced complex numbers by real numbers
[libdai.git] / src / mf.cpp
index 7fe6958..921692b 100644 (file)
@@ -53,9 +53,7 @@ bool MF::checkProperties() {
 }
 
 
-void MF::Regenerate() {
-//    DAIAlgFG::Regenerate();
-
+void MF::create() {
     // clear beliefs
     _beliefs.clear();
     _beliefs.reserve( nrVars() );
@@ -82,7 +80,7 @@ void MF::init() {
 
 
 double MF::run() {
-    clock_t tic = toc();
+    double tic = toc();
 
     if( Verbose() >= 1 )
         cout << "Starting " << identify() << "...";
@@ -91,7 +89,7 @@ double MF::run() {
     Diffs diffs(pass_size * 3, 1.0);
 
     size_t t=0;
-    for( t=0; t < (MaxIter()*pass_size) && diffs.max() > Tol(); t++ ) {
+    for( t=0; t < (MaxIter()*pass_size) && diffs.maxDiff() > Tol(); t++ ) {
         // choose random Var i
         size_t i = (size_t) (nrVars() * rnd_uniform());
 
@@ -113,7 +111,7 @@ double MF::run() {
 
         if( jan.hasNaNs() ) {
             cout << "MF::run():  ERROR: jan has NaNs!" << endl;
-            return NAN;
+            return 1.0;
         }
 
         diffs.push( dist( jan, _beliefs[i], Prob::DISTLINF ) );
@@ -121,13 +119,13 @@ double MF::run() {
         _beliefs[i] = jan;
     }
 
-    updateMaxDiff( diffs.max() );
+    updateMaxDiff( diffs.maxDiff() );
 
     if( Verbose() >= 1 ) {
-        if( diffs.max() > Tol() ) {
+        if( diffs.maxDiff() > Tol() ) {
             if( Verbose() == 1 )
                 cout << endl;
-            cout << "MF::run:  WARNING: not converged within " << MaxIter() << " passes (" << toc() - tic << " clocks)...final maxdiff:" << diffs.max() << endl;
+            cout << "MF::run:  WARNING: not converged within " << MaxIter() << " passes (" << toc() - tic << " clocks)...final maxdiff:" << diffs.maxDiff() << endl;
         } else {
             if( Verbose() >= 2 )
                 cout << "MF::run:  ";
@@ -135,7 +133,7 @@ double MF::run() {
         }
     }
 
-    return diffs.max();
+    return diffs.maxDiff();
 }
 
 
@@ -170,8 +168,8 @@ vector<Factor> MF::beliefs() const {
 }
 
 
-Complex MF::logZ() const {
-    Complex sum = 0.0;
+Real MF::logZ() const {
+    Real sum = 0.0;
     
     for(size_t i=0; i < nrVars(); i++ )
         sum -= beliefV(i).entropy();
@@ -183,7 +181,7 @@ Complex MF::logZ() const {
         Factor piet;
         piet = factor(I).log0();
         piet *= henk;
-        sum -= Complex( piet.totalSum() );
+        sum -= piet.totalSum();
     }
 
     return -sum;
@@ -192,7 +190,7 @@ Complex MF::logZ() const {
 
 void MF::init( const VarSet &ns ) {
     for( size_t i = 0; i < nrVars(); i++ ) {
-        if( ns && var(i) )
+        if( ns.contains(var(i) ) )
             _beliefs[i].fill( 1.0 );
     }
 }